马春杰杰博客
致力于深度学习经验分享!

通过Tailscale远程访问主路由和家庭局域网:iStoreOS配置子网路由完整记录

最新目录

家里的树莓派5上运行了一台iStoreOS旁路由,并且已经安装了Tailscale

在外面通过Tailscale访问iStoreOS本身一直没有问题,但是只能访问它的Tailscale IP,无法继续访问家里的主路由和其他局域网设备。

我的网络环境是:

最开始的访问方式只能是:

最终想实现的是:

这个功能在Tailscale中叫作:

简单来说,就是让iStoreOS告诉其他Tailscale设备:

访问192.168.110.0/24网段的流量,都可以交给我转发。

下面记录一下完整配置过程。

1. 检查IPv4转发

首先通过SSH登录iStoreOS

检查内核是否已经开启IPv4转发:

我这里返回:

说明已经开启,不需要继续修改。

如果返回的是:

可以临时开启:

然后创建持久配置:

应用配置:

Linux设备作为Tailscale子网路由器时,需要开启IP forwarding。(Tailscale)

2. 广播家庭局域网路由

我的家庭局域网是:

因此在iStoreOS中执行:

命令没有任何输出,也没有报错。

这里不要只广播主路由的单个地址:

直接广播整个:

以后除了主路由,还可以访问NAS、打印机、Home Assistant以及其他局域网设备。

3. 在Tailscale后台批准子网路由

只在iStoreOS中执行--advertise-routes还不够,还需要登录Tailscale管理后台批准这条路由。

进入:

勾选:

然后保存。

如果使用了自动批准策略,这一步可能已经自动完成;普通配置下,需要管理员在Machines页面手动批准。(Tailscale)

4. 检查子网路由状态

可以用JSON状态进行检查:

我这里看到:

关键是:

以及:

说明192.168.110.0/24已经出现在当前节点的允许路由中,并且已经被选为生效的主要子网路由。

也可以执行:

查找:

或者直接过滤:

正常应该能看到正在广播的:

5. 从外部网络测试

测试时不要连接家里的Wi-Fi

最好让手机关闭Wi-Fi,直接使用移动数据;电脑则可以连接手机热点。

首先确认能够访问iStoreOSTailscale IP

然后测试主路由:

浏览器打开:

如果主路由使用HTTPS

也可以使用curl测试:

或者:

配置完成后,我已经可以通过外部网络直接打开:

也就是家里的主路由管理页面。

之后访问其他局域网设备,同样直接使用它们原来的局域网地址即可。

6. Linux客户端需要接受子网路由

macOSWindowsiOSAndroid通常会自动使用已经批准的Tailscale子网路由。

如果正在使用的客户端是Linux,默认可能不会接受其他节点广播的子网路由,需要执行:

检查设置:

在官方文档中,AndroidiOSmacOSWindows默认接受子网路由,而Linux通常需要手动启用--accept-routes。(Tailscale)

7. 检查iStoreOS本地访问

如果配置后还是不能访问主路由,先确认iStoreOS自己能不能访问,在iStoreOS上运行:

正常应该类似:

测试连通性:

测试管理页面:

如果iStoreOS自己都无法访问192.168.110.1,问题就不是Tailscale,而是本地接口、路由或者主路由管理页面的访问限制。

8. 检查iStoreOS防火墙

如果iStoreOS自己能访问主路由,但是远程设备不能访问,需要检查tailscale0LAN的转发。

先查看现有配置:

如果系统中没有对应的网络接口和防火墙区域,可以先备份配置:

创建t​​ailscale0逻辑接口:

创建防火墙区域:

允许转发到LAN

保存并重启:

检查防火墙配置:

正常应该包含:

如果系统安装Tailscale时已经自动创建了相关规则,就不要重复添加,只需要确认现有规则允许t​​ailscale0 → lan转发。

9. 使用tcpdump抓包排查

如果看配置仍然无法确定问题,可以直接抓包。

iStoreOS中执行:

保持运行,然后从外部设备访问:

如果t​​ailscale0能看到请求,再打开另一个SSH窗口:

可以根据抓包结果判断:

9.1 tailscale0完全没有流量

可能原因:

  • 子网路由没有在后台批准;
  • 客户端没有接受子网路由;
  • Tailscale ACL不允许访问该网段;
  • 外部网络和家庭网络使用了相同网段。

9.2 tailscale0有流量,br-lan没有流量

说明请求已经到达iStoreOS,但是没有转发到家庭局域网。

重点检查:

9.3 br-lan有请求,但是没有响应

说明请求已经发送给主路由,但是主路由没有返回。

可能是:

  • 主路由管理页面端口不是80443
  • 主路由禁用了Ping
  • 主路由限制了管理页面来源;
  • 主路由自身防火墙阻止了访问。

9.4 请求和响应都有,但客户端打不开

继续检查:

  • 客户端路由;
  • Tailscale ACL
  • 外部网络与家庭网段冲突;
  • MTU问题;
  • 浏览器是否自动跳转到了其他域名或端口。

10. 注意外部网络的网段冲突

我的家庭网络是:

假如外面的酒店、公司或者其他Wi-Fi也使用:

客户端可能会认为192.168.110.1就在当前本地网络中,而不会把流量交给Tailscale

所以排障时最好先使用手机移动数据测试。

如果手机流量可以访问,某个Wi-Fi下不能访问,通常就是路由优先级或者网段重叠问题。Tailscale官方也将重叠子网和本地网络路由选择列为局域网访问失败的常见排查方向。(Tailscale)

11. 主路由不需要添加静态路由

默认情况下,Tailscale会对经过子网路由器的流量执行SNAT

因此主路由看到的请求来源通常不是远程设备的100.x.x.x地址,而是:

也就是iStoreOS自己的局域网地址。

返回流量会直接发送给iStoreOS,然后再由Tailscale返回远程设备,所以主路由一般不需要添加静态路由。Tailscale默认会对经过子网路由器的流量执行源地址转换,这样可以简化返回路由配置。(Tailscale)

不要随便执行:

关闭SNAT后,局域网设备可以看到远程客户端的真实来源地址,但是主路由和其他设备必须知道如何把100.64.0.0/10的返回流量发送给iStoreOS

对于普通家庭远程访问场景,保持默认设置最简单。

12. 最终配置

我的最终网络结构是:

核心命令其实只有:

确认返回:

然后广播家庭网段:

进入Tailscale管理后台批准:

最后检查:

看到:

配置完成后,通过Tailscale连接家里的iStoreOS,就可以继续访问:

13. 总结

之前只安装Tailscale时,每台安装了客户端的设备只能通过各自的100.x.x.x地址互相访问。

主路由、NAS和其他没有安装Tailscale的设备,仍然无法直接访问。

iStoreOS配置成子网路由器之后,它相当于在Tailscale网络和家庭局域网之间搭了一座桥:

整个过程不需要在主路由上安装Tailscale,也不需要修改主路由默认网关。

只需要:

就可以在外面直接使用原来的局域网IP访问家中设备了。

对于已经长期运行的iStoreOS旁路由来说,让它顺便承担Tailscale Subnet Router还是非常方便的,记录一下,给遇到同样问题的朋友做个参考~

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《通过Tailscale远程访问主路由和家庭局域网:iStoreOS配置子网路由完整记录》
文章链接:https://www.machunjie.com/linux/2221.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

:smile: :sad: :arrow: :cool: :confused: :cry: :eek: :evil: :exclaim: :idea: :lol: :mad: :mrgreen: :neutral: :question: :razz: :redface: :rolleyes: :surprised: :wink: :biggrin: :twisted: