IPv6への正しいルーティング

IPv6への正しいルーティング

eth0を介してルータに接続し、eth1を介してマイコンピュータにRaspberry Piを接続しています。

私はsystemd-networkdを使って私のコンピュータにIPv4をなりすますのにとてもうまくいきます。何らかの理由で、両方のデバイスで有効なグローバルIPv6アドレスを使用する必要があります。私のPiは静的に有効なグローバルIPv6アドレスで構成されており、PiはIPv6アドレスを自分のコンピュータに配布するradvdを実行しています(後でWi-Fiでも同じことをしたい)。

いくつかの手がかりに従い、過去数日間この作業を実行しようとしました(最も重要なのはIPv6 はパブリックをサブネットにルーティングします。) 私はこうして作ったものを見つけました。

  1. ローカルIPv6アドレス(fe80)を介して両方のデバイスをpingできます。
  2. My PiはIPv6を介して外部の世界に接続できます。
  3. 私のコンピュータはIPv6を介してインターネットにアクセスするだけでなく、私のPiを含むどのグローバルアドレスでもpingを実行できません。
  4. PiはコンピュータのグローバルIPv6アドレスをpingできません。要求は通過しますが無視されます(tcpdump -i eno1がpingを確認します)。
  5. 私のコンピュータのすべてのpingは私のPi(tcpdump -i eth0)にルーティングされ、それをグローバルインターネットに転送します。また、応答を受け取りますが、ネイバー要求に対してのみ無視します(tcpdump -i eth1)。
  6. 私はndppdを試してみましたが、これについてもっと学ぶ前に、Piとコンピュータが互いにpingを実行できることを確認する必要があるようです。

だから私の考えでは、要求を受け入れるためにルーティングテーブルに何かをする必要があるようですが、どうすればよいかわかりません。

関連する構成ファイルとログファイルは次のとおりです。

コンピュータ:

ip -6 route show:
::1 dev lo proto kernel metric 256 pref medium
fe80::/64 dev eno1 proto kernel metric 100 pref medium
default via fe80:...:b8 dev eno1 proto ra metric 20100 pref medium
tcpdump (filtered):
time IP6 (hlim 255, next-header ICMPv6 (58) payload length: 32) ArchPC > ff02::1:ff00:2: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has ***.****.de
          source link-address option (1), length 8 (1): 1c:1b:0d:9b:bc:ba
            0x0000:  1c1b 0d9b bcba
time IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) _gateway > ArchPC: [icmp6 sum ok] ICMP6, neighbor advertisement, length 24, tgt is _gateway, Flags [router, solicited]
time IP6 (flowlabel 0xa91bf, hlim 64, next-header ICMPv6 (58) payload length: 64) ArchPC > ***.****.de: [icmp6 sum ok] ICMP6, echo request, seq 1
time IP6 (flowlabel 0xfa9b8, hlim 255, next-header ICMPv6 (58) payload length: 88) _gateway > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 88
        hop limit 64, Flags [none], pref medium, router lifetime 1800s, reachable time 0ms, retrans timer 0ms
          prefix info option (3), length 32 (4): 2001:...::/64, Flags [onlink, auto, router], valid time 86400s, pref. time 14400s
            0x0000:  40e0 0001 5180 0000 3840 0000 0000 2001
            0x0010:  07c7 20f4 001d 0000 0000 0000 0000
          rdnss option (25), length 24 (3):  lifetime 600s, addr: ***.****.de
            0x0000:  0000 0000 0258 2001 07c7 20f4 001d 0000
            0x0010:  0000 0000 0002
          mtu option (5), length 8 (1):  1280
            0x0000:  0000 0000 0500
          source link-address option (1), length 8 (1): 00:e0:4c:82:00:b8
            0x0000:  00e0 4c82 00b8
time IP6 (hlim 1, next-header Options (0) payload length: 56) ArchPC > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 2 group record(s) [gaddr ff02:...:5bbf to_ex { }] [gaddr ff02:...:d60f to_ex { }]

PI:

ip -6 route show (I added the second one, global ip of computer to local):
::1 dev lo proto kernel metric 256 pref medium
2001:...:5bbf via fe80:...d60f dev eth1 proto ra metric 256 pref medium
2001:...::/64 dev eth0 proto ra metric 256 pref medium
fe80:...:d60f/64 dev eth1 proto kernel metric 1024 pref medium
fe80::/64 dev eth1 proto kernel metric 256 pref medium
default via 2001:...:1 dev eth0 proto ra metric 1024 pref medium
Radvd.conf:
interface eth1{
    AdvSendAdvert on;
    RDNSS IPv6 of Pi {};
    prefix 2001:...::/64
    {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
    };
    AdvSourceLLAddress on;
    AdvLinkMTU 1280;
};

追加ログが必要な場合は明記してください。 piでは、tcpdumpはほぼ同じように見えるので省略しましたが、必要に応じて追加できます。

アイデアがあれば教えてください。

ベストアンサー1

だから、間違ったパスに対する私の仮説は正しいことがわかりました。私の好みに合わせて多くの手動調整が必要でしたが、systemd-networkdとradvdのみを使用して問題を解決した方法は次のとおりです。

piの設定に以下を追加します。

pi がコンピュータ IP に対するネイバーの要求に応答するようにします。

eth0.network (Connected to the internet)

IPv6ProxyNDP=true
IPv6ProxyNDPAddress=2001:...:5bbf

Piがコンピュータのすべてのトラフィックをコンピュータのローカルipv6アドレスに転送するようにします。

eth1.network (connected to pc)

[Route]
Destination=2001:...:5bbf
Gateway=fe80:...:d60f

IPを取得したデバイスは、PiのローカルIPを介してPiのグローバルIPからのすべてのトラフィックを転送します。

radvd.conf

interface eth1
{
    AdvSendAdvert on;
    prefix 2001:...::/64
    {
        AdvOnLink on;
        AdvAutonomous on;
    };
    route 2001:...::/64{};
};

ipv6アドレスが変更されない限り、これは私にとって効果的です。手動設定ファイルなしでこれらのアドレスを変更する解決策が見つかりませんでしたが、少なくともこれと似ています。

おすすめ記事