公众号旧文

当拿到一个 /64 IPv6 网段后,能做些什么?

作者:胖子阅读 —

很多人买 IPv6 VPS 时,会看到商家写着:

IPv6 Prefix: /64

然后第一反应是:不就是一个 IPv6 地址吗?

当然不是。

如果服务商真的把整个 /64 路由给了你的服务器,那么你拿到的并不是一个 IPv6,而是一整个巨大的 IPv6 地址空间。

一个 /64 包含:

2^(128-64) = 2^64

也就是:

18,446,744,073,709,551,616

个 IPv6 地址。

当然,现实中你几乎不可能真的使用这么多地址,但它带来的意义并不是地址数量多,而是你可以给不同服务、不同进程、不同容器、不同用途分配完全独立的公网 IPv6。

这和传统 IPv4 VPS 的体验完全不同。

假设服务器拿到的网段是:

2a0c:9a40:9210:4::/64

默认 IPv6 是:

2a0c:9a40:9210:4::164

如果服务商没有限制,你可以继续给网卡添加:

2a0c:9a40:9210:4::100

2a0c:9a40:9210:4::101

2a0c:9a40:9210:4::102

2a0c:9a40:9210:4::103

Linux 上甚至只需要一条命令:

ip -6 addr add 2a0c:9a40:9210:4::100/64 dev eth0

然后查看:

ip -6 addr show dev eth0

如果配置正常,这个地址就已经属于这台服务器了。

但真正关键的不是能不能加上,而是要测试服务商是否真的允许这些地址通信。

例如强制使用新 IPv6 出站:

curl -6 \

  --interface 2a0c:9a40:9210:4::100 \

  https://api64.ipify.org

如果返回:

2a0c:9a40:9210:4::100

说明这个新增地址确实能够作为公网出口。

进一步,在服务器上监听:

python3 -m http.server 8080 \

  --bind 2a0c:9a40:9210:4::100

然后从另一台 IPv6 主机访问:

curl -g -6 \

  'http://[2a0c:9a40:9210:4::100]:8080/'

如果也成功,那么基本可以确认这个 /64 不只是面板里写着好看,而是真的可以使用。

一、不同服务使用不同公网 IP

这是 /64 最直观的玩法。

传统 VPS 往往是:

一个公网 IPv4

├── 80   网站

├── 443  HTTPS

├── 22   SSH

├── 5201 iperf3

└── 其他服务

所有服务都共享同一个公网 IP。

有了 /64 后,可以变成:

::100  网站

::101  API

::102  监控

::103  iperf3

::104  DNS

::105  代理服务

这样服务之间在网络身份上可以完全分离。

甚至相同的端口都可以重复使用。

例如:

[::100]:443

[::101]:443

[::102]:443

三个服务都监听 443,但因为 IP 不同,所以完全不冲突。

这在做多站点、多实例、多协议实验时非常方便。

二、让不同程序拥有不同出口 IP

这是更有意思的地方。

例如:

curl --interface 2a0c:9a40:9210:4::100 https://api64.ipify.org

curl --interface 2a0c:9a40:9210:4::101 https://api64.ipify.org

curl --interface 2a0c:9a40:9210:4::102 https://api64.ipify.org

服务器虽然只有一张网卡,但是外部网站看到的却是三个不同 IPv6。

因此可以设计:

程序 A → ::100

程序 B → ::101

程序 C → ::102

这对于:

  • 网络测试
  • 多出口测试
  • API 连通性测试
  • CDN 测试
  • DNS 测试
  • IPv6 应用开发

都很方便。

三、搭建 IPv6 网络探针

如果你本身有多台服务器,那么 /64 VPS 很适合变成一个网络探针节点。

例如定时执行:

ping -6

mtr -6

traceroute -6

curl -6

dig AAAA

iperf3

可以监测:

美国 → 日本

美国 → 香港

美国 → 欧洲

美国 → Cloudflare

美国 → Google

长期记录后,还能得到:

  • RTT 延迟
  • 丢包率
  • 路由变化
  • 网络抖动
  • IPv6 可达性
  • 不同运营商线路变化

这样一台很便宜的 VPS,实际上可以变成自己的小型 RIPE Atlas。

四、测试网站真正的 IPv6 支持

很多网站虽然有 AAAA 记录,但 IPv6 并不一定真的工作正常。

比如可以测试:

dig AAAA example.com

然后:

curl -6 https://example.com

或者:

mtr -6 example.com

这样可以检查:

  • AAAA 是否配置正确
  • IPv6 HTTPS 是否正常
  • CDN 是否支持 IPv6
  • IPv6 路由是否异常
  • IPv6 与 IPv4 延迟差异

如果自己运营网站,甚至可以专门从这个 VPS 定期检测 IPv6 可用性。

五、做多地址 Web 服务

假设一台机器有:

::100

::101

::102

Nginx 可以分别监听:

listen [2a0c:9a40:9210:4::100]:443 ssl;

listen [2a0c:9a40:9210:4::101]:443 ssl;

listen [2a0c:9a40:9210:4::102]:443 ssl;

于是同一台服务器可以拥有多个独立公网入口。

这比传统依赖端口区分服务更干净。

甚至可以做到:

IPv6 A → 网站 A

IPv6 B → 网站 B

IPv6 C → API

IPv6 D → 测试环境

六、给 Docker 或容器分配公网 IPv6

这是 /64 很适合玩的一个方向。

传统 Docker 经常:

公网 IP

   ↓

宿主机 NAT

   ↓

容器

而 IPv6 的设计理念本来就不是依赖 NAT。

