通过 systemd-networkd 使用 HE.net IPv6 Tunnelbroker
缘起
近期购入了某家灵车号称用了阿里云资源的 IDC 的小 VPS/VDS,坐标日本,其网络质量尚可,性能也还算不错,目前体验下来除了灵车和资源来路不明之外,最大的问题是 IP 脏,而且是真™脏。脏到什么程度呢?各位看官自己看图吧。
IP 风险程度:
查 GCC 文档的时候,IP 被 ban 直接撞 403 Forbidden:
偶然打开 last.fm 发现也被 ban 了:
各种打开网站必撞验证码就更不用说了。
鉴于现在已经是 2024 年底了,各大网站对 IPv6 对支持已经显著改善,理论上来说添加一个 IPv6 出口会好很多。
也因此 HE.net 提供的 IPv6 Tunnelbroker 自然成了一个不错的选择。
配置
注意:以下除了简单检查了下74.82.46.6
和几个 DNS 是真实的 IP 地址之外,其他的如10.1.2.3
和2001:a:b:c::2
均仅为演示用途。请根据实际情况替换真实 IP。
/etc/net*
,看输出可以看到机器似乎采用了 netplan
+ systemd-networkd
后端的方式进行网络管理。$ ls /etc/net*
/etc/netconfig /etc/networks
/etc/netplan:
50-cloud-init.yaml
/etc/network:
if-pre-up.d if-up.d
呵,Debian 系统却在用 netplan
啊。实话说有点意外。无所谓,这里会使用
systemd-networkd
进行管理。申请&创建 HE IPv6 Tunnel
打开 https://tunnelbroker.net/ 并登录/注册账号。这里的账号与 HE.net 主站是通用的,如果以前注册过可以不用重新注册。
选择左侧的
User Functions
-> Create Regular Tunnel
,创建一个新的隧道。接下来在
IPv4 Endpoint (Your side)
填写机器的 IPv4 公网地址。然后在
Availiable Tunnel Servers
中选择一个距离你机器最近、延迟最低的服务器。点击
Create Tunnel
,稍等片刻即可创建新的隧道。我这次的服务器在日本东京,因此直接选择东京服务器。延迟/路由大概如下:
$ nexttrace 74.82.46.6
NextTrace v1.3.5 2024-10-14T11:17:47Z 4ae9d8e
[NextTrace API] preferred API IP - [2606:4700:3037::ac43:9bc0] - 226.53ms - Misaka.HKG
IP Geo Data Provider: LeoMoeAPI
traceroute to 74.82.46.6, 30 hops max, 52 bytes payload
1 11.209.227.22 * DOD
5.16 ms / * ms / * ms
2 *
3 *
4 *
5 47.246.116.230 * 日本 东京都 东京
2.40 ms / 2.60 ms / 2.73 ms
6 *
7 74.82.46.6 AS6939 日本 东京都 东京 he.net
2.60 ms / 2.60 ms / 2.61 ms
$ ping -c4 74.82.46.6
PING 74.82.46.6 (74.82.46.6) 56(84) bytes of data.
64 bytes from 74.82.46.6: icmp_seq=1 ttl=58 time=4.20 ms
64 bytes from 74.82.46.6: icmp_seq=2 ttl=58 time=2.59 ms
64 bytes from 74.82.46.6: icmp_seq=3 ttl=58 time=2.54 ms
64 bytes from 74.82.46.6: icmp_seq=4 ttl=58 time=3.21 ms
--- 74.82.46.6 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 2.535/3.132/4.197/0.669 ms
配置 systemd-networkd
配置大概分为两步:创建一个新的接口,以及对这一接口进行配置。分别在
/etc/systemd/network/
下创建如下两个文件。注意:注释需要删掉。
he-ipv6.netdev
:[NetDev]
Name=he-ipv6
Kind=sit
[Tunnel]
Independent=yes
Remote=74.82.46.6 #填写 Tunnelbroker 上提供的 Server IPv4 Address
Local=10.1.2.3 #填写机器公网地址或者 LAN IP,比如是类似阿里云这种有 VPC 的机器则需要填 LAN IP
TTL=255
he-ipv6.network
:[Match]
Name=he-ipv6
[Network]
Address=2001:a:b:c::2/64 #填写 Client IPv6 Address
#DNS=2001:a:b::2 #填写 HE.net Anycast IPv6 Caching Nameserver,但我并不推荐,解析结果不太行,除非你的主机在美国本土
DNS=2606:4700:4700::1111 #其实可以加个其他的 Public DNS,比如这里和下面这两条是 Cloudflare 的
DNS=2606:4700:4700::1001
[Route]
Destination=::/0
#Gateway=2001:a:b:c::1 #可以不填
编写完毕后,重启 systemd-networkd
:$ sudo systemctl restart systemd-networkd
至此接口已经创建完成。如果遇到问题,尝试加载 sit
内核模块后再重启 systemd-networkd
:$ sudo modprobe sit
$ sudo systemctl restart systemd-networkd
简单检测下网络状态:$ ip a s he-ipv6
4: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/sit 10.1.2.3 peer 74.82.46.6
inet6 2001:a:b:c::2/64 scope global
valid_lft forever preferred_lft forever
$ ip -6 r s
2001:a:b:c::/64 dev he-ipv6 proto kernel metric 256 pref medium
fe80::/64 dev ens3 proto kernel metric 256 pref medium
default dev he-ipv6 proto static metric 1024 pref medium
$ curl -6 ip.sb
2001:a:b:c::2
$ ping -c4 ipv6.google.com
PING ipv6.google.com(kix06s11-in-x0e.1e100.net (2404:6800:400a:805::200e)) 56 data bytes
64 bytes from kix06s11-in-x0e.1e100.net (2404:6800:400a:805::200e): icmp_seq=1 ttl=119 time=10.9 ms
64 bytes from kix06s11-in-x0e.1e100.net (2404:6800:400a:805::200e): icmp_seq=2 ttl=119 time=10.9 ms
64 bytes from kix06s11-in-x0e.1e100.net (2404:6800:400a:805::200e): icmp_seq=3 ttl=119 time=10.9 ms
64 bytes from kix06s11-in-x0e.1e100.net (2404:6800:400a:805::200e): icmp_seq=4 ttl=119 time=10.9 ms
--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 10.852/10.888/10.926/0.034 ms
网速也还可以:质量尚可,收工。