写在开头
这是一个记录文章,也许可以在你遇到Tailscale机器无法互联的时候帮到你
可能看上去有点是AI写的,但是真的是本人写的
主机系统:macOS 26.1
Tailscale版本:1.90.1
服务器系统:Ubuntu 24.04
Tailscale版本:1.90.1
问题描述
近期,有一个朋友想通过Tailscale进行异地组网,也就是在远程通过一个节点访问与节点同内网的其他设备
在登录完成后,正常配置--advertise-routes,并在管理后台开启路由后,发现远程节点无法访问同内网的其他设备
排查过程
- 检查本地 Tailscale 应用是否勾选
Use Tailscale subnets选项,确保子网路由功能已启用 - 检查路由表,由于使用的是macOS,使用
netstat -rn命令查看路由表,确认存在通往目标子网的路由条目 - 检查防火墙设置,发现
ufw已经禁用 - 通过
tailscale netcheck与tailscale status命令检查网络连接状态,确认 Tailscale 节点之间的连接正常 - 使用
tailscale ping发现提示<Tailscale IP> timeout,说明无法通过 Tailscale IP 进行通信
解决思路
通过检查 Tailscale 的文档,发现了另外一个命令
1 | tailscale ping -tsmp <Tailscale IP> |
文档中解释道:
tailscale ping --tsmp 100.x.x.xsends a packet that goes one level further than tailscale ping, also going through the WireGuard level, but doesn’t involve the host’s networking stack.
发现可以正常通信于是意识到可能是反向路径检查没有通过,于是通过命令检测rp_filter的值
1 | cat /proc/sys/net/ipv4/conf/all/rp_filter |
发现均返回2,说明开启了严格的反向路径过滤,于是通过以下命令关闭
1 | sudo sysctl -w net.ipv4.conf.tailscale0.rp_filter=0 |
再次使用tailscale ping <Tailscale IP>,发现可以正常通信
将配置写入/etc/sysctl.conf持久化
1 | net.ipv4.conf.all.rp_filter = 0 |
执行sudo sysctl -p使配置生效
总结
通过关闭反向路径过滤,解决了Tailscale机器无法互联的问题
希望这篇文章能帮助到遇到类似问题的朋友们