Tailscale 子网路由与出口节点¶
一、这页讲什么¶
Tailscale 默认只连装了客户端的设备。实验室里还有一批连不了客户端的设备:打印机、交换机管理口、树莓派老系统、云上的其他主机。子网路由把整个网段接进 tailnet,让这些设备也能被访问。
出口节点解决另一个问题:让某台设备的全部出网流量从指定节点走。
读完能做到:把一台机器配成子网路由并让其他设备用上;把一台机器配成出口节点并验证出口已切换。
二、开始之前¶
| 项 | 内容 |
|---|---|
| 版本与日期 | Tailscale 1.9x;2026-10-21 核实 |
| 预计耗时 | 25 分钟 |
| 前置 | 路由设备已加入 tailnet,有管理员权限批准路由;见组网与直连 |
| 风险级别 | 中:路由配置错误会导致内网访问中断 |
三、动手做¶
1. 在路由设备上宣告网段¶
路由设备必须同时能访问目标网段与本机网络,通常是那台兼作网关的机器。
看到这个就算成:tailscale status 里该设备显示已宣告的路由。
2. 在控制台批准路由¶
宣告只是提议,必须由管理员在控制台确认:Machines → 设备 → Route settings → 勾选网段 → Approve。
看到这个就算成:路由状态从 advertised 变为 approved。
3. 在客户端接受路由¶
客户端默认不接受子网路由,必须显式打开。
看到这个就算成:本机路由表里出现指向该网段的 tailscale 条目,ping 网段内的设备能通。
4. 决定是否关闭 SNAT¶
默认情况下,子网路由会把来源地址改成自己的地址(SNAT),这样网段里的老设备不用知道 tailnet 的存在。关闭后需要目标设备能回程路由到 tailnet 网段:
这条只在 Linux 路由节点上有效。目标设备需要静态路由指向 tailnet 才行。
看到这个就算成:关闭 SNAT 后,网段内的目标设备仍能回包;不通就说明缺回程路由。
5. 配置出口节点¶
路由设备宣告出口能力:
控制台同样要批准:Machines → Route settings → Exit node → Approve。
客户端使用出口节点:
出口节点的地址就是这里显示的地址。要让局域网直连流量不受影响,加 --exit-node-allow-lan-access。
看到这个就算成:curl 返回的 IP 属于出口节点所在网络,tailscale status 顶部显示正在使用出口节点。
6. 收尾:按需关闭¶
$ sudo tailscale set --exit-node=
(成功时没有输出)
$ sudo tailscale set --advertise-exit-node=false
(成功时没有输出)
出口节点会让全部流量绕行,临时用完就关,避免无意中一直走别处的网络。
看到这个就算成:tailscale status 不再显示出口节点,curl ifconfig.me 恢复本机公网出口。
四、做完怎么确认¶
- 子网内的设备能用 tailnet 地址访问。
- 客户端路由表里有对应条目。
- 出口节点切换后公网 IP 变成节点所在网络的 IP。
- 知道关闭 SNAT 后需要目标设备配合。
五、卡住了怎么排查¶
| 症状 | 多半是 | 先验证 | 处理 |
|---|---|---|---|
| 网段 ping 不通 | 路由未批准,或客户端未 accept | 控制台路由状态、$ ip route |
批准路由;--accept-routes |
| 只有路由节点自己能访问 | 客户端没接受路由 | 客户端 $ ip route |
打开 accept-routes |
| 关闭 SNAT 后全断 | 目标设备没有回程路由 | 目标设备 $ ip route |
补静态路由,或恢复 SNAT |
| 出口节点延迟高 | 流量绕远,或走中继 | $ tailscale ping <出口节点>、netcheck |
换更近的节点;先修直连 |
| 用了出口节点但 DNS 异常 | DNS 仍指向本地解析器 | $ cat /etc/resolv.conf |
保持 accept-dns,或单独指定 DNS |
| 网段里某些设备不通 | 目标设备自带防火墙 | 从路由节点直接 $ ping |
目标侧放行;必要时换端口验证 |
| 出口节点批准后总断 | 节点本身没转发能力 | 节点 $ sysctl net.ipv4.ip_forward |
打开转发;检查节点 ACL |
六、为什么这样能成¶
子网路由是一台愿意代转的机器。 tailnet 里的请求先到路由节点,再按网段转发到目标设备,目标设备不需要装任何客户端。
SNAT 让老设备不用改配置。 默认把来源改成路由节点地址,回包自然回到路由节点。关掉 SNAT 才能看到真实来源,代价是目标设备要认识 tailnet 网段。
出口节点是默认路由的替代。 客户端把默认路由指向出口节点,所有出网流量经隧道到节点再发出,外部看到的是节点所在网络的地址。
七、边界与替代¶
- 不替代正式 VPN 网关:需要多租户、审计与复杂分流时,专用网关更合适。
- 别把出口节点当长期代理:全流量绕行会放大延迟与带宽成本,按需开关。
- 子网路由不解决 DNS:网段内的域名解析要单独配 DNS 服务器或在控制台设置全局 DNS。
- 同一网段别有两个宣告者:冲突时流量走哪台不可控。
八、官方资料¶
- 子网路由:https://tailscale.com/kb/1019/subnets
- 出口节点:https://tailscale.com/kb/1103/exit-nodes
- 全局 DNS:https://tailscale.com/kb/1081/magicdns
- 命令参考(set):https://tailscale.com/kb/1080/cli
核实日期:2026-10-21。