V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaofami
V2EX  ›  宽带症候群

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

  •  
  •   xiaofami · 248 天前 · 3473 次点击
    这是一个创建于 248 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    29 条回复    2024-07-12 10:28:37 +08:00
    maybeonly
        1
    maybeonly  
       248 天前   ❤️ 2
    分配 fd 开头的私网 v6 然后做 nat/snpt
    terrancesiu
        2
    terrancesiu  
       248 天前   ❤️ 1

    使用 routeros 的 netmap 方式
    自动翻译 ipv6 地址,还能走策略路由
    xiaofami
        3
    xiaofami  
    OP
       248 天前
    @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
        4
    rulagiti  
       248 天前   ❤️ 1
    客户端和服务器都配置 ipv6 私有地址方法同 ipv4 ,然后服务器配置 nat6 。
    xqzr
        5
    xqzr  
       248 天前   ❤️ 1
    @xiaofami 最后一张图,“公钥”是 Windows “Routeros”接口所显示的“公钥”、“允许 IP”最后一位是 3
    xqzr
        6
    xqzr  
       248 天前   ❤️ 1
    另外,可以在 “wireguard1” 接口 RA 宣告,ISP 的前缀
    cndns
        7
    cndns  
       248 天前 via Android
    直接分配 ipv6 公网地址吗?
    keyfunc
        8
    keyfunc  
       248 天前
    @xqzr 这个怎么做?我通过 Wireguard 连接进来的设备,ipv6 出口 ip 都只有一个
    xqzr
        9
    xqzr  
       248 天前
    @keyfunc 和 LAN 接口一样
    keyfunc
        10
    keyfunc  
       248 天前
    ```
    /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
        11
    xqzr  
       248 天前
    @keyfunc 对 wg 接口,执行第 2 条命令
    xqzr
        12
    xqzr  
       248 天前
    wg 接口在 br-lan0 里吧...
    ”允许 IP“包含 fe80::/10,ff02::1
    ranaanna
        13
    ranaanna  
       248 天前   ❤️ 1
    首先是这个问题,可能是出在没有搞清楚 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
        14
    lovelylain  
       248 天前 via Android   ❤️ 1
    @xiaofami 路由器上面:wg 配置+防火墙 nat+路由,peer 端:wg 配置(因为你 peer 端没有 ipv6 ,所以应该::/0 )
    keyfunc
        15
    keyfunc  
       248 天前
    @xqzr 网桥里好像不能添加 wireguard 的接口

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

    好像还是没有效果

    我有多个 peer ,通过 testipv6 检查时显示的 外网 ipv6 都是 添加给 wireguard1 接口的地址,都是同一个地址。
    xqzr
        16
    xqzr  
       247 天前
    @keyfunc 可能缺少”Advertise“
    另外,主机是 Linux 的话,也许需要开启内核的 accept_ra 功能(sysctl net.ipv6.conf.wg.accept_ra)
    terrancesiu
        17
    terrancesiu  
       247 天前   ❤️ 1
    @xiaofami 你需要参考下 13 楼
    @ranaanna 的回复,他非常细心的讲解了原理,不是配置方面有多大问题,是你对网络地址规划上存在问题。导致 netmap 失败了。
    keyfunc
        18
    keyfunc  
       247 天前
    @xqzr 这个地址开启了 Advertise ,默认是 true ,客户端是官方的 app store 下的,大佬方便加个 tg 吗,tg:daiyeqi
    xiaofami
        19
    xiaofami  
    OP
       247 天前
    @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
        20
    xiaofami  
    OP
       247 天前
    @xiaofami windows 客户端有一个“拦截未经隧道的流量”的功能默认开启,关掉就正常了。关掉之后 AllowedIPs 中 ::/0 变成了 ::/1, 8000::/1
    keyfunc
        21
    keyfunc  
       247 天前
    @xiaofami wireguard 客户端设备 访问 testipv6.com 是网桥配置的 ipv6 吗?
    supemaomao
        22
    supemaomao  
       247 天前 via Android
    @xiaofami 在 peer 上 v6 的地址是手动分配,还是通过 ros 下发呢? ipv6-route 的路由是将 peer 的网段路由到 wg 的接口吗?还请 op 指点一下。
    lovelylain
        23
    lovelylain  
       247 天前 via Android
    @supemaomao 建议配置 fd 网段的固定地址,然后在路由器上 ipv6 nat ,省事,ra 下发到 wg peer 根本找不到教程。
    supemaomao
        24
    supemaomao  
       247 天前 via Android
    @lovelylain 明白了,就和 v4 一样,ros 和 peer 都配置 fd 的固定网址,然后路由上配置 ipv6 的 nat ,是这个意思吗?不过这个 ipv6 nat 要怎么弄,之前在 ros 的论坛尝试搜,没找到结果,电信 PPPoE 能拿到 v6 ,但是我想实现 内网设备都用 v4 ,ros 作为网关有 v4 v6 的出口,内网设备也能访问 v6 网站一样 ,要怎么做呢?能实现吗
    xiaofami
        25
    xiaofami  
    OP
       247 天前
    @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 就完事了
    keyfunc
        26
    keyfunc  
       247 天前
    @xiaofami 你能 ping 通 内网 fd80 的 IP 吗?我设置好发现 ping 不通
    sokonboy
        27
    sokonboy  
       133 天前
    请问楼主解决了吗?我也有同样的需求,之前搜到你的这个贴子,不过我的使用环境是在家里和公司用 openwrt 通过 wireguard 组的网,目前已顺利将家里运营商的 ipv6 分配到没有 ipv6 的公司网络。没有做 NAT ,是直接分配运营商 ipv6 。
    xiaofami
        28
    xiaofami  
    OP
       133 天前 via Android
    @sokonboy 我是用 nat 方式解决的
    sokonboy
        29
    sokonboy  
       132 天前
    @xiaofami 谢谢,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1737 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:43 · PVG 00:43 · LAX 08:43 · JFK 11:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.