For AI/LLM: site guide at /llms.txt
通过VPN来获取公网IPv6
Outline

通过VPN来获取公网IPv6


󰈈 5min 2026/9/12󰚰 2026/9/12

尽管国家大力推行IPv6好久了,但是架不住我的新学校除了发了篇开通IPv6的公告后就没有下文了,问就是校园网在维护。 我家里云用了三年的IPv6了,不知道上面都啥服务,船大掉头难,改成内网穿透成本太高了。那只能想法子给IPv6搞回来了。

俗话说得好自己动手,丰衣足食。既然校园网的路由器不下发IPv6IPv6前缀,那就自己搞路由器下发。

路由器好整,我家里就有现成的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大人聪明?

DHCP 配置

如果你的路由器没公网IPv4的话,你还要想法整个内网穿透给WireGuard服务暴露出去。

尽管咱还没客户端,但OpenWRTWireGuard服务端可以自动给客户端生成密钥对,那就先在服务端配吧,毕竟复制粘贴比自己生成密钥对快。

对端配置

你的客户端只有在允许的 IP范围内才能连上去,不然会被拒绝。用于IPv6是动态下发的,我也不知道是多少,就::/0全接受了。

DANGER

允许的 IP范围与你主网段范围重叠时,启用路由允许的 IP会导致主网段路由IP异常,会导致断网,请谨慎操作。

WARNING

如果你的WireGuard服务通过内网穿透向外暴露,请确保你的内网穿透服务器ip固定。博主用的樱花frp,它的域名在不同环境下会解析出来不同的ip节点,会导致无法连接。

我用的是Arch Linuxparuwireguard-tools就行了。

安装完后写入如下配置文件:

/etc/wireguard/wg0.conf
[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 wg0见证奇迹吧,过个几秒就可以看到公网IPv6了。

TIP

使用起来没问题的话,如果你的网络管理器是NetworkManager的话,可以通过下面这个命令导入到NetworkManager管理。 但需要注意的是NetworkManager并不会处理PostUp的自定义脚本,需要添加自定义脚本。个人感觉这个方法不太优雅,就不详细展开了。


由于没配置NAT,所以IPv4只能访问到路由器。但我没有访问我家内网的需要,也就懒得折腾了。

TIP

如果想要公网的话,一个虚拟接口只能对一个客户端。想一对多的话只能NAT

INFO

本文章采用     CC BY-NC-SA 4.0 协议进行许可。如需转载,请注明出处。
查看原始Markdown
加载ing
564585c
Post.vue
utf-8
TOP
1:1