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

そのうちの1つをビルドして実行します。これら、今私のサーバーのすべての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構成には、ルーティングテーブルのように、そのサブネットを含む大規模ネットワークをカバーするサブネットがないようです。

関連情報