在使用Tailscale搭建VPN时,Ubuntu系统安装并配置了Tailscale,IP地址为100.127.129.000。其他设备能够正常ping通该IP,并且本机可以ping通其他设备,但在本机上使用ping100.127.129.000时却无法成功。这让人感到困惑,因为Tailscale网络本身没有任何明显问题。通过对防火墙规则的检查,我们发现是iptables规则中的DROP规则阻止了本机访问自身的Tailscale IP。
问题分析
根据以下的iptables
规则:
Chain ts-input (1 references)
target prot opt source destination
RETURN all -- 100.115.92.0/23 anywhere
DROP all -- 100.64.0.0/10 anywhere
ACCEPT all -- anywhere anywhere
100.127.129.000
属于100.64.0.0/10
这个IP地址范围,因此,DROP
规则将所有目标IP在100.64.0.0/10
范围内的流量进行丢弃。这使得本机无法ping通自己的Tailscale IP。
解决方案
为了修复这个问题,我们需要在iptables
的ts-input
链中添加一条规则,允许本机访问自身的Tailscale IP(100.127.129.000
)。具体步骤如下:
步骤 1:添加iptables
规则以允许本机访问自身的Tailscale IP
在终端中输入以下命令:
sudo iptables -I ts-input -d 100.127.129.101 -j ACCEPT
这条命令将在ts-input
链的顶部插入一条规则,允许所有目的地为100.127.129.000
的流量通过,从而解决无法ping通自身Tailscale IP的问题。
步骤 2:确保输出流量被允许
为了确保本机发送到自身Tailscale IP的流量也能正常通过,您还可以添加以下规则:
sudo iptables -I OUTPUT -o tailscale0 -s 100.127.129.101 -j ACCEPT
步骤 3:测试Ping操作
添加规则后,尝试在终端中ping自己的Tailscale IP:
ping 100.127.129.000
如果规则添加成功,您应该能够成功ping通100.127.129.101
。
步骤 4:保存iptables
规则
为了避免系统重启后丢失这些规则,我们需要将它们保存。可以使用iptables-persistent
工具来保存规则:
-
安装
iptables-persistent
:sudo apt-get update sudo apt-get install iptables-persistent
在安装过程中,会提示您是否保存当前的
iptables
规则,选择“是”。 -
如果您以后修改了
iptables
规则,可以通过以下命令手动保存:sudo netfilter-persistent save
步骤 5:验证规则已正确添加
执行以下命令,查看当前的iptables
规则,确认新规则已被正确添加:
sudo iptables -L ts-input -v --line-numbers
您应该能看到刚刚添加的规则,确保流量目标为100.127.129.101
的流量被允许通过。
总结
通过上述步骤,您已经成功解决了Ubuntu上Tailscale无法ping通自身IP的问题。该问题的根本原因在于iptables
防火墙中的规则阻止了本机访问自己的Tailscale IP。通过在ts-input
链中添加一条例外规则,允许访问本机Tailscale IP,问题得以解决。
如果您遇到类似问题,可以参考以上解决方案。同时,建议定期检查iptables
规则,确保没有误配置或冲突影响网络连接。
其他注意事项
-
检查Tailscale接口状态:确保Tailscale接口(如
tailscale0
)正确配置并启用。ip addr show tailscale0
-
重启Tailscale服务:如果规则添加后问题依然存在,可以尝试重启Tailscale服务。
sudo systemctl restart tailscale
-
更新Tailscale:确保Tailscale版本是最新的,以避免已知的bug。
sudo apt-get update sudo apt-get install --only-upgrade tailscale
通过这个博客的记录,希望能帮助更多在使用Tailscale的用户解决类似的网络配置问题。如果您有任何疑问或其他问题,欢迎在评论区留言。