WireGuard中转引入HE IPv6 地址

WireGuard中转引入HE IPv6 地址

· json · rss
Subscribe:

About

其实可以在wireguard中跑he隧道6to4,但是隧道套隧道效率很低,还需要解决两层mtu问题,所以就全程ipv6公网,避免nat浪费性能。

本教程适用于服务器已有ipv6地址。


1.申请IPV6 6to4隧道并assign /48地址段

https://tunnelbroker.net/

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公网,而且可以被全球路由。

还有很多骚玩法,就不多说了。