IPv6 路由公共到子网

IPv6 路由公共到子网

从我的供应商到客户端的 Linux/Debian IPV6 路由不起作用。
IPV4 NAT/路由可以使用iptables和可靠地工作dnsmasq,但是,即使在 IPv6 上启用转发,我也无法使其工作。
RADVD 正在发布新网络,但是我无法访问任何公共 IPv6 地址。

简图

                                        SW
                                         |    +---------+
                                         +--->| client  |
             PUBLIC              PRIVATE |    +---------+
                                         |
    ~/-(PR)-+       +---(ER)---+         | C0 +--(CL)---+
     public |P0  E0 | extender | E1      +--->| client  |
     vendor |<----->|  router  |<------->|    +---------+
            |       +----------+         |
 ~/---------+                            |    +---------+
                                         +--->| client  |
                                         |    +---------+

 Where:
    PR ISP Public router
       P0 Public network interface
    ER extender router Debian based, trying to configure
       E0 Public network interface
       E1 Private network interface
    CL Test Client
       C0 Private network interface

使用radvdumpER 显示公共路由(编辑地址)

    ...
    route 2600:..:5b10::/60
    {
            AdvRoutePreference high;
            AdvRouteLifetime 1209600;
    }; # End of route definition

在 ER 上,radvd我在 E1 (2600:..:5b11) 上发布一个新的 /64 网络,
CL 收到发布的网络并使用 2600:..:5b11 网络上的全局地址配置自身。
ER 可以 ping6 并连接到:ipv6.google.com、P0、E0、E1 和 C0
CL 可以 ping6 并连接到:E0 和 E1,但 .. 不能 .. P0(也不是任何公共地址)

在ER->E1上tcpdump显示ER的周期性路由器通告。
当我在 CL 上 ping 公共地址时,这是 ER-E1 上的捕获:

fe80::..:d477 is ER-E1
fe80::..:dff6 and 2600:..:5b11:..:f48 are CL-C0
fe80::..:f380 is PR-p0
2607:f8b0:4002:c0c::8a is ipv6.google.com

IP6 fe80::..:d477 > ff02::1: ICMP6, router advertisement, length 56
IP6 2600:..:5b11:..:f48 > 2607:f8b0:4002:c0c::8a: ICMP6, echo request, seq 1, length 64
IP6 fe80::..:dff6 > fe80::..:d477: ICMP6, neighbor solicitation, who has fe80::..:d477, length 32
IP6 fe80::..:d477 > fe80::..:dff6: ICMP6, neighbor advertisement, tgt is fe80::..:d477, length 24
IP6 fe80::..:d477 > fe80::..:dff6: ICMP6, neighbor solicitation, who has fe80::..:dff6, length 32
IP6 fe80::..:dff6 > fe80::..:d477: ICMP6, neighbor advertisement, tgt is fe80::..:dff6, length 24
IP6 fe80::..:d477 > ff02::1: ICMP6, router advertisement, length 56

CL 上的 Ping 刚刚挂起(直到超时),没有任何消息。

在 ER->E0 tcpdump(简化)上:

IP6 2600:..:5b11:..:f48 > 2607:f8b0:4002:c0c::8a: ICMP6, echo request, seq 1, length 64
IP6 fe80::..:c446 > fe80::19d7:1db3:c381:23a: ICMP6, neighbor advertisement, tgt is fe80::..:c446, length 24
IP6 fe80::..:c446 > fe80::..:f380: ICMP6, neighbor solicitation, who has fe80::..:f380, length 32
IP6 fe80::..:f380 > fe80::..:c446: ICMP6, neighbor advertisement, tgt is fe80::..:f380, length 24
IP6 fe80::..:f380 > fe80::..:c446: ICMP6, neighbor solicitation, who has fe80::..:c446, length 32
IP6 fe80::..:c446 > fe80::..:f380: ICMP6, neighbor advertisement, tgt is fe80::..:c446, length 24

ER 路由表 (eth0=E0 eth1=E1)

2600:..:5b10::13 dev eth0 proto kernel metric 256  pref medium
2600:..:5b10::/64 dev eth0 proto kernel metric 256  expires 1209445sec pref medium
2600:..:5b10::/64 dev eth0 proto kernel metric 303  mtu 1500 pref medium
2600:..:5b11::/64 dev eth1 proto kernel metric 256  pref medium
fe80::/64 dev eth0 proto kernel metric 256  pref medium
fe80::/64 dev eth1 proto kernel metric 256  pref medium
default via fe80::..:f380 dev eth0 metric 303  mtu 1500 pref medium
default via fe80::..:f380 dev eth0 proto ra metric 1024  expires 1645sec hoplimit 64 pref medium

此时不涉及防火墙,甚至 ip6tables 也不涉及。

在 ER 上,我为所有默认设置了forwarding=1 和 proxy_ndp=1。

答案1

正如您所看到的,ping echo 请求在 E1 上到达并在 E0 上发出,因此在 ER 上,一切正常。

但是,您在 PR 上遇到了问题:当 ping echo 回复到达时,它将有一个目标地址2600:...:5b11:...:f48。然而,PR 只知道5b10/60P0 后面的子网,它不知道还有一个5b11/64可通过 E0 到达的子网。所以我的猜测(必须在接口转储上验证这一点)是 PR2600:...:5b11:...:f48在 P0 上进行邻居请求,但 ER 没有应答(因为它不拥有该地址),因此 PR 丢弃数据包。

我从未尝试过以这种方式设置包含子网的 IPv6,所以我不确定该推荐什么。我首先尝试的是在 E0 上通告5b11/64,并查看此附加信息是否使 P0 转发数据包。

编辑

我发现NDPPD,邻居发现协议代理恶魔。如果 PR 确实发送了邻居请求但没有得到答复,则在 ER 上使用 ndppd 可能会解决此问题。

我自己还没用过。

相关内容