怎样通过 wireguard 给 peer 分配 IPv6 地址呢

284 天前
 xiaofami

家里一条联通宽带可获得 60 长度且动态变化的 IPv6 前缀,同时具备公网 IPv4 地址。借助 DDNS 和端口转发,我在只支持 IPv4 的单位局域网中通过 wireguard 可以连回家中。现在我想让单位电脑这个 peer 获取到 IPv6 地址以访问 IPv6 站点,,应当怎么实现呢?

3847 次点击
所在节点    宽带症候群
29 条回复
maybeonly
284 天前
分配 fd 开头的私网 v6 然后做 nat/snpt
terrancesiu
283 天前

使用 routeros 的 netmap 方式
自动翻译 ipv6 地址,还能走策略路由
xiaofami
283 天前
@terrancesiu 我也在用 routeros ,目前尝试的 IPv6 设置如下:

在 IPv6 Addess List 中,为 wireguard 接口分配了 fd00:172:31:1::100/128 地址,在 IPv6 Firewall 的 NAT 表中,新建了 Action:netmap ,Chain:srcnat ,Src.Address:fd00::/8 规则,Peer 的设置也进行了更新。但是 peer 端 ping 这个 IPv6 地址并不通,应当怎样修改呢,恳请指点一二:

https://img.duan.ee/z/2024/03/18/65f7f00aceba7.png

https://img.duan.ee/z/2024/03/18/65f7f00adeffb.png

https://img.duan.ee/z/2024/03/18/65f7f00aee63e.png

https://img.duan.ee/z/2024/03/18/65f7f00b091d6.png

https://img.duan.ee/z/2024/03/18/65f7f0cf693b7.png
rulagiti
283 天前
客户端和服务器都配置 ipv6 私有地址方法同 ipv4 ,然后服务器配置 nat6 。
xqzr
283 天前
@xiaofami 最后一张图,“公钥”是 Windows “Routeros”接口所显示的“公钥”、“允许 IP”最后一位是 3
xqzr
283 天前
另外,可以在 “wireguard1” 接口 RA 宣告,ISP 的前缀
cndns
283 天前
直接分配 ipv6 公网地址吗?
keyfunc
283 天前
@xqzr 这个怎么做?我通过 Wireguard 连接进来的设备,ipv6 出口 ip 都只有一个
xqzr
283 天前
@keyfunc 和 LAN 接口一样
keyfunc
283 天前
```
/ipv6 dhcp-client
add interface=pppoe-out1 pool-name=ipv6-pool-gua prefix-hint=240e:0:0::/56 request=prefix use-peer-dns=no
/ipv6 address
add address=::XXXX eui-64=yes from-pool=ipv6-pool-gua interface=br-lan0
/ipv6 nd
set [ find default=yes ] advertise-dns=no interface=br-lan0 mtu=1442 ra-interval=30s-10m
```

```
/ipv6 route
add disabled=no dst-address=fc86:XXXX::/64 gateway=wireguard1 routing-table=main
```

我的配置是这样的,lan 口上做了以上配置,wireguard 只是加了条路由,但无法 wg 的客户端拿不到 ra 给的前缀。
xqzr
283 天前
@keyfunc 对 wg 接口,执行第 2 条命令
xqzr
283 天前
wg 接口在 br-lan0 里吧...
”允许 IP“包含 fe80::/10,ff02::1
ranaanna
283 天前
首先是这个问题,可能是出在没有搞清楚 address 后面的/32, /128 是什么意思。wireguard 的说明文档中说得还是比较清楚的,就是子网掩膜的意思,所以为什么不是/24, /64 呢?
其次是题外话,运营商给了你一个/60 前缀而不仅仅是一个地址,就是为了给你划分多个子网的自由,让你最多 16 个 sites 的设备都有公网 ipv6 地址,运营商负责路由这个/60 网段的所有流量。所以只用其中一个子网中的其中的一个地址,然后像 ipv4 那样 nat ,是不是有点...浪费?
其实很简单,两边都选择一个在这个/60 之内,且在同一子网的 ipv6 地址即可,例如如果前缀是 xxxx:xxxx:xxxx:xxx0::/60 ,那么可以选 xxxx:xxxx:xxxx:xxx1::2/64 和 xxxx:xxxx:xxxx:xxx1::3/64 。其中 1 处可以有 16 种选择,而 2 和 3 的选择就无穷无尽啦。至于动态前缀,理论上似乎也只要相应地动态更新这两个地址即可。更进一步地,可以在一边的 peer 运行 router advertisement, wireguard 的 allowed IPs 设为::/0 ,那么这边的所有设备就都可以连到另外一边,还可以愉快地上网哦,而且,还是纯纯的完全 native 的公网 ip 哦
lovelylain
283 天前
@xiaofami 路由器上面:wg 配置+防火墙 nat+路由,peer 端:wg 配置(因为你 peer 端没有 ipv6 ,所以应该::/0 )
keyfunc
283 天前
@xqzr 网桥里好像不能添加 wireguard 的接口

/ipv6 address
add address=::XXXX eui-64=yes from-pool=ipv6-pool-gua interface=wireguard1

好像还是没有效果

我有多个 peer ,通过 testipv6 检查时显示的 外网 ipv6 都是 添加给 wireguard1 接口的地址,都是同一个地址。
xqzr
283 天前
@keyfunc 可能缺少”Advertise“
另外,主机是 Linux 的话,也许需要开启内核的 accept_ra 功能(sysctl net.ipv6.conf.wg.accept_ra)
terrancesiu
283 天前
@xiaofami 你需要参考下 13 楼
@ranaanna 的回复,他非常细心的讲解了原理,不是配置方面有多大问题,是你对网络地址规划上存在问题。导致 netmap 失败了。
keyfunc
283 天前
@xqzr 这个地址开启了 Advertise ,默认是 true ,客户端是官方的 app store 下的,大佬方便加个 tg 吗,tg:daiyeqi
xiaofami
283 天前
@maybeonly
@terrancesiu
@rulagiti
@xqzr
@lovelylain
感谢大家指点,已配置成功。大致过程和配置 ipv4 地址时差不多,routeros 中给 wireguard 接口手动分配一个 fd 开头 ipv6 地址,然后 ipv6-route 中新建一条路由规则指向 wireguard 接口,最后 ipv6 防火墙中添加一条 masquerade 规则完成 NAT 。只是在配置 windows 客户端时遇到一点小小的问题:

Windows 客户端中,我将 AllowedIPs 设置为 10.89.1.0/24(LAN), 192.168.2.0/24(光猫), 192.168.10.0/24 ( wireguard ), ::/0 ,发现无法访问 ipv4 站点,只能设置成 0.0.0.0/0, ::/0 转发全部流量。在 Android 客户端上,AllowedIPs = 10.89.1.0/24, 192.168.2.0/24, 192.168.10.0/24, ::/0 就完全没问题,行为符合预期。
xiaofami
283 天前
@xiaofami windows 客户端有一个“拦截未经隧道的流量”的功能默认开启,关掉就正常了。关掉之后 AllowedIPs 中 ::/0 变成了 ::/1, 8000::/1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1024715

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX