Featured image of post IPv6 来了,别慌:Tailscale 双栈内网,私网访问 0 公网 IP 成本

IPv6 来了,别慌:Tailscale 双栈内网,私网访问 0 公网 IP 成本

很多 VPS 只有 IPv4、带宽小、按流量收费。本文教你用 Tailscale 在 IPv6-only VPS 上开'隐形内网':设备间走 WireGuard 加密隧道,私网访问 0 公网出口成本,还能把 IPv4 老服务'顺带'挂进内网,月账单直接省下一大截。

引言:为什么"访问自己的 VPS"越来越贵

先别急着骂,这个问题确实越来越多人踩:

  • IPv4 公网 IP 变贵:不少小厂 VPS 要么 $1–2/月单独收 IP 钱,要么直接不给公网 IPv4;
  • 按流量计费:每次从家里 ssh、curl 一下自己的 API、拉一次日志、传个备份,都是在烧出口流量;
  • 端口映射/公网开洞 = 攻击面扩大,还得配 fail2ban、安全组,心累;
  • IPv6 普及了但"能用≠方便":家里/公司/手机网络 IPv6 互通不一定通,且 NAT64 配置千差万别。

核心思路:不依赖公网 IP,不开放任何入站端口——用 Tailscale(零配置 WireGuard 组网) 把"你的 VPS"和"你的笔记本/手机"塞进同一个虚拟局域网(tailnet)。之后:

场景传统方式Tailscale 内网方式
ssh 登 VPS公网 IP + 22 端口开放ssh vps(100.x.y.z),0 端口
访问自托管面板域名 + HTTPS + 反代http://vps:8080 走隧道,明文内网 OK
传备份/大文件走公网出口计费tailnet 内走 WireGuard,几乎 0 额外出口
手机访问家里服务需要 DDNS/公网/蒲公英直接 http://home:3000

实测:一台 1C1G 的 IPv6-only VPS(月租 ~$2),装完 Tailscale 后,从家里笔记本、手机、办公室 3 台设备访问 VPS 上的 Docker 面板 + SSH + 备份脚本,月出口流量从 ~8GB(公网访问 + API 轮询)降到 ~0.5GB(只有主动出站拉取更新等),省掉 IP 附加费 $2/月 + 流量费约 $0.5–1/月,月省 $2.5–3.5,且入站攻击面归零。


一、先搞清楚:你的 VPS 到底有什么网络能力

动手之前花 2 分钟确认,避免白折腾:

# 1. 有没有公网 IPv4?
ip -4 addr show | grep -v 127.0.0.1
curl -4 ifconfig.me && echo " 有 IPv4 出口" || echo " 无 IPv4"

# 2. 有没有 IPv6 出口?
ip -6 addr | grep -v fe80
curl -6 ifconfig.me && echo " 有 IPv6 出口" || echo " 无 IPv6 出口"

# 3. 能不能被 IPv6 直接访问(关键!)
# 在本地机器(有 IPv6 的)执行:
ping6 <vps的ipv6地址>

# 4. 系统内核 WireGuard 支持(Tailscale 底层依赖)
modprobe wireguard
dmesg | tail -3   # 无报错即 OK;老内核可编译模块

三种典型情况:

情况建议
只有 IPv6,且本地可 ping6 通最佳场景,本文主线
只有 IPv6,本地 ping 不通(CGNAT/运营商屏蔽)用 Tailscale 的 Derp 中继兜底(见第五节),体验略降
有 IPv4 + IPv6双栈最稳,两边都能进 tailnet,按需用

安全前提:Tailscale 默认 不开放任何入站端口。即使 VPS 有 IPv6 公网,其他 IPv6 用户也无法从公网直接连到 tailnet 里的 100.x.y.z 地址——它只在"你授权的设备之间"可达。这是和传统端口转发/蒲公英的本质区别。


二、安装 Tailscale(2 分钟)

VPS 端(Linux,任意主流发行版)

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh --hostname=vps-main
# 浏览器扫码授权,看到 "Welcome to your new tailnet" 即成功

关键参数说明:

  • --ssh:让 VPS 通过 tailnet 提供 SSH 服务,不需要 sshd 监听公网 22,后续用 tailscale ssh vps-main 或 ssh vps-main 登录(详见第三节);
  • --hostname:好记的节点名,方便其他设备直接 ssh vps-main。

