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

2024-03-18 14:13:43 +08:00
 xiaofami

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

5108 次点击
所在节点    宽带症候群
29 条回复
maybeonly
2024-03-18 14:18:56 +08:00
分配 fd 开头的私网 v6 然后做 nat/snpt
terrancesiu
2024-03-18 15:02:01 +08:00

使用 routeros 的 netmap 方式
自动翻译 ipv6 地址,还能走策略路由
xiaofami
2024-03-18 15:44:29 +08:00
@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
2024-03-18 17:03:33 +08:00
客户端和服务器都配置 ipv6 私有地址方法同 ipv4 ,然后服务器配置 nat6 。
xqzr
2024-03-18 17:29:57 +08:00
@xiaofami 最后一张图,“公钥”是 Windows “Routeros”接口所显示的“公钥”、“允许 IP”最后一位是 3
xqzr
2024-03-18 17:32:07 +08:00
另外,可以在 “wireguard1” 接口 RA 宣告,ISP 的前缀
cndns
2024-03-18 18:25:15 +08:00
直接分配 ipv6 公网地址吗?
keyfunc
2024-03-18 18:35:34 +08:00
@xqzr 这个怎么做?我通过 Wireguard 连接进来的设备,ipv6 出口 ip 都只有一个
xqzr
2024-03-18 19:25:06 +08:00
@keyfunc 和 LAN 接口一样
keyfunc
2024-03-18 20:06:51 +08:00
```
/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
2024-03-18 20:18:51 +08:00
@keyfunc 对 wg 接口,执行第 2 条命令
xqzr
2024-03-18 20:27:52 +08:00
wg 接口在 br-lan0 里吧...
”允许 IP“包含 fe80::/10,ff02::1
ranaanna
2024-03-18 20:32:48 +08:00
首先是这个问题,可能是出在没有搞清楚 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
2024-03-18 22:28:25 +08:00
@xiaofami 路由器上面:wg 配置+防火墙 nat+路由,peer 端:wg 配置(因为你 peer 端没有 ipv6 ,所以应该::/0 )
keyfunc
2024-03-19 00:15:56 +08:00
@xqzr 网桥里好像不能添加 wireguard 的接口

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

好像还是没有效果

我有多个 peer ,通过 testipv6 检查时显示的 外网 ipv6 都是 添加给 wireguard1 接口的地址,都是同一个地址。
xqzr
2024-03-19 02:38:47 +08:00
@keyfunc 可能缺少”Advertise“
另外,主机是 Linux 的话,也许需要开启内核的 accept_ra 功能(sysctl net.ipv6.conf.wg.accept_ra)
terrancesiu
2024-03-19 09:27:43 +08:00
@xiaofami 你需要参考下 13 楼
@ranaanna 的回复,他非常细心的讲解了原理,不是配置方面有多大问题,是你对网络地址规划上存在问题。导致 netmap 失败了。
keyfunc
2024-03-19 09:50:59 +08:00
@xqzr 这个地址开启了 Advertise ,默认是 true ,客户端是官方的 app store 下的,大佬方便加个 tg 吗,tg:daiyeqi
xiaofami
2024-03-19 10:28:15 +08:00
@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
2024-03-19 10:45:59 +08:00
@xiaofami windows 客户端有一个“拦截未经隧道的流量”的功能默认开启,关掉就正常了。关掉之后 AllowedIPs 中 ::/0 变成了 ::/1, 8000::/1

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

https://ex.noerr.eu.org/t/1024715

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

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

© 2021 V2EX