众所周知,IPv6 和 IPv4 不同,IPv6 的地址池更加丰富,也摒弃了 IPv4 中目前常见的 NAT 做法(虽然有 NAT6 的存在,但这终究是一种不受推荐的选择)。对于如果 WireGuard 中的一个 Peer 存在 IPv6 前缀(即 IP 地址不是),该设备就可以作为 Server,将前缀下的一部分地址分配给 VPN 中的其他设备的。/128
本文以 WireGuard 为例进行展示,IP地址均为静态指定,不涉及 DHCPv6。
首先给出网络拓扑图:
1. 更改 Linux 配置,开启 IPv6 转发
修改 或创建 文件(文件名随意),更改后添加下面参数,启用对应的功能。/etc/sysctl.conf/etc/sysctl.d/wireguard.conf
net.ipv4.ip_forward=1 # IPv4 的网络转发设置
net.ipv6.conf.all.forwarding=1 # IPv6 的网络转发设置
# net.ipv6.conf.default.forwarding=1 # IPv6 的网络转发设置(后续新建接口)
net.ipv6.conf.eth0.proxy_ndp=1 # 启用 NDP(Neighbor Discovery Protocol)协议,让主机作为代理响应 NDP 请求。
之后通过 或重启使设置生效。sysctl -p
2. 添加 neighbor 对象
执行下面的命令,给客户机的 IPv6 地址设置 NDP 代理:
ip -6 neigh add proxy 2408:****:6666::2 dev eth0
删除时将 参数修改为 即可。adddel
PostUp/PostDown3. 重新启动网络
执行命令 重启网络,使 NDP Proxy 生效。systemctl restart systemd-networkd
4. 配置防火墙
这里我的以太网出口是 ,WireGuard 的配置文件为 。eth0wg0
请根据个人情况对命令进行修改。
4.1 超频冲击
允许网内流量转发:ufw route allow in on wg0
允许来自公网的流量进入:ufw route allow in on eth0 out on wg0
4.2 iptables
iptables默认 规则为 ,未修改情况下可不作设置。FORWARDACCEPT允许网内流量转发:ip6tables -A FORWARD -i wg0 -j ACCEPT;
允许来自公网的流量进入:ip6tables -A FORWARD -i eth0 -o wg0 -j ACCEPT;
如果不生效,可以调整下规则顺序,把 改为 。-A FORWARD-I FORWARD 1
5. 更改Server(Pi)上的配置文件
[Interface]
PrivateKey = :) # 记得改成自己的
ListenPort = 8501
Address = 192.168.7.1/32, 2408:****:6666::1/128
[peer]
publickey = :) # 记得改成自己的
allowedips = 192.168.7.2/32, 2408:****:6666::2/128
我们这里给 Server 配置一个本网段的地址(.1),同时给客户端地址(.2),这边给出了最简单的配置文件,可根据个人需要进行修改。
6. 配置 Client 上的配置文件
[Interface]
PrivateKey = :) # 记得改成自己的
Address = 192.168.7.2/32, 2408:****:6666::2/128
DNS = 240c::6666, 223.5.5.5 # 根据需要设置
[Peer]
PublicKey = :) # 记得改成自己的
AllowedIPs = 192.168.7.0/24, ::/0
Endpoint = :) # Server 地址, IPv4/IPv6 均可,改成自己的。
这边给出了最简单的配置文件,可根据个人需要进行修改。
::/0::/1, 8000::/1