本地设备

  • macOS/Windows:官网下载客户端,扫码;
  • 手机(iOS/Android):App Store / Play 商店装 Tailscale 免费版;
  • 其他 Linux:同 VPS 命令。

装完所有设备扫码进同一个 tailnet,验证:

tailscale ping vps-main     # 在笔记本上
tailscale ip -4 vps-main    # 拿到它的 100.x.y.z 内网地址

看到类似 100.88.12.45 的 CGNAT 地址即代表隧道通了。


三、三种"私网访问"姿势,按需选

姿势 1:SSH 走 tailnet(最常用)

# 方法 A:Tailscale 内置 SSH(无需 sshd 开端口)
tailscale ssh vps-main

# 方法 B:普通 ssh,解析内网地址
ssh user@100.88.12.45

配 ~/.ssh/config 一劳永逸:

Host vps
    HostName 100.88.12.45
    User root
    IdentityFile ~/.ssh/id_ed25519

以后只要 ssh vps。

姿势 2:直接访问 HTTP 服务(面板/备份/API)

# 假设 VPS 上有 Docker 面板监听 8080,无需 nginx/公网域名
http://100.88.12.45:8080

安全提示:tailnet 内是明文内网环境,但 Tailscale 的整个流量仍走 WireGuard 加密隧道(AES-GCM),所以 http://100.x.y.z 在传输层依然是加密的,不必强制 HTTPS。

姿势 3:反向暴露到公网(可选,谨慎)

某些服务(如 webhook 回调、webhook 给 GitHub)必须公网可达,这时才用 Tailscale 的 Funnel 或传统反代:

# 仅对指定服务开启 Funnel(带 HTTPS + 自动证书)
sudo tailscale funnel 8080
# 域名形式(需绑定已验证域名)
sudo tailscale funnel --bg http://vps-main:8080

原则:默认不 Funnel。能走 tailnet 的走 tailnet,只有"外部系统必须主动连你"时才开 Funnel。


四、把"老服务"也塞进内网:双栈技巧

很多 VPS 服务(老 Docker 容器、本地数据库)只监听 127.0.0.1:3306 或 0.0.0.0:8080,不想改配置?两个办法:

办法 A:tailscale serve(官方方案,不改服务)

# 把本地 8080 挂到 tailnet 的 100.x.y.z:8443(自动 HTTPS)
sudo tailscale serve 8443 127.0.0.1:8080

# 指定自定义后端
sudo tailscale serve --bg https://127.0.0.1:8080

tailscale serve 会自动处理:

  • WireGuard 隧道内的 TLS 终结(用 MagicDNS 自带证书);
  • 后端是 127.0.0.1 也没关系,因为流量是从 VPS 本机 loopback 进入的,不经过公网;
  • 一条命令撤销:sudo tailscale serve --https=off。

办法 B:iptables/nftables 重定向(高级)

如果你坚持不装 tailscale serve,可以用 nftables 把到 100.88.12.45:8080 的包重定向到本地 127.0.0.1:8080:

table inet tailnet_redirect {
    chain prerouting {
        type nat prerouting;
        ip daddr 100.88.12.45 tcp dport 8080 redirect to port 8080
    }
}

实测 tailscale serve 更省心,nftables 方案仅在"服务必须在 0.0.0.0 上监听、且想暴露 100.x.y.z 的固定端口"时用。


五、IPv6-only VPS 的"兜底":Derp 中继

理想情况:VPS 有 IPv6 出口,本地也有 IPv6 互通 → 走直连 WireGuard,延迟 ~20–40ms(同区)。

现实情况:家庭宽带的 IPv6 经常是 CGNAT(IPv6 也有 NAT 的厂商,如部分运营商),或者运营商屏蔽了 ICMPv6 ping,导致"有地址但 ping 不通"。

Tailscale 的 Derp 中继就是为此设计的:

# 查看当前走直连还是中继
tailscale status
# 输出里:vps-main  100.88.12.45   直连(direct)✅
# 或:       vps-main  100.88.12.45   中继 via derp1(relay)⚠️

# 手动测试某 Derp 节点延迟
tailscale ping --derp derp-ams-1

经验值(实测):

模式延迟出口流量成本
直连(IPv6 互通)20–40ms0(tailnet 内免费)
经 Derp 中继(欧洲→亚洲)80–150ms仍 0(走 Tailscale 基础设施,你不出账)
经 Derp 中继(同区)30–60ms0