如果路由和 Docker 网络配置正确,可以做到:

宿主机    ::100

容器 A    ::101

容器 B    ::102

容器 C    ::103

每个容器直接拥有公网 IPv6。

这样很多网络结构会简单很多。

例如:

Internet

   │

   ├── ::101 → nginx container

   ├── ::102 → API container

   └── ::103 → monitoring container

不再必须依赖大量端口映射。

七、虚拟机和 LXC 也可以拥有独立 IPv6

如果 VPS 支持嵌套虚拟化或者运行 LXC,那么理论上还可以进一步:

宿主机        ::100

LXC-1         ::101

LXC-2         ::102

LXC-3         ::103

每个虚拟环境都有自己的公网 IPv6。

从网络角度,它们就像不同服务器一样。

这也是 IPv6 地址空间充足之后非常自然的一种架构。

八、测试源地址选择和多地址行为

IPv6 一个很值得研究的地方,就是 Source Address Selection。

如果一台 Linux 同时拥有:

::100

::101

::102

::103

那么:

curl https://example.com

系统到底会选择哪一个?

可以进一步研究:

ip -6 route get

例如:

ip -6 route get 2606:4700:4700::1111

系统会告诉你类似:

via ...

dev eth0

src 2a0c:...

这对于理解 Linux IPv6 路由、源地址选择、策略路由非常有帮助。

九、配合策略路由

进一步还可以做到:

用户 A → ::100 出口

用户 B → ::101 出口

程序 C → ::102 出口

可以结合:

ip rule

ip route

fwmark

nftables

做 IPv6 Policy Routing。

例如:

进程/流量类型

      ↓

nftables mark

      ↓

ip rule

      ↓

不同 source IPv6

这是比较高级,但也非常有实验价值的玩法。

十、跑 IPv6 Only 服务

如果这台 VPS 本身就是 IPv6 Only,那么也非常适合拿来检查自己的软件到底有没有偷偷依赖 IPv4?

很多程序平时在双栈环境下工作正常,但放到 IPv6-only 环境之后,会暴露很多问题:

  • DNS 只查 A 记录
  • 程序写死 IPv4 地址
  • 第三方 API 不支持 IPv6
  • Docker 网络不支持 IPv6
  • 软件默认绑定 0.0.0.0
  • 数据库连接地址只有 IPv4
  • SDK IPv6 兼容问题

所以 IPv6-only VPS 本身就是一个非常好的兼容性测试环境。

十一、可以研究 NAT64

IPv6-only VPS 最大的问题是:如果目标网站只有 IPv4 怎么办?

这就会涉及:

NAT64

DNS64

464XLAT

例如 IPv6-only 客户端:

IPv6 Client

    ↓

DNS64

    ↓

NAT64 Gateway

    ↓

IPv4 Internet

如果服务商本身提供 NAT64,那么 IPv6-only VPS 甚至可以访问 IPv4-only 网站。

这也是非常值得研究的网络技术。

十二、搭建 DNS 服务

有一个 /64 后,可以给不同 DNS 服务分配独立地址。

比如:

::53     Unbound

::54     SmartDNS

::55     dnsmasq

::56     测试 DNS

当然地址尾数完全可以自己定义。

可以对比不同 DNS:

  • 响应时间
  • AAAA 解析
  • DNSSEC
  • ECS
  • 缓存命中
  • DoH/DoT

对于网络实验来说很方便。

十三、做 iperf3 测速节点

例如:

iperf3 -s

然后从其他机器:

iperf3 -6 -c 2a0c:9a40:9210:4::101

可以测试:

东京 → 美国

香港 → 美国

欧洲 → 美国

国内 → 美国

的 IPv6 带宽。

如果你有多个 VPS,这种节点非常实用。

十四、给监控系统单独分 IP

例如:

::100  Prometheus exporter

::101  uptime monitor

::102  HTTP health check

::103  network probe

这样日志里看到目标 IP 就能知道是哪项服务。

相比 同一个 IP + 一堆不同端口,可读性会好很多。

十五、可以构建自己的 IPv6 实验室

实际上,一个真正能使用 /64 的 VPS,本质上已经是一座小型 IPv6 实验室。

你可以拿它研究:

IPv6 地址配置

IPv6 路由

NDP

SLAAC

静态 IPv6

多源地址

策略路由

DNS64

NAT64

IPv6 防火墙

Docker IPv6

Nginx IPv6

Tailscale IPv6

WireGuard IPv6

BGP 基础

网络监控

而且不需要非常高的服务器配置。

因为这些实验大部分吃的是网络,而不是 CPU 和内存。

所以哪怕只有:

1 Core

512 MB RAM

10 GB Disk

依然可以玩很多东西。

但有一个非常重要的误区

看到 /64 不等于一定可以随便使用整个 /64。

有些 VPS 服务商虽然系统显示:

xxxx:xxxx:xxxx:xxxx::/64

但上游实际上可能限制:

只能使用分配给你的一个 IPv6

或者做:

NDP 限制

MAC/IP Binding

Source Address Filtering

Anti-Spoofing

所以一定要实际验证。

至少做两个测试。

第一:

ip -6 addr add 新IPv6/64 dev eth0

curl -6 --interface 新IPv6 https://api64.ipify.org

验证出站。

第二:

python3 -m http.server 8080 --bind 新IPv6

从另外一台 IPv6 主机:

curl -g -6 'http://[新IPv6]:8080/'

验证入站。

只有这两个都成功,才可以比较有把握地说服务商真的把这个 /64 给你用了。