wireguard 支持 IPv6 slaac 吗?

2023-06-07 22:39:14 +08:00
 3dxfood

wireguard 支持 IPv6 slaac 吗? 我知道 static ipv6 是可以,但是出局就得 nat6 了;dhcpv6 pd 拿到的前缀又会变,static 该怎么写?要是支持 slaac ,配置文件里 address 应该怎么写?

2919 次点击
所在节点    宽带症候群
28 条回复
raysonx
2023-06-08 21:49:58 +08:00
@zbinlin RFC 4443: https://www.rfc-editor.org/rfc/rfc4443#section-2.1
Every ICMPv6 message is preceded by an IPv6 header and zero or more
IPv6 extension headers.

ICMPv6 消息外层是 IPv6 头,所以三层隧道上是可以路 ICMPv6 的。ping 也是基于 ICMPv6 ,二层不能跨路由器,而你可以 Ping 全球任何一个地址。
terrancesiu
2023-06-08 21:56:13 +08:00
没有现成的实现,cloudflare 大规模使用 wg 还是基于 api 的方式
raysonx
2023-06-08 22:00:07 +08:00
一个典型的 SLAAC 分配地址的过程是:
1. 客户端向 ff02::2 组播地址发送 ICMP6 router solicitation 。所有支持 IPv6 的路由器都会监听这个组播地址。
2. 路由器向 ff02::1 组播地址发送 ICMP6, router advertisement ,包含前缀等信息。所有支持 IPv6 的任何设备都会监听这个组播地址。
3. 客户端拿前到前缀后,自己拼接一个 64 位的后缀,然后向一个特殊的组播地址(根据后缀利用哈希算法计算得出,自己也会监听这个地址)发送多次 ICMP6 neighbor solicitation 来检测地址冲突。
4. 如果没有其他设备回应,则表示这地地址没有被使用,则客户端使用这个地址。
ayasakinagi
2023-06-09 02:21:31 +08:00
不支持, wireguard 是 l3, SLAAC 需要 l2 通信, 可以基于 wireguard 建立 vxlan 隧道, 这个可以 l2 通信
tavimori
2023-06-09 12:49:51 +08:00
@raysonx 是的,从协议上看,主要是现在 wg 的内部路由不支持组播特性。如果是只有一个客户端和一个服务端的话,貌似只要把组播地址加到 AllowedIP 里好像还是有可能实现的。不过不知道现成的 SLAAC 协议服务支不支持 tun device 。
nullizer
2023-06-12 17:08:42 +08:00
可以使用 NPTv6 自动转换前缀,wireguard 里配个静态地址就好了。这些功能在 nftables/iptables 里又叫 netmap 。
https://stackoverflow.com/questions/53683498/how-to-do-netmap-by-nftables
wolonggl
2023-06-23 23:53:41 +08:00
gretap over wg
dalaoshu25
70 天前
在 RouterOS 上用 netmap 搞定了,本质还是静态地址,但是从外面可以直接访问。其实还挺简单的。

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

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

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

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

© 2021 V2EX