我的 MiniLab:内网互联

Jul 15, 2025

我在每个区域的网络里都有一台常开的开发板,平常会通过 Tailscale 连接上去,访问上面部署的 Xray 客户端,或者帮父母远程解决一些问题。

问题是,目前我只能访问这台设备,无法访问它所在局域网内的其他设备。

我不想用 Exit-Node ,因为它不仅需要在客户端安装 Tailscale,还会代理全部流量。我选择通过配置子网 + 静态路由来实现两端局域网的互通,这样局域网内的任意设备都无需安装 Tailscale,就能直接访问对方网络中的资源。

我目前有两个网段: 192.168.17.0/24192.168.31.0/24,我们的目标就是通过处于这两个网段下的某一台设备转发去往另一个网段的流量。

首先,在这台设备上安装 Tailscale,然后启用流量转发:

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf

接着宣告该设备所在的网段,例如设备局域网 IP 为 192.168.31.227,那么他就处于 192.168.31.0/24 这个网段:

sudo tailscale set --accept-routes=true --advertise-routes=192.168.31.0/24
sudo systemctl restart tailscaled

由于所有启用了 Tailscale 路由功能的节点,都会将其宣告的网段流量指向该设备,因此为了安全,还需要在 Tailscale 管理面板中显式允许该设备转发这些网段的流量:

  1. 打开 Machines 页面。
  2. 使用 property:subnet filter 筛选出所有宣告了子网路由的设备。
  3. 找到目标设备,点击 Edit route settings
  4. Subnet routes 下,勾选需要允许的网段,然后点击 Save

接下来,需要在路由器上添加静态路由规则。请登录路由器后台:

  1. 打开 Network → Routing 页面。
  2. 点击 Add 新建一条路由规则。
  3. Interface 选择 lan(或你的局域网接口),Destination 填写需要访问的目标网段,例如本地是 192.168.31.0/24,目标是 192.168.17.0/24
  4. Gateway 填写入口节点的 IP,例如 192.168.31.227

请注意,为了让两个网段能够双向通信,目标网段的路由器也需要配置对应的静态路由规则,流程相同。