Tailscale 远程访问本地以及其他内部网段

按照tailscale的exit-node配置完,可以通过接入服务器访问公网和访问本地服务器所在的网段(假设是192.168.1.0/24),但是如果想通过这个服务器访问其他内网不在这个网段的比如10.0.0.0/8就不能访问,通过查找资料发现是服务器默认关闭对这些内网的访问,并不是官方宣传的转发任何流量(0.0.0.0/0)过去exit-node服务器,需要自己在接入服务器上添加如下命令打开对其他内网网段的转发。

#tailscale set --advertise-routes=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

在接入服务器上添加如上命令后,不需要在管理页面去进行任何操作,也不需要广播即可使用这些被屏蔽的网段。

I've found that using –advertise-routes=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 on the exit node disables the RFC1918 filter.
This works without actually enabling the subnet routes (in my case, on a headscale control server), as the RFC1918 traffic is already sent to the exit node – it was just being filtered by the exit node.

另外要给服务器增加给接入机器做NAT访问的设置,比如debian 12服务器如下:

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

也要给iptables配置NAT转换

iptables -A POSTROUTING -o tailscale0 -j MASQUERADE
iptables -A INPUT -i tailscale0 -j ACCEPT
iptables -A INPUT -i tailscale0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT

远程机器要指向使用这个服务器作为接入点并开放访问服务器本地内网端的权限:

tailscale set --exit-node=100.64.100.100 --exit-node-allow-lan-access=true

资料参考如下:https://github.com/tailscale/tailscale/issues/5412