전체 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은 다음과 같습니다.새로운 민주당(ARP의 브로드캐스트/유니캐스트 독점 L2 프로토콜이 아닌 ICMPv6 멀티캐스트/유니캐스트를 사용합니다).

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에 있으므로 해당 주소를 쿼리하면 커널과 ndppd. 이런 경우에는 router yes생각해 보세요. ndppd구성에는 라우팅 테이블에서처럼 해당 서브넷을 포함하는 대규모 네트워크를 포괄하는 서브넷이 없는 것 같습니다.

관련 정보