通过VPN来获取公网IPv6
尽管国家大力推行IPv6好久了,但是架不住我的新学校除了发了篇开通IPv6的公告后就没有下文了,问就是校园网在维护。
我家里云用了三年的IPv6了,不知道上面都啥服务,船大掉头难,改成内网穿透成本太高了。那只能想法子给IPv6搞回来了。
俗话说得好自己动手,丰衣足食。既然校园网的路由器不下发IPv6和IPv6前缀,那就自己搞路由器下发。
路由器好整,我家里就有现成的OpenWRT,但是怎么把电脑和路由器连在一起确实一个问题,正巧,VPN是做这个的,那思路就清晰了:
我是采用WireGuard来进行搭建VPN的。它是基于UDP实现VPN的。
在OpenWRT上,它并非一个luci APP,而是类似网口适配器的东西,安装luci-proto-wireguard就可以了。
之后就可以在接口里创建WireGuard虚拟接口了。生成下密钥对,然后填写下你的服务端口。
IP地址需要填写一个IPv4地址,一个IPv6地址。这相当于一个新网段,这个IP地址就是路由器IP,但需要注意的是不能和LAN口的IP重叠。
如果你需要下发公网IPv6地址但话还需要添加一个fe80::巴拉巴拉的IP,如果你只想搞NAT的话这个不需要。
除此之外,还需要在高级设置里把委托 IPv6 前缀和IPv6 分配长度打开
选到DHCP 服务器那里,创建DHCP 服务器,然后照着下面配置抄就行了。
为什么要这样写?我也不知道,这都是AI大人写的,我怎么可能有AI大人聪明?
如果你的路由器没公网IPv4的话,你还要想法整个内网穿透给WireGuard服务暴露出去。
尽管咱还没客户端,但OpenWRT的WireGuard服务端可以自动给客户端生成密钥对,那就先在服务端配吧,毕竟复制粘贴比自己生成密钥对快。
你的客户端只有在允许的 IP范围内才能连上去,不然会被拒绝。用于IPv6是动态下发的,我也不知道是多少,就::/0全接受了。
DANGER
当允许的 IP范围与你主网段范围重叠时,启用路由允许的 IP会导致主网段路由IP异常,会导致断网,请谨慎操作。
WARNING
如果你的WireGuard服务通过内网穿透向外暴露,请确保你的内网穿透服务器ip固定。博主用的樱花frp,它的域名在不同环境下会解析出来不同的ip节点,会导致无法连接。
我用的是Arch Linux,paru搜wireguard-tools就行了。
安装完后写入如下配置文件:
[Interface]
PrivateKey = <你的客户端私钥>
Address = <IP地址1>, <IP地址2>, ...
# 下面是AI大人教的用接受DHCP的
PostUp = sysctl -w net.ipv6.conf.%i.accept_ra=2
PostUp = sysctl -w net.ipv6.conf.%i.forwarding=1
PostUp = ip -6 addr add fe80::77:2/64 dev %i
[Peer]
PublicKey = <你的服务端公钥>
Endpoint = <你的服务地址>
AllowedIPs = <你想代理的网段1>, <你想代理的网段2>, ...
# 保活,NAT环境下必填
PersistentKeepalive = 25
写完后就可以见证奇迹吧,过个几秒就可以看到公网sudo wg-quick up wg0IPv6了。
TIP
使用起来没问题的话,如果你的网络管理器是NetworkManager的话,可以通过下面这个命令导入到NetworkManager管理。
但需要注意的是NetworkManager并不会处理PostUp的自定义脚本,需要添加自定义脚本。个人感觉这个方法不太优雅,就不详细展开了。
由于没配置NAT,所以IPv4只能访问到路由器。但我没有访问我家内网的需要,也就懒得折腾了。
TIP
如果想要公网的话,一个虚拟接口只能对一个客户端。想一对多的话只能NAT
INFO



