如果有 IPv6 就好了

最近有小伙伴想使用某 IPv6 破站,虽说 IPv6 已经普及,但该站也与时俱进屏蔽了国内 IP,而国外 IP 暂时不受影响。此前申请过 Lightsail 学生额度,白嫖个 VPS,不过没有 IPv6,咱就来试下 HE 的免费 IPv6 隧道。

# 前期准备

Hurricane Electric 可能是全球最大 IPv6 互联网骨干网,一直免费提供 IPv6 Tunnel Broker,节点遍布全球各地,包括咱 Lightsail 所在的东京。先准备好食材。

  • 创建 Lightsail 的实例,CentOS 7 64bit 系统,绑上静态 IPv4 地址。
  • 开启 ICMP 协议。虽然官方好像说了 Lightsail 不支持 ICMP 协议,但是把实例的防火墙设置成 All TCP+UDP ALL 0 - 65535 后就能用了。

然后是 HE 部分的操作。

# 内网 IP

由于 AWS 的网络限制(内网 IP 是动态分配的),HE 的配置方法还需略微修改。由于不清楚实例重启后私有 IP 会不会变化,可以在开机时动态查询内网 IP。SSH 连上 VPS,新建脚本。

sudo vim /usr/local/bin/checkipeth0

写一个用来查询 IP 的脚本,加上可执行 BUFF。脚本中的 eth0 是当前使用的网卡设备名。

$ cat /usr/local/bin/myip

#!/usr/bin/perl
$MYIP=`ip a show dev eth0 | grep "inet " | awk '{print $2}' | awk -F/ '{print $1}'`;
print $MYIP;

$ sudo chmod +x /usr/local/bin/myip

执行此脚本会返回当前私有 IP。

# 打通 IPv6 隧道

参考 HE 提供的配置,需要注意第二句,此处的 local IP 不是之前 AWS 申请的静态 IP,而是内网私有 IP,可以在实例的网络设置里找,在本例中使用刚才创建的脚本查询,将 local 后面的静态 IP 替换成如下命令,其他不变。

sudo modprobe ipv6
sudo ip tunnel add he-ipv6 mode sit remote 74.82.46.6 local `myip` ttl 255
sudo ip link set he-ipv6 up
sudo ip addr add 2001:470:23:407::2/64 dev he-ipv6
sudo ip route add ::/0 dev he-ipv6
sudo ip -f inet6 addr

设置完成后,用 IPv6 来 ping Google。

ping6 -c 4 google.com

21 时(UTC+8)测试,延迟 10ms 左右,下载速度大约 4MB/s。如果后续需要提供 IPv6 的 Web 服务,可以给 eth0 绑上 IPv6 地址,再用 crontab 定时 ping Google 以保持隧道常开。

# Reference

https://samsclass.info/ipv6/proj/pHE1A-Tunnel.htm

前期准备
内网 IP
打通 IPv6 隧道
Reference