安装tinc
安装tinc
apt install tinc
运行/卸载脚本
##tinc-up
#!/bin/sh
ip route del 10.10.10.0/24 dev $INTERFACE
ip addr del 10.10.10.1/32 dev $INTERFACE
ip link set $INTERFACE down
##tinc-down
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.10.10.1/32 dev $INTERFACE
ip route add 10.10.10.0/24 dev $INTERFACE
生成私钥
tincd -n synology_pub -K4096
自启动
systemctl enable tinc@网络名
systemctl start tinc@网络名
其安装过程很简单,网上一搜都能搜得到。
网络结构
网络架构如下:
目前需求是192.168.17.0/24的网段机器都可访问192.168.10.0/24网段。
进行跨网段互通
这里我的tinc配置如下:
Name = client_nanjing_n1
ConnectTo = client_raspberry_3b
AddressFamily = ipv4
Device = /dev/net/tun
Interface = tun0
BindToAddress = * 65222
Mode = switch
Compression=11
TCPOnly = yes
Cipher = aes-256-cbc
Digest = sha256
PingInterval = 60
PingTimeout = 60
MaxConnections = 300
LocalDiscovery = yes
PMTU = 1400
PMTUDiscovery = yes
MTUInfoInterval = 5
ClampMSS = yes
都是常规配置,最主要的在hosts里,client_nanjing_n1文件如下:
Subnet = 10.10.10.1/32
Subnet = 192.168.10.0/24
Address = xxxxx
Port = 65222
-----BEGIN RSA PUBLIC KEY-----
xxxxx
-----END RSA PUBLIC KEY-----
可以看到配置里节点A声明了其所在的子网192.168.10.0/24。
确认tinc节点可以互通
使用ping确定了节点A和节点B可以互通。
节点A
ping 10.10.10.14
PING 10.10.10.14 (10.10.10.14) 56(84) bytes of data.
64 bytes from 10.10.10.14: icmp_seq=1 ttl=64 time=5.63 ms
64 bytes from 10.10.10.14: icmp_seq=2 ttl=64 time=5.80 ms
64 bytes from 10.10.10.14: icmp_seq=3 ttl=64 time=5.55 ms
64 bytes from 10.10.10.14: icmp_seq=4 ttl=64 time=5.44 ms
^C
--- 10.10.10.14 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 9ms
rtt min/avg/max/mdev = 5.437/5.602/5.796/0.160 ms
节点B
ping 10.10.10.1
PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=5.38 ms
64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=5.68 ms
64 bytes from 10.10.10.1: icmp_seq=3 ttl=64 time=5.23 ms
64 bytes from 10.10.10.1: icmp_seq=4 ttl=64 time=8.92 ms
^C
--- 10.10.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 5.230/6.303/8.924/1.521 ms
节点A配置转发规则
首先要开启IP包转发
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p
配置iptables规则
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# 创建MASQUERADE规则
sudo iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
节点B配置路由
节点B只需要增加个目标网络的路由即可
ip route add 192.168.10.0/24 via 10.10.10.1
# windos 下增加
# route add 192.168.10.0 mask 255.255.255.0 10.10.10.1
也可以在tinc-up的脚本中增加。
仍无法通信?
上面配置完成后,仅能ping同目标网络下同一tinc的节点的物理地址(默认也可以),其他非运行tinc的机器无法通信。
这是因为还没有配置返程的路由。比如,192.168.10.94接收到了10.10.10.14的数据包,但是不知道如何回包到10.10.10.14 。
虽然可以增加路由进行配置,但是不可能每台设备都需要配置。
这里在路由处增加个静态路由即可。
至此,节点B应该可以与192.168.10.0/24的任意机器通信了。
ping 192.168.10.94
PING 192.168.10.94 (192.168.10.94) 56(84) bytes of data.
64 bytes from 192.168.10.94: icmp_seq=1 ttl=62 time=11.9 ms
64 bytes from 192.168.10.94: icmp_seq=2 ttl=62 time=9.43 ms
64 bytes from 192.168.10.94: icmp_seq=3 ttl=62 time=57.0 ms
64 bytes from 192.168.10.94: icmp_seq=4 ttl=62 time=86.8 ms
^C
--- 192.168.10.94 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 9.433/41.274/86.750/32.369 ms
$ ping 192.168.10.254
PING 192.168.10.254 (192.168.10.254) 56(84) bytes of data.
64 bytes from 192.168.10.254: icmp_seq=1 ttl=63 time=7.88 ms
64 bytes from 192.168.10.254: icmp_seq=2 ttl=63 time=6.88 ms
64 bytes from 192.168.10.254: icmp_seq=3 ttl=63 time=6.03 ms
64 bytes from 192.168.10.254: icmp_seq=4 ttl=63 time=12.4 ms
^C
--- 192.168.10.254 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 6.031/8.308/12.449/2.478 ms