Tailscale 组网三个月后,我把内网穿透和端口映射全下线了

举报
yd_245773411 发表于 2026/11/01 08:05:50 2026/11/01
【摘要】 家里一台小主机、公司一台服务器、一台常开的备用节点,跨网络访问一直靠内网穿透+端口映射。换到 Tailscale 之后三个月,把六条实际结论和踩过的坑整理出来,包括子网路由、ACL、DNS 与自建 DERP。

过去两年,家里那台小主机要访问,走的是内网穿透 + 端口映射:外面一个域名,中间一个 frp 或者 nginx 反代,再加一层 Basic 认证。能用,但每次换网络环境就要修一遍配置,暴露的端口也越来越多。三个月前换成基于 WireGuard 的 mesh 组网(Tailscale),现在穿透和端口映射全部下线了。下面六条是这三个月真正值钱的结论。

一、先想清楚要解决的是"谁能访问谁",不是"怎么打通"

穿透工具的思路是把内网服务推到公网,所以每多一个服务,就多一个对外暴露面。mesh 组网的思路反过来:设备之间直接建立加密隧道,公网一个端口都不开。这个方向不同,决定了后面所有运维成本的差别。

实际收益很直接:新加一台设备不用改路由器、不用申请证书、不用等 DNS 生效,装完客户端登录同一个账号就能互相通。

二、NAT 打不通是常态,但不需要自己处理

家用宽带大多是 CGNAT,尤其是移动网络,公网 IPv4 基本拿不到,只有 IPv6。这种情况下直连失败,流量会自动回落到中继(DERP)。中继会多一跳,延迟从 20ms 变成 60~80ms,但功能完全不受影响,SSH、网页后台、文件同步都够用。

判断是否直连,一条命令就够:

tailscale status          # 名字后面没有 relay 字样就是直连
tailscale ping 100.x.y.z  # 显示 "via DERP(host)" 说明在走中继

如果长期走中继且延迟不能接受,可以自己部署一个 DERP 节点放到 VPS 上,中继质量立刻好转,成本只要一台最小规格的机器。

三、子网路由比"每台机器都装客户端"更省事

家里除了小主机,还有路由器、NAS、打印机、摄像头,这些设备装不了客户端。这时候用子网路由:在一台 Linux 主机上开启 IP 转发,然后宣告整个网段。

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

sudo tailscale up --advertise-routes=192.168.1.0/24 --accept-dns=false
# 之后到管理后台 Machines 里批准这条路由,否则不生效

注意两点:宣告了不等于生效,必须在后台批准;另外客户端要接受子网路由,否则本机路由表里看不到这个网段。

四、ACL 默认是"全通",一定要自己收紧

默认策略允许所有设备互相访问所有端口。设备一多,这个默认值就成了隐患:一台被入侵的笔记本可以直接扫到家里所有机器的 22 端口。

最小可用策略长这样,按 tag 分组,只放必要的端口:

{
  "tagOwners": { "tag:server": ["autogroup:admin"], "tag:client": ["autogroup:admin"] },
  "acls": [
    { "action": "accept", "src": ["tag:client"], "dst": ["tag:server:22,443,8080"] },
    { "action": "accept", "src": ["tag:server"], "dst": ["tag:server:*"] }
  ]
}

改完在后台点一次测试,会直接告诉你哪条规则命中了,比 ssh 试错快得多。

五、DNS 名字比 IP 好用,但别和本地 DNS 打架

组网自带一个内部域名解析,设备名变成 主机名. tailnet名.ts.net,再也不用记 100.x 的地址。但如果主机本身跑着 dnsmasq 或者 ADGuard,就容易和系统解析冲突,表现是内网域名时通时不通。

稳妥做法是给这类主机加 --accept-dns=false,让它只做转发端,不做解析客户端;客户端那边再单独指定上游,问题就消失了。

六、真正省下来的是"变更成本",不是延迟

三个月下来最直观的变化不是速度快了多少,而是加设备、换网络、改端口这些事不再需要计划。以前加一台机器要开路由器、改反代、加证书、通知使用方,现在装完客户端就算接完。设备清单在后台一目了然,哪台多久没上线、走的直连还是中继,都能直接看到。

还有一条容易被忽略的:密钥轮换和吊销。设备丢了,后台点一下移除,隧道立刻失效,不用去翻路由器配置里那条 port forward 到底还开着没。

总结一句:如果需求是"给公网提供一个服务",反代和穿透仍然是标准做法;但如果需求是"让自己的几台设备互相访问",mesh 组网在安全边界和变更成本上都明显更划算。三个月里唯一还留在公网上的,只剩下一个必须对外提供的 443。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。