Tailscale机器无法互联解决方案

写在开头

这是一个记录文章,也许可以在你遇到Tailscale机器无法互联的时候帮到你

可能看上去有点是AI写的,但是真的是本人写的

主机系统:macOS 26.1
Tailscale版本:1.90.1

服务器系统:Ubuntu 24.04
Tailscale版本:1.90.1

问题描述

近期,有一个朋友想通过Tailscale进行异地组网,也就是在远程通过一个节点访问与节点同内网的其他设备

在登录完成后,正常配置--advertise-routes,并在管理后台开启路由后,发现远程节点无法访问同内网的其他设备

排查过程

  1. 检查本地 Tailscale 应用是否勾选 Use Tailscale subnets 选项,确保子网路由功能已启用
  2. 检查路由表,由于使用的是macOS,使用netstat -rn命令查看路由表,确认存在通往目标子网的路由条目
  3. 检查防火墙设置,发现 ufw 已经禁用
  4. 通过 tailscale netchecktailscale status 命令检查网络连接状态,确认 Tailscale 节点之间的连接正常
  5. 使用 tailscale ping 发现提示 <Tailscale IP> timeout,说明无法通过 Tailscale IP 进行通信

解决思路

通过检查 Tailscale 的文档,发现了另外一个命令

1
tailscale ping -tsmp <Tailscale IP>

文档中解释道:

tailscale ping --tsmp 100.x.x.x sends 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
2
3
cat /proc/sys/net/ipv4/conf/all/rp_filter
cat /proc/sys/net/ipv4/conf/tailscale0/rp_filter
cat /proc/sys/net/ipv4/conf/default/rp_filter

发现均返回2,说明开启了严格的反向路径过滤,于是通过以下命令关闭

1
sudo sysctl -w net.ipv4.conf.tailscale0.rp_filter=0

再次使用tailscale ping <Tailscale IP>,发现可以正常通信

将配置写入/etc/sysctl.conf持久化

1
2
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0

执行sudo sysctl -p使配置生效

总结

通过关闭反向路径过滤,解决了Tailscale机器无法互联的问题

希望这篇文章能帮助到遇到类似问题的朋友们