WireGuard 实现 IPv4 / IPv6 双向分流(IPv6-only × Dual-Stack 实战)
背景
随着 IPv4 资源逐渐枯竭,越来越多的 VPS / 云服务器开始提供 IPv6-only 网络环境。这类服务器通常具备:
- IPv6 公网地址
- 无公网 IPv4
- 通过 NAT64 或代理访问 IPv4 世界(质量不稳定)
而现实中经常会遇到另一类服务器:
- 同时具备 IPv4 + IPv6(Dual Stack)
- IPv4 网络质量稳定
- IPv6 出口位置一般
这就引出了一个非常实际的需求:
能否让 IPv6-only 服务器使用另一台双栈服务器的 IPv4 出口,同时反过来让双栈服务器使用 IPv6-only 服务器的 IPv6 出口?
答案是:可以,而且 WireGuard 是最干净、最可控的方案。
目标
- A(IPv6-only):IPv4 → 走 B
- B(Dual Stack):IPv6 → 走 A
- 双方公网访问不受影响
- 重启自动恢复
一句话总结:
A 借 B 的 IPv4,B 借 A 的 IPv6
网络拓扑
IPv4 Internet IPv6 Internet
▲ ▲
│ │
┌────┴────┐ ┌────┴────┐
│ Server B │◄── IPv6 ── WG ──► │ Server A │
│ Dual │ │ IPv6-only│
│ Stack │── IPv4 ── WG ────►│ │
└─────────┘ └──────────┘
使用方式
第一步:生成密钥(两台服务器)
sudo bash wg_dualstack_split.sh --role auto
第二步:部署
在 A 上
sudo bash wg_dualstack_split.sh --role a \
--peer-endpoint-v6 "<B_PUBLIC_IPV6>" \
--peer-pub "<B_PUBLIC_KEY>"
在 B 上
sudo bash wg_dualstack_split.sh --role b \
--peer-endpoint-v6 "<A_PUBLIC_IPV6>" \
--peer-pub "<A_PUBLIC_KEY>"
验证
# A
curl -4 ip.sb
curl ip.sb
# B
curl -6 ip.sb
总结
本文展示了一套 真实可落地 的 IPv4 / IPv6 双向分流方案,适用于:
- IPv6-only VPS
- 双栈中转
- 网络质量优化