让tailscale可以访问内网ip地址
目录
背景#
我的不同设备通过tailscale组网,可以方便地访问彼此。但是默认情况下,tailscale只能访问tailscale网络内的ip地址。
某些场景下我们需要能访问内网ip。比如,在我的laptop上使用terraform来管理proxmox创建虚拟机的时候,需要访问虚拟机的宿主机的内网ip地址。
graph TD
subgraph Remote Laptop [远程笔记本电脑]
User[你]
User -->|远程访问| Tailscale_Remote[Tailscale 客户端<br/>e.g., 100.x.x.x]
end
subgraph Your Laptop [你的笔记本电脑物理环境]
subgraph Proxmox Host [Proxmox VE 主机]
subgraph VM Guest [虚拟机 Guest]
VM[VM<br/>10.10.10.100]
end
NIC_WLAN["无线网卡 (WLAN)<br/>ensXX / wlpXsY<br/>IP: 192.168.50.3"]
BRIDGE["Linux Bridge (vmbr0)<br/>IP: 10.10.10.1"]
TAILSCALE["Tailscale 虚拟接口<br/>tailscale0<br/>IP: 100.x.x.x"]
VM -->|连接到| BRIDGE;
TAILSCALE -.->|Overlay Network| NIC_WLAN;
end
BRIDGE -.->|NAT / 路由 / IP 伪装| NIC_WLAN;
end
NIC_WLAN -->|无线连接| HomeRouter["家庭路由器 / 网关<br/>192.168.50.1"];
HomeRouter --> Internet[互联网 Internet];
Tailscale_Remote -->|加密的 WireGuard 隧道| Internet -->|加密的 WireGuard 隧道| TAILSCALE;
Tailscale_Remote -.->|通过 Tailscale 网络访问| VM;
TAILSCALE -.->|路由到| BRIDGE;
配置步骤#
在内网的tailscale客户端上启用路由功能,允许访问特定的内网ip地址。
tailscale up --advertise-routes=192.168.50.0/24
需要linux服务器上启用IP转发:
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
然后,在tailscale管理控制台上,approve这个路由设置。

这样,远程的tailscale客户端就可以访问内网的ip地址了。

总结#
虽然延迟看过去有点高,但是我只是需要远程执行script,并不会有太大影响。
可以通过增加route设置来访问内网ip地址,那虚拟机的另外的网段的ip地址呢?通过合适的配置,应该也可以在本地使用ssh访问虚拟机的ip地址,从而执行ansible等自动化脚本了吧。后续可以继续尝试。
注意#
如果需要访问多个内网网段,可以在tailscale up命令中添加多个--advertise-routes参数,或者使用逗号分隔的方式指定多个网段。例如:
tailscale up --advertise-routes=192.168.50.0/24,10.10.10.0/24
如果仅仅是添加单个路由,那么会覆盖之前的路由设置。
比如,之前添加了--advertise-routes=192.168.50.0/24,如果这次只添加--advertise-routes=10.10.10.0/24,那么之前的192.168.50.0/24路由就会被覆盖。
Read other posts