我已经“绑定”了整个 IPv6 /64 - 现在如何让我的内核响应 ARP 来接受数据包?

我已经“绑定”了整个 IPv6 /64 - 现在如何让我的内核响应 ARP 来接受数据包?

我正在使用 CentOS 8 直播。我的 IP 是 2001:570:1:b86::12,我运行了这个:-

 ip -6 route add local 2001:570:1:b86::/64 dev lo

并构建并运行其中之一这些,我现在可以(本地)连接到我的服务器上的任何 18,446,744,073,709,551,615 IP 地址,并且一切正常。我还可以从远程计算机连接到现有的 2001:570:1:b86::12,并且它在互联网上也可以正常工作。

但是,我无法从远程连接到我的任何其他 IP...

$ ping6 -c 1 2001:570:1:b86:1234:2345:3456:6789
PING6(56=40+8+8 bytes) 2001:8000:1ced:6d00:f507:cb71:703f:afe1 --> 2001:570:1:b86:1234:2345:3456:6789

--- 2001:570:1:b86:1234:2345:3456:6789 ping6 statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss

看看这个,我的盒子似乎没有回复 ARP ?

# tcpdump -i eno1 -n -nn -vvv -XX proto 58
dropped privs to tcpdump
tcpdump: listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes
00:11:47.354817 IP6 (class 0xc0, hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::629c:9fff:fe86:c00 > ff02::1:ff56:6789: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2001:570:1:b86:1234:2345:3456:6789
          source link-address option (1), length 8 (1): 60:9c:9f:86:0c:00
            0x0000:  609c 9f86 0c00
        0x0000:  3333 ff56 6789 609c 9f86 0c00 86dd 6c00  33.Vg.`.......l.
        0x0010:  0000 0020 3aff fe80 0000 0000 0000 629c  ....:.........b.
        0x0020:  9fff fe86 0c00 ff02 0000 0000 0000 0000  ................
        0x0030:  0001 ff56 6789 8700 f8a7 0000 0000 2001  ...Vg...........
        0x0040:  0570 0001 0b86 1234 2345 3456 6789 0101  .p.....4#E4Vg...
        0x0050:  609c 9f86 0c00                           `.....
00:11:48.389831 IP6 (class 0xc0, hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::629c:9fff:fe86:c00 > ff02::1:ff56:6789: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2001:570:1:b86:1234:2345:3456:6789
          source link-address option (1), length 8 (1): 60:9c:9f:86:0c:00
            0x0000:  609c 9f86 0c00
        0x0000:  3333 ff56 6789 609c 9f86 0c00 86dd 6c00  33.Vg.`.......l.
        0x0010:  0000 0020 3aff fe80 0000 0000 0000 629c  ....:.........b.
        0x0020:  9fff fe86 0c00 ff02 0000 0000 0000 0000  ................
        0x0030:  0001 ff56 6789 8700 f8a7 0000 0000 2001  ...Vg...........
        0x0040:  0570 0001 0b86 1234 2345 3456 6789 0101  .p.....4#E4Vg...
        0x0050:  609c 9f86 0c00                           `.....
00:11:49.386308 IP6 (class 0xc0, hlim 255, next-header ICMPv6 (58) payload length: 32) fe80::629c:9fff:fe86:c00 > ff02::1:ff56:6789: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2001:570:1:b86:1234:2345:3456:6789
          source link-address option (1), length 8 (1): 60:9c:9f:86:0c:00
            0x0000:  609c 9f86 0c00
        0x0000:  3333 ff56 6789 609c 9f86 0c00 86dd 6c00  33.Vg.`.......l.
        0x0010:  0000 0020 3aff fe80 0000 0000 0000 629c  ....:.........b.
        0x0020:  9fff fe86 0c00 ff02 0000 0000 0000 0000  ................
        0x0030:  0001 ff56 6789 8700 f8a7 0000 0000 2001  ...Vg...........
        0x0040:  0570 0001 0b86 1234 2345 3456 6789 0101  .p.....4#E4Vg...
        0x0050:  609c 9f86 0c00                           `.....

我如何告诉内核指示路由器我的盒子是接受这些数据包的盒子?

如果这与 tproxy 有关,我确实有这个(但不知道如何在我的防火墙中使这些 ARP 正常工作)

# lsmod | grep tproxy
nf_tproxy_ipv6         16384  0

建议?

答案1

OP的方法是自 Linux 2.6.37 起可能,但需要额外的设置。

ARP 的 IPv6 等效项是新民主党(它使用 ICMPv6 多播/单播,而不是 ARP 的广播/单播专用 L2 协议)。

proxy_ndp这里的行为与代理 ARP 不完全一样(它仍然需要每个 IP 设置,我们在这里不需要)并且没有帮助。相反,一个名为的专用守护进程ndppd监听 NDP 请求(通常)代表其他系统回答可以管理这种情况。必须将其设置为在应答之前不尝试查询后端系统,因为没有这样的其他系统。

这里假设:

  • 主界面被调用eth0
  • 系统在这个 /64 中是单独的(除了可能其路由器的可选全局地址)。
  • 系统不应设置为路由器。请参阅小警告。

启用 EPEL(程序包epel-release)、安装ndppd并使用与以下内容类似的配置/etc/ndppd.conf

proxy eth0 {
    router no
    rule 2001:570:1:b86::/64 {
        static
    }
}

static使守护进程立即回答,而不查询任何后端系统,这是在这种情况下必须做的,因为所有地址都属于(或者更准确地说,所有查询都应该到达)主机。

注意事项:

  • ndppd由于网络掩码太大,启动时会生成警告。

    当系统的路由器未明确设置为通过 2001:570:1:b86::12 或(更好)通过系统eth0接口上的链路本地地址路由此 /64 块时,这一点很重要。

    如果在没有正确设置路由器的情况下对块进行远程网络扫描,则该路由器将为该 /64 扫描中看到的每个新地址分配一个 NDP 条目。小型(家用)路由器的设计不够稳健,不能足够快地清除旧条目,可能无法很好地应对这种情况,并会出现内存不足/CPU 使用率过高的情况(即:拒绝服务)。

  • 由于实际主机的 IPv6 地址位于 /64 之中,因此查询该地址将引出两个 NDP 答案:一个由内核回答,另一个由ndppd.如果系统实际上是路由器,这可能会导致间歇性路由问题。在这种情况下,router yes可以考虑一下。ndppd的配置似乎没有子网覆盖包括该子网的更大网络,就像路由表中那样。

相关内容