通过Tailscale我们可以将处于不同位置的主机组建一个私有网络(Tailnet),这些设备都可以通过Tailscale分配的IP进行互相访问。
但有时会存在这样的情况,局域网中部分设备没有对应的Tailscale客户端,或者只有一台设备方便安装Tailscale,但我们想通过访问局域网IP的方式来访问其他设备,这时我们就需要使用Tailscale提供的子网路由(Subnet Routers)功能来实现。
例如:办公室PC、VPS和局域网内的斐讯N1都安装了Tailscale,局域网中有斐讯N1,PC,NAS,RouterOS路由器。
我们可以在斐讯N1上配置子网路由,这样办公室PC和VPS就可以通过局域网IP来访问内部的PC,NAS,RouterOS路由器。
开启ip转发
如果你的linux系统有/etc/sysctl.d目录,执行如下操作:
echo 'net.ipv4.ip_forward = 1' | tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/99-tailscale.conf
sysctl -p /etc/sysctl.d/99-tailscale.conf
或者执行如下操作:
echo 'net.ipv4.ip_forward = 1' | tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
N1有/etc/sysctl.d目录,采用第一种操作。
N1设置子网路由
N1已经加入Tailscale,通过以下命令设置子路由(192.168.1.0/24)
tailscale set --advertise-routes=192.168.1.0/24
第一次加入Tailscale,可以通过以下方法直接配置子路由
tailscale up --advertise-routes=192.168.1.0/24
可以设置多个子路由,格式如:--advertise-routes=192.168.1.0/24,192.168.2.0/24
设置完后,在Tailscale网站管理页面,点击进入N1设备,选择右上角Machine settings -> Edit route settings,在Subnet routers中勾选刚设置的子路由192.168.1.0/24保存即可。
外网终端设置接受路由
在外网设备中,我们要设置接受子网路由才可以使用该功能。
在Linux设备中,通过以下命令接受路由
tailscale up --accept-routes
Windows和MACOS上默认开启,移动端打开Use Tailscale subnets开关。
验证功能
在VPS上ping一下内网RouterOS的ip看下是否能通
➜ ~ ping 192.168.1.111
PING 192.168.1.111 (192.168.1.111) 56(84) bytes of data.
64 bytes from 192.168.1.111: icmp_seq=1 ttl=63 time=745 ms
64 bytes from 192.168.1.111: icmp_seq=2 ttl=63 time=252 ms
64 bytes from 192.168.1.111: icmp_seq=3 ttl=63 time=252 ms
64 bytes from 192.168.1.111: icmp_seq=4 ttl=63 time=252 ms
64 bytes from 192.168.1.111: icmp_seq=5 ttl=63 time=252 ms
64 bytes from 192.168.1.111: icmp_seq=6 ttl=63 time=252 ms
64 bytes from 192.168.1.111: icmp_seq=7 ttl=63 time=251 ms
^C
--- 192.168.1.111 ping statistics ---
8 packets transmitted, 7 received, 12.5% packet loss, time 7002ms
rtt min/avg/max/mdev = 250.515/322.219/745.459/172.787 ms
看来访问已经没有问题咯。