家里一条联通宽带可获得 60 长度且动态变化的 IPv6 前缀,同时具备公网 IPv4 地址。借助 DDNS 和端口转发,我在只支持 IPv4 的单位局域网中通过 wireguard 可以连回家中。现在我想让单位电脑这个 peer 获取到 IPv6 地址以访问 IPv6 站点,,应当怎么实现呢?
家里一条联通宽带可获得 60 长度且动态变化的 IPv6 前缀,同时具备公网 IPv4 地址。借助 DDNS 和端口转发,我在只支持 IPv4 的单位局域网中通过 wireguard 可以连回家中。现在我想让单位电脑这个 peer 获取到 IPv6 地址以访问 IPv6 站点,,应当怎么实现呢?
1
maybeonly Mar 18, 2024 分配 fd 开头的私网 v6 然后做 nat/snpt
|
2
terrancesiu Mar 18, 2024 |
3
xiaofami OP @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 |
4
rulagiti Mar 18, 2024 客户端和服务器都配置 ipv6 私有地址方法同 ipv4 ,然后服务器配置 nat6 。
|
6
xqzr Mar 18, 2024 另外,可以在 “wireguard1” 接口 RA 宣告,ISP 的前缀
|
7
cndns Mar 18, 2024 via Android
直接分配 ipv6 公网地址吗?
|
10
keyfunc Mar 18, 2024
```
/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 给的前缀。 |
12
xqzr Mar 18, 2024
wg 接口在 br-lan0 里吧...
”允许 IP“包含 fe80::/10,ff02::1 |
13
ranaanna Mar 18, 2024 首先是这个问题,可能是出在没有搞清楚 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 哦 |
14
lovelylain Mar 18, 2024 via Android @xiaofami 路由器上面:wg 配置+防火墙 nat+路由,peer 端:wg 配置(因为你 peer 端没有 ipv6 ,所以应该::/0 )
|
15
keyfunc Mar 19, 2024
@xqzr 网桥里好像不能添加 wireguard 的接口
/ipv6 address add address=::XXXX eui-64=yes from-pool=ipv6-pool-gua interface=wireguard1 好像还是没有效果 我有多个 peer ,通过 testipv6 检查时显示的 外网 ipv6 都是 添加给 wireguard1 接口的地址,都是同一个地址。 |
16
xqzr Mar 19, 2024
@keyfunc 可能缺少”Advertise“
另外,主机是 Linux 的话,也许需要开启内核的 accept_ra 功能(sysctl net.ipv6.conf.wg.accept_ra) |
17
terrancesiu Mar 19, 2024 |
18
keyfunc Mar 19, 2024
@xqzr 这个地址开启了 Advertise ,默认是 true ,客户端是官方的 app store 下的,大佬方便加个 tg 吗,tg:daiyeqi
|
19
xiaofami OP @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 就完全没问题,行为符合预期。 |
20
xiaofami OP @xiaofami windows 客户端有一个“拦截未经隧道的流量”的功能默认开启,关掉就正常了。关掉之后 AllowedIPs 中 ::/0 变成了 ::/1, 8000::/1
|
21
keyfunc Mar 19, 2024
@xiaofami wireguard 客户端设备 访问 testipv6.com 是网桥配置的 ipv6 吗?
|
22
supemaomao Mar 19, 2024 via Android
@xiaofami 在 peer 上 v6 的地址是手动分配,还是通过 ros 下发呢? ipv6-route 的路由是将 peer 的网段路由到 wg 的接口吗?还请 op 指点一下。
|
23
lovelylain Mar 19, 2024 via Android
@supemaomao 建议配置 fd 网段的固定地址,然后在路由器上 ipv6 nat ,省事,ra 下发到 wg peer 根本找不到教程。
|
24
supemaomao Mar 19, 2024 via Android
@lovelylain 明白了,就和 v4 一样,ros 和 peer 都配置 fd 的固定网址,然后路由上配置 ipv6 的 nat ,是这个意思吗?不过这个 ipv6 nat 要怎么弄,之前在 ros 的论坛尝试搜,没找到结果,电信 PPPoE 能拿到 v6 ,但是我想实现 内网设备都用 v4 ,ros 作为网关有 v4 v6 的出口,内网设备也能访问 v6 网站一样 ,要怎么做呢?能实现吗
|
25
xiaofami OP @keyfunc 是网桥配置的,所有 peer 共享一个出口 IPv6 地址。
@supemaomao 我这个配置说白了就是用 ipv4 的方式配置 ipv6 ,routeros 配置详细过程供参考: 1. IPv6 - Addresses 菜单,添加 fd00:172:31:1::100/128 ,interface 为 wireguard1 ; 2. IPv6 - Routes 菜单,添加一条记录。Dst.Address 填 fd00:172:31:1::/64 ,Gateway 填 wireguard1 ; 3. IPv6 - Firewall 菜单,NAT 表中新建一条规则。Chain:srcnat ,Src.Address:fd00:172:31:1::/64 ,Action:masquerade ; 4. 进入 Wireguard Peer 菜单配置 peer 。Allowed Address 中新建一行,填写 fd00:172:31:1::103/128 ,其余不变; 最后客户端把 fd00:172:31:1::103/128 加入配置文件,AllowedIPs 追加一条 ::/0 就完事了 |
27
sokonboy Jul 11, 2024
请问楼主解决了吗?我也有同样的需求,之前搜到你的这个贴子,不过我的使用环境是在家里和公司用 openwrt 通过 wireguard 组的网,目前已顺利将家里运营商的 ipv6 分配到没有 ipv6 的公司网络。没有做 NAT ,是直接分配运营商 ipv6 。
|