WireGuard中转引入HE IPv6 地址
About
其实可以在wireguard中跑he隧道6to4,但是隧道套隧道效率很低,还需要解决两层mtu问题,所以就全程ipv6公网,避免nat浪费性能。
本教程适用于服务器已有ipv6地址。
1.申请IPV6 6to4隧道并assign /48地址段
User Function->Create Regular Tunnel,填入你的公网IPV4 Endpoint,选个近的tunnel server,点击Create Tunnel,完成创建隧道。
2.点击分配/48 Perfix,得到一个/48的前缀,每个账号24小时只能申请一个/48。
3.划分地址段
目前有he提供的一段/64和一段/48,下面地址仅供参考。
//Hurricane Electric IPV6 2001:4aa:bb:cc::/64 2001:4aa:bbbc::/48 //VPS 6to4接口地址 2001:4aa:bb:cc::2/64 2001:4aa:bbbc::1/48 //VPS WireGuard接口地址 2001:4aa:bb:cc:1::1/80 2001:4aa:bbbc:1::1/50 //Routeros WireGuard接口地址 2001:4aa:bb:cc:1::2/80 2001:4aa:bbbc:1::2/50
4.配置VPS 6to4隧道
其实HE提供了ifupdown的配置文件,编辑/etc/network/interfaces。
auto he-ipv6 iface he-ipv6 inet6 v4tunnel address 2001:4aa:bb:cc::2/64 //64地址 netmask 64 endpoint 216.218.226.238 //tunnel server地址 local 38.40.100.00 //本地出口网卡的ipv4地址,不是公网就填nat的地址。 ttl 255 gateway 2001:4aa:bb:cc::1 //tunnel server ipv6网关 metric 9999 //如果本机有ipv6地址一定要降低优先级,不然流量会默认走he出去。 up ip -6 addr add 2001:4aa:bbbc::1/48 dev he-ipv6 //48地址
最后,起接口,如果没有报错,就说明成功启用he隧道。
ifup he-ipv6
5.配置VPS WireGuard
WireGuard基础配置非常简单,详见:https://blog.arklink.org/i/wireguardor-5S4pGQ_kLDE/
因为本机有ipv6地址,所以如果直接为客户端分配公网ipv6地址,也是没法正常路由的,会默认nat从本机ipv6出口,所以需要路由表分流,因为wireguard支持postup down所以可以直接执行iptables指令。
[interface] Address = 10.0.12.1/24, 2001:4aa:bb:cc:1::1/80, 2001:4aa:bbbc:1::1/50 PrivateKey = uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQ= ListenPort = 21111 //这段postup允许wireguard接口流量到eth0和he-ipv6接口,这里的eth0需要替换为你vps的接口。 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; sudo ip6tables -A FORWARD -i wg0 -o he-ipv6 -j ACCEPT PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; sudo ip6tables -D FORWARD -i wg0 -o he-ipv6 -j ACCEPT //如果你vps已经被厂商分配ipv6地址,这一段是必要的,让来自wiregurd接口流量分流到table 100下一条网关为tunnel server的ipv6地址。 PostUp = ip -6 route add default via 2001:4aa:bb:cc::1 dev he-ipv6 table 100 ; ip -6 rule add iif %i lookup 100 PostDown = ip -6 rule del iif %i lookup 100 ; ip -6 route flush table 100 //允许的地址段填为wiregurd接口分配的地址。 [Peer] PublicKey = zxxxxxxxxxxxxxxxxxxxxxxxxgDY= //Routeros公钥 AllowedIPs = 2001:4aa:bb:cc:1::1/80, 2001:4aa:bbbc:1::1/50, 10.0.12.0/24
最后,启用wiregurd接口,没有报错则启用成功。
systemctl start wg-quick@wg0
6.配置Routeros(省略版)
如果你是linux也是类似的做法,不过routeros的图形化更方便,这里演示为routeros。
WireGuard-> "+" New Interface->点击Apply Routeros会自己生成公钥,复制到第5步中peer中PublicKey。
WireGuard->Peers->"+" Allowed Address缺省默认全部路由,其他的就是wireguard那一套所以懒得说了。
最后IP->Address->"+", IPv6->Address->"+"添加ipv4和ipv6地址,50和48都要配。
最后随便routes添加一条路由指向VPS的Wiregurd接口地址。
traceroute一下,这样就会被路由到he网关
END.当然本地的/50还可以分一堆/64再ND出去,或者分配给wiregurd,局域网每个设备都相当于有一个HE ipv6公网,而且可以被全球路由。
还有很多骚玩法,就不多说了。