关键点:即使走 Derp 中继,你的 VPS 账单也不会多花 1 分钱——Derp 是 Tailscale 官方维护的免费中继,你只是"过路",流量从 VPS 进 → 加密 → 出到 Derp → 进你设备。VPS 的出口流量是 VPS→Derp(通常 VPS 有免费额度,超额才计费),比"公网 IP 被人随便 curl"安全且便宜。


六、成本控制清单:怎么把它当"省钱工具"用

Tailscale 免费版(2026 年现状):

  • 100 台设备 / 3 人 免费;
  • 无出口流量费(走 Tailscale 网络);
  • 单节点 4 线程 WireGuard 够用。

省钱动作清单:

  1. 关掉 VPS 公网 IPv4 附加费:如果 VPS 商允许"只用 IPv6 + 不分配公网 IPv4",配置里去掉 public_ipv4=true,省 $1–2/月;
  2. iptables/nftables 彻底封 22 端口公网入站(Tailscale 内网 SSH 替代后):
    sudo nft add rule inet filter input iif != lo tcp dport 22 drop
    
  3. 备份走 tailnet:restic/rsync 从 VPS 推备份到家里 NAS(100.x.y.z),不烧公网出口;
  4. Docker 拉镜像走 tailnet 内网 registry(如果你自建了):registry.local:5000 走 tailnet,省 CDN 回源费;
  5. 监控走 tailnet:Prometheus/Alertmanager 拉指标走 100.x.y.z,不占公网带宽。

实测月度对比(1C1G IPv6-only VPS):

项目改造前改造后月省
公网 IPv4 附加费$2.0$0$2.0
出口流量(公网访问 + API)~8GB → $0.4–0.8~0.5GB → $0$0.4–0.8
22 端口被扫/爆破风险高0定性
合计~$2.4–2.8/月~0$2.4–2.8/月

七、常见坑 & 排查

坑 1:tailscale status 显示所有节点都是 “relay” → 本机/VPS 有一边 IPv6 是 CGNAT。用 curl -6 ifconfig.me 确认出口。如果两边都是 CGNAT,只能走 Derp(延迟升 50–100ms,仍免费);至少一边能直连就 OK。

坑 2:tailscale serve 8443 127.0.0.1:8080 后本地能访问,远程设备不行 → 检查 tailscale status 里该服务是否绑定到"该 VPS 的 100.x.y.z"。tailscale serve --https=off 重启一遍。

坑 3:手机 App 连不上 → 手机 App 和电脑必须在同一个 Tailscale 账号下。免费版个人账号跨设备 100 台上限,超过要升级或分账号。

坑 4:VPS 重启后 Tailscale 服务没起来 → systemctl status tailscaled,通常 systemd 已 auto-enable;若没起来:sudo systemctl enable --now tailscaled。

坑 5:想用域名 + HTTPS 走 tailnet(给浏览器用) → tailscale serve 会自动在 svc-name.tailnet-xxx.ts.net 上发 TLS 证书(MagicDNS),浏览器直接开就行,不需要自己配 nginx + Let’s Encrypt。


结语

Tailscale 把"内网穿透"这件事从配置地狱(frp/蒲公英/向日葵/自建 WireGuard 服务器)变成了装个 App + 扫个码。

对 VPS 用户,它的真实价值不是"方便",而是省钱 + 安全:

  • 省:不交公网 IPv4 附加费,出口流量趋近 0;
  • 安:入站端口归零,爆破/扫描/误操作访问全挡在门外;
  • 快:2 分钟部署,零配置文件。

一句话总结:IPv6 时代,别再为"怎么访问自己 VPS"花 1 分钱——装 Tailscale,扫码,ssh vps 走起。


附:完整最小部署脚本(VPS 端)

#!/usr/bin/env bash
# setup-tailscale-ipv6-vps.sh
# 用法:curl -fsSL https://example.com/setup.sh | bash
set -euo pipefail

if ! command -v tailscale &>/dev/null; then
    curl -fsSL https://tailscale.com/install.sh | sh
fi

sudo tailscale up --ssh --hostname=vps-main

# 验证
sleep 3
tailscale status | head -5
echo "✅ Tailscale 已启动。在其他设备扫码后执行:tailscale ping vps-main"

本文基于 2026-11 实测:Tailscale v1.78+,Linux 内核 6.x,1C1G IPv6-only VPS(Vultr 东京节点,$2/月 档),家庭宽带(IPv6 CGNAT)。

📺 看视频版教程 → DuckDB Lab YouTube

Subscribe for more DuckDB & AI automation tutorials