Skip to main content

WireGuard 配置 Global IPv6 (公网下放)

Updated Markdown
Part of seriesTechnology
WireGuard 配置 Global IPv6 (公网下放)

众所周知,IPv6 和 IPv4 不同,IPv6 的地址池更加丰富,也摒弃了 IPv4 中目前常见的 NAT 做法(虽然有 NAT6 的存在,但这终究是一种不受推荐的选择)。对于如果 WireGuard 中的一个 Peer 存在 IPv6 前缀(即 IP 地址不是/128),该设备就可以作为 Server,将前缀下的一部分地址分配给 VPN 中的其他设备的。

本文以 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

删除时将 add 参数修改为 del 即可。

💡
注:该命令重启后失效。推荐使用 PostUp/PostDown 设置为VPN 启动/停止时自动配置,也可设置独立的开机自启项。

3. 重新启动网络

执行命令 systemctl restart systemd-networkd 重启网络,使 NDP Proxy 生效。

4. 配置防火墙

这里我的以太网出口是 eth0 ,WireGuard 的配置文件为 wg0 。

请根据个人情况对命令进行修改。

4.1 ufw

允许网内流量转发:ufw route allow in on wg0

允许来自公网的流量进入:ufw route allow in on eth0 out on wg0

4.2 iptables

💡
iptables 默认 FORWARD 规则为 ACCEPT,未修改情况下可不作设置。

允许网内流量转发: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 可能存在一个问题,就是它也包括了所有的 IPv4 流量。如果不需要 IPv4 的流量进入 VPN 网络,可拆分成两个网段(::/1, 8000::/1)的写法,避免生成高优先级的默认路由。

7. 效果展示

About the author

No comments yet. Be the first to comment.

More from this blog