OpenWRT 结合 tinc 组自己的 SDLAN(Step by Step) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hiplon
V2EX    宽带症候群

OpenWRT 结合 tinc 组自己的 SDLAN(Step by Step)

  •  1
     
  •   hiplon 2020-03-04 16:41:34 +08:00 8670 次点击
    这是一个创建于 2055 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文主要实现在 OpenWRT 路由器以及不同系统下通过 tinc switch mode 搭建 SDLAN 内网服务器方便远程连接,

    Switch Mode 相对来说配置比较简单,各节点均在同一广播域内,方便调控,tinc 节点本身通过 NAT+SNAT 可以实现对不同网间端口的调通,

    同时 Switch Mode 中各节点的 hosts 文件只需保证在公网地址的节点中全部拥有维护即可,其他节点只需维护本节点以及公网节点的 hosts 文件

    下面主要分三步:

    ( 1 )公网节点的部署(Master 节点)

    ( 2 )其他节点的部署(Slave 节点)

    ( 3 )节点的 NAT 配置

    本次搭建的拓扑以下为例,两个 Master 节点,若干个 Slave 节点(以 3 个不同操作系统的为例)

    Topo

    ( 0 ) tinc 的安装

    各大 Linux 发行版基本都可以通过包管理对 tinc 进行安装

    sudo yum install tinc sudo apt install tinc 

    OpenWRT 也可通过opkg安装 tinc

    opkg update opkg install tinc 

    Windows 可在官网下载

    [https://www.tinc-vpn.org/packages/windows/tinc-1.1pre17-install.exe]: https://www.tinc-vpn.org/packages/windows/tinc-1.1pre17-install.exe "windows tinc download link"

    Windows 中自带的 TAP-Windwos 版本比较低,建议可以考虑另外安装版本较新的 TAP-Windows 新建虚拟网卡而不是用 tinc-vpn 安装包中自带的 TAP-Windows

    ( 1 )公网节点的部署(Master 节点)

    需要预先定义定义一个网络名 本次以tincnet为例NETNAME = tincnet

    每个节点均需要以以下目录结构创建好配置文件夹

    /etc/tinc/tincnet

     % ls -la total 24 drwxr-xr-x 3 root root 4096 Mar 4 15:07 . drwxr-xr-x 4 root root 4096 Mar 4 15:06 .. drwxr-xr-x 2 root root 4096 Mar 4 15:06 hosts -rwxr-xr-x 1 root root 198 Mar 4 15:06 tinc.conf -rwxr-xr-x 1 root root 72 Mar 4 15:06 tinc-down -rwxr-xr-x 1 root root 81 Mar 4 15:06 tinc-up 

    tinc.conf 为 tinc 的配置文件,tinc-down,tinc-up 为启动 tinc 时执行的脚本,一般用作启动网络,hosts 文件夹中存的是各个结点的连接交换信息。

    下面先说其中一个节点Linux_Public_Node(2.2.2.2)

    各个文件配置情况:

    tinc.conf

     % cat tinc.conf Name = Linux_Public_Node #此节点名称为 Linux_Public_Node AddressFamily = ipv4 #Internet 走 IPv4 协议 BindToAddress = * 11001 #监听端口 Interface = tinctun0 #tincnet 虚拟网卡 Device = /dev/net/tun #Mode = <router|switch|hub> (router) Mode = switch #设置使用 Swtich 模式 默认为 router COnnectTo= OpenWRT_Public_Node #连接另一公网 Master 节点保持双活 Cipher = aes-128-cbc #对称加密算法 

    tinc-up tinc 启动脚本,给对应网卡加 IP

     % cat tinc-up #!/bin/sh ip link set $INTERFACE up ip addr add 192.168.212.8/24 dev $INTERFACE 

    tinc-down tinc 停止脚本,关停对应网卡

     % cat tinc-down #!/bin/sh ip addr del 192.168.212.8/24 dev $INTERFACE ip link set $INTERFACE down 

    hosts 文件夹 主要保存各节点的交换信息,由于是第一次创建,里面应该是空文件夹,需要先创建一个自己节点的链接信息

     cd hosts touch Linux_Public_Node 
     % cat Linux_Public_Node Address = 2.2.2.2 #公网地址 Subnet = 192.168.212.8/32 #tincnetIP 信息 Port = 11001 #公网监听端口 

    创建完成后通过 tincd 生成非对称密钥信息

     % sudo tincd -n tincnet -K Generating 2048 bits keys: .............+++++ p ........................+++++ q Done. Please enter a file to save private RSA key to [/etc/tinc/tincnet/rsa_key.priv]: Please enter a file to save public RSA key to [/etc/tinc/tincnet/hosts/Linux_Public_Node]: 

    现在tincnet文件夹中会生成私钥,对应的公钥信息会补全到host/Linux_Public_Node

     % ls /etc/tinc/tincnet hosts rsa_key.priv tinc.conf tinc-down tinc-up % cat /etc/tinc/tincnet/hosts/Linux_Public_Node Address = 2.2.2.2 Subnet = 192.168.212.8/32 Port = 11001 -----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAp7F+8s8lukRv0qaE5hzrQmuy2MPb8hlte/G0pcfnBCVjIL5foJ7P LZQrTGTsKjRbPzJ9gfZUXiZRkaA+G6Q4DBOVEt41cTceZTgAzL3ief3H6MNXQ0xW 1Wo8kDNlg6g+QJq8iV5j7adJnEPivrDm4CWl8MRmVOckisnQbseKXeuzIYDhpZLA nlIIGMzhk3OZoPn2xpdMbJqbR0K6SrPvYq7sT3eLn0NVUbyo9D1dmtwtOJy8wmaf oYdwTvrMdXhNNUmemnswJt8T2j8rAerqnjqz5itN8dk9mZMTKLFZ44CNnJ8jl5pE ma8lfUnAA/Qq7i9t74pVEvWcLg8HIry16QIDAQAB -----END RSA PUBLIC KEY----- 

    至此,节点Linux_Public_Node(2.2.2.2)中的配置已经完成,

    下面配置另外一个节点OpenWRT_Public_Node(1.1.1.1)

    主要的配置文件生成过程节点 Linux_Public_Node 类似

    生成后如下:

    ls -la /etc/tinc/tincnet/ drwxr-xr-x 3 root root 4096 Mar 4 15:32 . drwxr-xr-x 4 root root 4096 Mar 4 15:29 .. drwxr-xr-x 2 root root 4096 Mar 4 15:32 hosts -rw------- 1 root root 1680 Mar 4 15:32 rsa_key.priv -rwxr-xr-x 1 root root 72 Mar 4 15:30 tinc-down -rwxr-xr-x 1 root root 80 Mar 4 15:30 tinc-up -rw-r--r-- 1 root root 218 Mar 4 15:31 tinc.conf ls -la /etc/tinc/tincnet/hosts drwxr-xr-x 2 root root 4096 Mar 4 15:32 . drwxr-xr-x 3 root root 4096 Mar 4 15:32 .. -rw-r--r-- 1 root root 484 Mar 4 15:32 OpenWRT_Public_Node cat /etc/tinc/tincnet/tinc.conf Name = OpenWRT_Public_Node AddressFamily = ipv4 BindToAddress = * 11001 Interface = tinctun0 Device = /dev/net/tun #Mode = <router|switch|hub> (router) Mode = switch COnnectTo= Linux_Public_Node Cipher = aes-128-cbc cat /etc/tinc/tincnet/tinc-up #!/bin/sh ip link set $INTERFACE up ip addr add 192.168.212.6/24 dev $INTERFACE cat /etc/tinc/tincnet/tinc-down ip addr del 192.168.212.6/24 dev $INTERFACE ip link set $INTERFACE down cat /etc/tinc/tincnet/hosts/OpenWRT_Public_Node Address = 1.1.1.1 Subnet = 192.168.212.6/32 Port = 11001 -----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEA6Tzot1eXupi+NRCfr29iKbgiXEMW1Ol327WOrAwRtiwGgQIx8LcL iy9m+sZEWVzlfvhMub6RVM4xlZ39ghYn2OFP4x9K4D6O/HTZHbamuLOEG5zRyVGK EN+tTStIeEaiHad04QR+6ZFB+UO7WFcBzwVh/rysOL96KaUoU9VeYHVAIkubNsvA aNSFbmqGYpl5FrXv+sJjMyGRXjc9Lb3q/FWmPApvo/9FTElHx0xH7wvAZnc7mTCH DB6DN62A1McgydGpn7NLnuFFEeVQf3SI9TqvajcA3vXS8P9RWuRoF5HivZIL5Ebn FJg0UkyJcWXHUNRczdfTACF6ha0ewk8T9QIDAQAB -----END RSA PUBLIC KEY----- 

    OpenWRT 下需要再对/etc/config/tinc进行以下修改

    cat /etc/config/tinc config tinc-net tincnet option enabled 1 option Name OpenWRT_Public_Node config tinc-host OpenWRT_Public_Node option enabled 1 option net tincnet 

    下面要做的就是先将两个 Master 节点的 hosts 文件夹各自补充对方的节点信息,简单来说就是复制自己那份过去对面,保证两个节点的 hosts 文件夹都有全部节点的 hosts 信息

    % ls -la /etc/tinc/tincnet/hosts total 16 drwxr-xr-x 2 root root 4096 Mar 4 15:37 . drwxr-xr-x 3 root root 4096 Mar 4 15:25 .. -rw-r--r-- 1 root root 486 Mar 4 15:25 Linux_Public_Node -rw-r--r-- 1 root root 485 Mar 4 15:37 OpenWRT_Public_Node % cat Linux_Public_Node Address = 2.2.2.2 Subnet = 192.168.212.8/32 Port = 11001 -----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAp7F+8s8lukRv0qaE5hzrQmuy2MPb8hlte/G0pcfnBCVjIL5foJ7P LZQrTGTsKjRbPzJ9gfZUXiZRkaA+G6Q4DBOVEt41cTceZTgAzL3ief3H6MNXQ0xW 1Wo8kDNlg6g+QJq8iV5j7adJnEPivrDm4CWl8MRmVOckisnQbseKXeuzIYDhpZLA nlIIGMzhk3OZoPn2xpdMbJqbR0K6SrPvYq7sT3eLn0NVUbyo9D1dmtwtOJy8wmaf oYdwTvrMdXhNNUmemnswJt8T2j8rAerqnjqz5itN8dk9mZMTKLFZ44CNnJ8jl5pE ma8lfUnAA/Qq7i9t74pVEvWcLg8HIry16QIDAQAB % cat OpenWRT_Public_Node Address = 1.1.1.1 Subnet = 192.168.212.6/32 Port = 11001 -----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEA6Tzot1eXupi+NRCfr29iKbgiXEMW1Ol327WOrAwRtiwGgQIx8LcL iy9m+sZEWVzlfvhMub6RVM4xlZ39ghYn2OFP4x9K4D6O/HTZHbamuLOEG5zRyVGK EN+tTStIeEaiHad04QR+6ZFB+UO7WFcBzwVh/rysOL96KaUoU9VeYHVAIkubNsvA aNSFbmqGYpl5FrXv+sJjMyGRXjc9Lb3q/FWmPApvo/9FTElHx0xH7wvAZnc7mTCH DB6DN62A1McgydGpn7NLnuFFEeVQf3SI9TqvajcA3vXS8P9RWuRoF5HivZIL5Ebn FJg0UkyJcWXHUNRczdfTACF6ha0ewk8T9QIDAQAB -----END RSA PUBLIC KEY----- 

    最后通过 systemctl,OpenWRT 通过 RC 启动 tinc, 并互 ping 测试一下

    #Linux_Public_Node systemctl systemctl start tinc@tincnet #OpenWRT_Public_Node rc /etc/init.d/tinc start 

    ping from Linux_Public_Node(192.168.212.8) to OpenWRT_Public_Node(192.168.212.6)

    Topo

    ping from OpenWRT_Public_Node(192.168.212.6) to Linux_Public_Node(192.168.212.8)

    Topo

    ( 2 )其他节点的部署(Slave 节点)

    Linux 系统以节点OpenWRT_Internal_Node(192.168.212.12)为例

    同样,先按照之前的文件夹结构创建好对应目录,并复制两个 Master 节点 hosts 信息到 hosts 文件夹,

    ls -la /etc/tinc/tincnet/ drwxr-xr-x 3 root root 0 Mar 4 16:01 . drwxr-xr-x 4 root root 0 Mar 4 15:52 .. drwxr-xr-x 2 root root 0 Mar 4 16:01 hosts -rw------- 1 root root 1676 Mar 4 16:01 rsa_key.priv -rwxr-xr-x 1 root root 74 Mar 4 15:58 tinc-down -rwxr-xr-x 1 root root 82 Mar 4 15:58 tinc-up -rw-r--r-- 1 root root 209 Mar 4 16:00 tinc.conf ls -la /etc/tinc/tincnet/hosts/ drwxr-xr-x 2 root root 0 Mar 4 16:01 . drwxr-xr-x 3 root root 0 Mar 4 16:01 .. -rw-r--r-- 1 root root 0 Mar 4 15:58 Linux_Public_Node -rw-r--r-- 1 root root 454 Mar 4 16:01 OpenWRT_Internal_Node -rw-r--r-- 1 root root 0 Mar 4 15:58 OpenWRT_Public_Node cat /etc/tinc/tincnet/ hosts/ rsa_key.priv tinc-down tinc-up tinc.conf cat /etc/tinc/tincnet/tinc.conf Name = OpenWRT_Internal_Node Interface = tinctun0 Device = /dev/net/tun #Mode = <router|switch|hub> (router) Mode = switch COnnectTo= Linux_Public_Node #此处需要配置链接到两个主节点 COnnectTo= OpenWRT_Public_Node #此处需要配置链接到两个主节点 Cipher = aes-128-cbc cat /etc/tinc/tincnet/tinc-up #!/bin/sh ip link set $INTERFACE up ip addr add 192.168.212.12/24 dev $INTERFACE cat /etc/tinc/tincnet/tinc-down ip addr del 192.168.212.12/24 dev $INTERFACE ip link set $INTERFACE down cat /etc/tinc/tincnet/hosts/OpenWRT_Internal_Node Subnet = 192.168.212.21/32 #只需要配置 Subnet 参数 -----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAnU1maDEvbyC2XJLC8aiiwixR+einVu9gyJ4Pi1uhNMSJuVHB0HLQ s16eOJvoEeJ4q6x0YLwjVJLlcLRW46wUAr1eMLjiovGKcYL8fZCg+Agms3+0y2SM MaKi5fgBKjXLhdeBx4pvLaBlgYz4BP7pcVLgI0/NHBR6K1PClUtYDN1xCt5SOpiF XIwyIawwIs6mxLknm7M0a68j7e3ovIsBOW7nLVL0GpLXVJBjAbs5z00uNOVaNJkz tvttShGgaa+B6o1Xy8gLwB84wKNUXZbmkLobOK7h0qYgEmnQscR8Rhw5G9UJfU8G 8nrPdRRCZnDR5xRpuy0rRJG7gAzpEJ9kHwIDAQAB -----END RSA PUBLIC KEY----- #以下为 OpenWRT 系统需要配置 cat /etc/config/tinc config tinc-net tincnet option enabled 1 option Name OpenWRT_Internal_Node config tinc-host OpenWRT_Internal_Node option enabled 1 option net tincnet 

    然后需要复制 hosts 文件夹的本节点信息host\OpenWRT_Internal_Node到 Master 节点的 hosts 文件夹中,重启 tinc 服务即可通,

    ping 192.168.212.8 PING 192.168.212.8 (192.168.212.8): 56 data bytes 64 bytes from 192.168.212.8: seq=0 ttl=64 time=25.108 ms 64 bytes from 192.168.212.8: seq=1 ttl=64 time=8.567 ms 64 bytes from 192.168.212.8: seq=2 ttl=64 time=8.891 ms 64 bytes from 192.168.212.8: seq=3 ttl=64 time=8.745 ms ^C --- 192.168.212.8 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 8.567/12.827/25.108 ms ping 192.168.212.6 PING 192.168.212.6 (192.168.212.6): 56 data bytes 64 bytes from 192.168.212.6: seq=0 ttl=64 time=7.328 ms 64 bytes from 192.168.212.6: seq=1 ttl=64 time=6.871 ms 64 bytes from 192.168.212.6: seq=2 ttl=64 time=7.205 ms 64 bytes from 192.168.212.6: seq=3 ttl=64 time=7.130 ms ^C --- 192.168.212.6 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 6.871/7.133/7.328 ms 

    再配置一个 Windows 系统的,

    首先需要新增一个 TAP-Windows 的虚拟网卡,以另外安装的新版本 TAP-Windows 驱动为例,管理员权限运行 CMD

    C:\Users\k>cd C:\Program Files\TAP-Windows\bin C:\Program Files\TAP-Windows\bin>.\addtap.bat C:\Program Files\TAP-Windows\bin>rem Add a new TAP virtual ethernet adapter C:\Program Files\TAP-Windows\bin>"C:\Program Files\TAP-Windows\bin\tapinstall.exe" install "C:\Program Files\TAP-Windows\driver\OemVista.inf" tap0901 Device node created. Install is complete when drivers are installed... Updating drivers for tap0901 from C:\Program Files\TAP-Windows\driver\OemVista.inf. Drivers installed successfully. C:\Program Files\TAP-Windows\bin>pause 请按任意键继续. . . 

    到网络连接管理中重命名网卡名称并手动配置 IP 地址

    Topo

    Topo

    然后创建好文件目录

    C:\Program Files\tinc\tincnet 的目录 2020/03/04 16:14 <DIR> . 2020/03/04 16:14 <DIR> .. 2020/03/04 16:16 <DIR> hosts 2020/03/04 16:17 167 tinc.conf 1 个文件 167 字节 3 个目录 144,868,106,240 可用字节 C:\Program Files\tinc\tincnet\hosts 的目录 2020/03/04 16:16 <DIR> . 2020/03/04 16:16 <DIR> .. 2020/03/04 16:16 499 Linux_Public_Node 2020/03/04 16:16 496 OpenWRT_Public_Node 2020/03/04 16:16 27 Windows_Internal_Node 3 个文件 1,022 字节 2 个目录 144,864,964,608 可用字节 

    C:\Program Files\tinc\tincnet\tinc.conf

    Name = Windows_Internal_Node Interface = tinctun0 #Mode = <router|switch|hub> (router) Mode = switch COnnectTo= OpenWRT_Public_Node COnnectTo= Linux_Public_Node 

    C:\Program Files\tinc\tincnet\hosts\Windows_Internal_Node

    Subnet = 192.168.212.116/32 

    生成密钥

    C:\Program Files\tinc>.\tinc.exe -n tincnet tinc.tincnet> generate-rsa-keys Generating 2048 bits keys: ...................................................+++ p ......................+++ q Done. Please enter a file to save private RSA key to [C:/Program Files\tinc\tincnet\rsa_key.priv]: Please enter a file to save public RSA key to [C:/Program Files\tinc\tincnet\hosts\Windows_Internal_Node]: tinc.tincnet> quit C:\Program Files\tinc> 

    然后将带公钥信息的 Windows_Internal_Node 复制到两个 Master 节点上面重启节点

    通过 Windows 计算机管理中的服务启动 tinc

    Topo

    PING 其他 Slave 节点测试

    C:\Program Files\tinc>ping 192.168.212.12 正在 Ping 192.168.212.12 具有 32 字节的数据: 来自 192.168.212.12 的回复: 字节=32 时间=12ms TTL=64 来自 192.168.212.12 的回复: 字节=32 时间=11ms TTL=64 来自 192.168.212.12 的回复: 字节=32 时间=12ms TTL=64 来自 192.168.212.12 的回复: 字节=32 时间=11ms TTL=64 192.168.212.12 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 11ms,最长 = 12ms,平均 = 11ms 

    如果还有新增节点,那么只需在节点本地创建好配置文件以及 hosts 信息,然后将本节点的 hosts 信息复制到 Master 节点上面即可。

    ( 3 )节点的 NAT 配置

    这个是补充内容,比如 Slave 节点 OpenWRT_Internal_Node 的 br-lan 网卡有另一网段 192.168.1.0/24 的地址 192.168.1.1,那么如果我想在 Windows_Internal_Node 通过 OpenWRT_Internal_Node 的 tincnet 地址 192.168.212.12:8080 直接访问 OpenWRT_Internal_Node 192.168.1.0/24 网段中的 192.168.1.20:80,那么可以可以通过 NAT 直接实现。

    具体 iptables 配置如下:

    iptables -A input_rule -i tinctun+ -j ACCEPT iptables -A forwarding_rule -i tinctun+ -j ACCEPT iptables -A forwarding_rule -o tinctun+ -j ACCEPT iptables -A output_rule -o tinctun+ -j ACCEPT iptables -t nat -A PREROUTING -i tinctun0 -p tcp -d 192.168.212.12 --dport 8080 -j DNAT --to-destination 192.168.1.20:80 iptables -t nat -A POSTROUTING -s 192.168.212.0/24 -o br-lan -j SNAT --to 192.168.1.1 

    refer: 1.openwrt-tinc

    24 条回复    2023-06-23 23:03:23 +08:00
    flynaj
        1
    flynaj  
       2020-03-04 19:29:04 +08:00 via Android
    zerotier 简单,方便,高速。你这个 11 访问 12 就要经过服务器中转
    hiplon
        2
    hiplon  
    OP
       2020-03-04 20:02:22 +08:00
    @flynaj #1 如果不想中转那么就得要全部节点都维护 hosts 也行,对比 zerotier 就是多一个选择。
    tia
        3
    tia  
       2020-03-05 19:27:41 +08:00
    在用 zerotier,自建 moon 很好用
    tallest
        4
    tallest  
       2020-03-06 12:56:15 +08:00
    @tia 说出来你可能不信,我自建 Moon 节点,在公司永远打不起洞。。
    hiplon
        5
    hiplon  
    OP
       2020-03-06 19:43:49 +08:00
    @tallest #4 可能是公司防火墙没有完全开放全部端口
    abbottcn
        6
    abbottcn  
       2020-03-08 11:01:39 +08:00 via iPhone
    我遇到过类似的问题。关闭防火墙不通,打开防火墙,允许通过,然后就畅通了。没明白为什么。
    sunulin
        7
    sunulin  
       2020-07-21 09:50:03 +08:00
    win10 64 位 装了最新虚拟网卡,名字也改了跟配置一样的 ip 也设置了
    一直提示

    tincd 1.1pre17 (Oct 8 2018 11:03:51) starting, debug level 3
    Warning: both Device and Interface specified, results may not be as expected
    No Windows tap device found!
    Disabling Windows tap device
    Terminating
    no2iam
        8
    no2iam  
       2020-07-31 10:09:36 +08:00
    @flynaj
    @tia
    遇到 ISP 不做人,疯狂 QOS 丢包,有没有办法呢?
    flynaj
        9
    flynaj  
       2020-07-31 11:35:49 +08:00
    @no2iam #8 换软件试试。zerotier ,softether
    no2iam
        10
    no2iam  
       2020-08-02 11:11:51 +08:00
    @flynaj
    说的就是 zerotier 。不支持 tcp 才被 QOS 。2.0 不知啥时候能出。
    目前看来 tinc 的方案完美。
    flynaj
        11
    flynaj  
       2020-08-02 11:27:51 +08:00
    @no2iam #10 udp 慢,有时候是路由器的问题,你不过路由器直接电脑报号看看,不行就上 softether 了!
    ciaoly
        12
    ciaoly  
       2020-10-20 10:27:38 +08:00 via Android
    tinc 1.1 preview 了好多年了,唉是不是废弃了?
    weyou
        13
    weyou  
       2021-07-23 19:21:26 +08:00 via Android
    @flynaj @hiplon
    tinc 两个 slave 之间经过服务器中转?不存在的,那是你们对 tinc 的严重误解
    hiplon
        14
    hiplon  
    OP
       2021-07-23 19:33:30 +08:00
    @weyou 我没看过 tinc 源码,我测试过维护全 hosts 和不维护全 hosts 的测速结果和抓包,只有各节点有维护全 hosts 的情况可以跑满带宽不经 Master 节点,如果你有进一步的看法和源码可以提一下。
    acbot
        15
    acbot  
       2021-07-24 09:20:25 +08:00
    router switch 这两种模式有什么实质区别
    hiplon
        16
    hiplon  
    OP
       2021-07-24 09:28:13 +08:00
    @acbot 用 router 模式节点互通需要加路由,switch 各节点可以配置同网段 IP 直接互通,下面是用 router 模式的实例

    ```bash
    "routera" master-router

    tinc.conf

    Name = routera
    Device=/dev/net/tun
    TCPOnly= on
    PMTU = 1280
    PMTUDiscovery = yes
    Mode = switch
    Interface = vpn6

    tinc-up

    #!/bin/sh
    #Enable tinc
    ip -6 link set vpn6 up mtu 1280 txqueuelen 1000
    ip -6 addr add 2001:db8:beef::1/64 dev vpn6
    ip -6 route add 2001:db8:beef::/48 dev vpn6
    #Static routing table
    ip -6 route add 2001:db8:beef:2::/64 via 2001:db8:beef::2
    ip -6 route add 2001:db8:beef:3::/64 via 2001:db8:beef::3
    ip -6 route add 2001:db8:beef:4::/64 via 2001:db8:beef::4

    tinc-down

    #!/bin/sh
    #Static routing table
    ip -6 route del 2001:db8:beef:2::/64 via 2001:db8:beef:::2
    ip -6 route del 2001:db8:beef:3::/64 via 2001:db8:beef:::3
    ip -6 route del 2001:db8:beef:4::/64 via 2001:db8:beef:::4
    #Disable tinc
    ip -6 route del 2001:db8:beef::/48 dev vpn6
    ip -6 addr del 2001:db8:beef::1/64 dev vpn6
    ip -6 link set vpn6 down

    "routerb" client-router

    tinc.conf

    Name=routerb
    Device=/dev/net/tun
    TCPOnly= yes
    PMTU = 1280
    PMTUDiscovery = yes
    Mode = switch
    Interface = vpn6
    COnnectTo= routera

    tinc-up

    #!/bin/sh
    ip -6 link set vpn6 up mtu 1280
    ip -6 addr add 2001:db8:beef::2/64 dev vpn6
    ip -6 route add default via 2001:db8:beef::1

    tinc-down

    #!/bin/sh
    ip -6 route del default via 2001:db8:beef::1
    ip -6 addr del 2001:db8:beef::2/64 dev vpn6
    ip -6 link set vpn6 down

    ```
    acbot
        17
    acbot  
       2021-07-24 09:48:20 +08:00
    @hiplon 大佬,还有没有更详细的参数级中文资料,分享一下。官方的资料很多说得不清楚。比如 我前面问的问题都没有人深入研究或解释过 另外比如 TCPOnly 设置成 on 但是服务启动得时候还是会监听 UDP,难道说这里指得是 该节点对外连接得时候仅仅使用 TCP ? 等等很多疑问都不好找答案
    hiplon
        18
    hiplon  
    OP
       2021-07-24 10:29:54 +08:00
    @acbot 我也没有深入研究过,仅就停留的使用上
    weyou
        19
    weyou  
       2021-07-26 15:50:48 +08:00
    @hiplon

    没有看过源码, 这只是我的经验:
    1. 我有两个 slave 节点, 相互之间都没有对方的 host, 抓包可以看到数据是直接走的
    2. 而我的另外两个 slave 节点有对方 host, 数据反而是是走 master 中转的(准确的说是"有时候").

    所以个人觉得能否点对点直接传输, 跟两个节点是否有对方的 host 没有关系. 可能跟 tinc 的打洞能力有关系. 猜测只有遇到两个节点之间打洞不成功的时候, 才需要经过 public 节点中转.
    weyou
        20
    weyou  
       2021-07-26 16:17:43 +08:00
    @hiplon

    补充一下, 上面我的第 2 点走 master 的情况原因弄清楚了, 是因为有一个 slave 节点用了 TCPOnly 模式, 猜测使得 tinc 不能用 UDP 打洞了. 刚刚改了 UDP 模式, 现在抓包看, 全网 5 个节点相互之间都是直通的.
    hiplon
        21
    hiplon  
    OP
       2021-07-26 20:44:20 +08:00
    @weyou 主要还有点,我之前试过这种情况下 ipref 带宽是跑不满的
    weyou
        22
    weyou  
       2021-07-27 00:23:50 +08:00 via Android
    那就可能不是直连,可以抓包看看是不是直连,我的是 1.0.36 版本,据说 1.1 版本可以用 tinc info 来查看是不是直连,我没有试过,供你参考,来源 https://www.tinc-vpn.org/pipermail/tinc/2016-November/004685.html
    mikaelson
        23
    mikaelson  
       2023-06-23 22:50:29 +08:00
    还有在用这个吗?我最近把 server 从阿里迁移到腾讯,碰到了一个很奇葩的问题
    组网成功,都能 ping 通,但是各个 slave 节点互相通信的时候,尤其是 scp 直接跟被拦截一样,一下掉到了 0kb
    mikaelson
        24
    mikaelson  
       2023-06-23 23:03:23 +08:00
    @weyou
    23:00:51.968991 IP 10.86.8.1.56706 > 10.86.2.2.22: Flags [.], seq 1072475:1073845, ack 3302, win 291, options [nop,nop,TS val 3734661153 ecr 36807465], length 1370
    23:01:09.728151 IP 10.86.8.1.56706 > 10.86.2.2.22: Flags [.], seq 1072475:1073845, ack 3302, win 291, options [nop,nop,TS val 3734678912 ecr 36807465], length 1370
    23:01:45.311694 IP 10.86.8.1.56706 > 10.86.2.2.22: Flags [.], seq 1072475:1073845, ack 3302, win 291, options [nop,nop,TS val 3734714496 ecr 36807465], length 1370

    我这抓包看过去时直连吧。10.86.8.1 是本机 vip ,10.86.2.2 是对端
    但是不懂为什么总是没速度,跟被拦截了一样。一开始有速度,然后就没了。。。所有节点都这样。真奇怪。草。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2725 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 14:00 PVG 22:00 LAX 07:00 JFK 10:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86