很多人都会用HE的隧道服务,但是其实除了HE还有很多其他免费服务,但是更厉害的是自己可以制作一个,这需要你有Routed Prefix,部分VPS会提供,大部分杜甫也提供,如果你是通过BGP宣告自己的IP,那一段就肯定是Routed了.
假定配置如下:
我拥有的地址段 => 2406:840:e030::/48
隧道使用的/64地址块 => 2406:840:e030:ffff::/64
服务器 A(隧道服务器)公网 IPv4 地址:10.0.0.1 隧道内地址 => 2406:840:e030:ffff::1/64
服务器 B(客户端)公网 IPv4 地址:10.0.0.2 隧道内地址 => 2406:840:e030:ffff::2/64
额外的/64地址块(Routed /64):2406:840:e030:fffe::/64
在A服务器执行如下命令打开转发:
#打开 Linux 内核的 IPv6 转发功能
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
sysctl -p
然后在A服务器执行以下命令创建网络.
#设置隧道
ip tunnel add tun0 mode sit remote 10.0.0.2 local 10.0.0.1 ttl 255
ip link set tun0 up
#隧道端地址
ip addr add 2406:840:e030:ffff::1/64 dev tun0
#更大的地址块
ip route add 2406:840:e030:fe00::/56 dev tun0
当然也可以写在配置文件里.
auto tun0
iface tun0 inet6 v4tunnel
address 2406:840:e030:ffff::1
netmask 64
endpoint 10.0.0.2
local 10.0.0.1
ttl 255
mtu 1472
然后在B服务器执行以下命令.
#设置隧道
ip tunnel add tun0 mode sit remote 10.0.0.1 local 10.0.0.2 ttl 255
ip link set tun0 up
#隧道端地址
ip addr add 2406:840:e030:ffff::2/64 dev tun0
ip route add ::/0 dev tun0
ip -f inet6 addr
到现在,服务器B已经可以随便给网卡添加2406:840:e030:ffff::/64这段内地址,但这个是Link Prefix,需要Route Prefix的话用另一段地址.
当然,服务器B也可以做一个配置文件,和服务器端就只多了一个网关配置.
auto tun0
iface tun0 inet6 v4tunnel
address 2406:840:e030:ffff::2
netmask 64
endpoint 10.0.0.1
local 10.0.0.2
ttl 255
gateway 2406:840:e030:ffff::1
mtu 1472
写在后面,/48是BGP的最小单位,如果小于/48就无办法通过公网BGP,一段/48可以分割出65536个/64网络,如果分配/56的Routed Prefix是可以支持SLAAC等各种特性的,比如我考虑的就是如下分配方案:
- 2406:840:e030::/48 => 我自己做宣告和网关用途.
- 2406:840:e030:100::/56 - 2406:840:e030:fe00::/56 => Route Prefix (共254个)
- 2406:840:e030:ff00::/64 - 2406:840:e030:ffff::/64 => Link Prefix (共256个,但是其中有2个必然浪费.)
这样我的一段/48就可以给开254条隧道了,而每条隧道的用户又可以挂256个设备.
