通过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

看来访问已经没有问题咯。