web-dev-qa-db-ja.com

カーネル3.10のIPv6ネイバー探索/ルーティングが失敗する

愚かな間違いが原因のすべてです。Update5をお読みください


Linuxルーター(LXC、3.10.0-123.el7.x86_64)をIPv6でセットアップしようとしています。

プロバイダーはHetznerで、/ 56と/ 64の2つのサブネットを取得しました。彼らは私のLLアドレスへのルーティングをセットアップし、私のデフォルトゲートウェイはfe80 :: 1です。

Sysctl.confでipv6およびipv4転送を有効にしました。

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

そして、すべてを受け入れるようにIPTablesを構成しました。

ICMPv6はIPv6でのルーティングに使用されるメインユーティリティであるため、ブロックされません;-)。 -A FORWARD -j ACCEPTも追加しました。

/ 56サブネットの2番目(:: 2)のIPをeth1に、/ 64の2番目(:: 2)をeth0に設定しました。

eth0はアップリンクインターフェイスですeth1はLANインターフェイスです


それでは、主な問題に移りましょう。

/ 56からのipv6アドレスを持つ内部クライアントは外部にpingできませんが、パケットと応答はルーターまで正しくルーティングされます。ルーターはヒントなしでパケットをドロップするだけです。

例えばping6 ipv6.google.comがタイムアウトになる

しかし、ルータのアップリンクで私は得ます:

20:43:13.350932 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 1, length 64
20:43:13.355143 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 1, length 64
20:43:14.350572 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 2, length 64
20:43:14.354609 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 2, length 64
20:43:15.350630 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 3, length 64
20:43:15.355072 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 3, length 64
20:43:16.350656 IP6 client-ipv6-ip > fra07s64-in-x00.1e100.net: ICMP6, echo request, seq 4, length 64
20:43:16.354748 IP6 fra07s64-in-x00.1e100.net > client-ipv6-ip: ICMP6, echo reply, seq 4, length 64

クライアントでは、エコー要求のみが表示されます。

何が問題でしょうか?ルーターが送信されたものを受け入れるように、追加の設定はありますか?

これまでは、NATのみを使用しており、Linuxボックスで完全なルーティングを実行することはありませんでした。

ポインタをありがとう、それは設定する単純なsysctlパラメータであることを願っています...


アップデート1

/ 56サブネットを「subnet-2」に、/ 64サブネットを「subnet-1」に置き換えました。

ip -6 a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 
    inet6 ::1/128 scope Host 
       valid_lft forever preferred_lft forever
61: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 subnet-1::2/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::216:2eff:fe01:1/64 scope link 
       valid_lft forever preferred_lft forever
63: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 subnet-2::2/56 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe01:1/64 scope link 
       valid_lft forever preferred_lft forever

ip -6 r

unreachable ::/96 dev lo  metric 1024  error -101
unreachable ::ffff:0.0.0.0/96 dev lo  metric 1024  error -101
unreachable 2002:a00::/24 dev lo  metric 1024  error -101
unreachable 2002:7f00::/24 dev lo  metric 1024  error -101
unreachable 2002:a9fe::/32 dev lo  metric 1024  error -101
unreachable 2002:ac10::/28 dev lo  metric 1024  error -101
unreachable 2002:c0a8::/32 dev lo  metric 1024  error -101
unreachable 2002:e000::/19 dev lo  metric 1024  error -101
subnet-1::/64 dev eth0  proto kernel  metric 256 
subnet-2::/56 dev eth1  proto kernel  metric 256 
unreachable 3ffe:ffff::/32 dev lo  metric 1024  error -101
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
default via fe80::1 dev eth0  metric 1024 

システムはup2dateですが、カーネルを除いて(ロードされていないなど)、再起動が必要であり、現在のカーネルでは問題が発生していません。しかし、それが3.10.0-123.13.2.el7の既知の問題である場合は、再起動して3.10.0-229.14.1.el7にアップグレードできます。


アップデート2

tcpdump -i eth0 ip6

着信パケットを示します

ファイアウォールルールを追加しました。

*mangle
-A PREROUTING -j NFLOG

/ var/log/messagesにログを記録しますが、そこには何も記録されません!


アップデート3

    Bridge "br0"
        Port "router.eth0"
            Interface "router.eth0"
        Port "br0"
            Interface "br0"
                type: internal
        Port "eth0"
            Interface "eth0"
    Bridge "br1"
        Port "db01.eth0"
            Interface "db01.eth0"
        Port "mail01.eth0"
            Interface "mail01.eth0"
        Port "br1"
            Interface "br1"
                type: internal
        Port "team1"
            Interface "eth3"
            Interface "eth2"
        Port "router.eth1"
            Interface "router.eth1"

アップデート4

私はめちゃくちゃ、インターフェイスに間違ったMacがありました

したがって、パケットは受け入れられて転送されますが、応答はデフォルトゲートウェイに送信されません。

ルーター:

22:09:22.638405 IP6 ping_ip > client_ip: ICMP6, echo request, seq 243, length 64
22:09:22.754936 IP6 router-ll > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
22:09:22.757001 IP6 2a01:4f8::a:b:10 > router-ll: ICMP6, neighbor advertisement, tgt is fe80::1, length 32
22:09:22.757044 IP6 router-ll > ff02::1:ff00:2: ICMP6, neighbor solicitation, who has router-ll, length 32
22:09:23.639651 IP6 ping_ip > client_ip: ICMP6, echo request, seq 244, length 64
22:09:23.756969 IP6 router-ll > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
22:09:23.759007 IP6 router-ll > ff02::1:ff00:2: ICMP6, neighbor solicitation, who has router-ll, length 32
22:09:23.759240 IP6 2a01:4f8::a:b:10 > router-ll: ICMP6, neighbor advertisement, tgt is fe80::1, length 32
22:09:24.640677 IP6 ping_ip > client_ip: ICMP6, echo request, seq 245, length 64

クライアント:

22:11:41.640978 IP6 ping_ip > client_ip: ICMP6, echo request, seq 382, length 64
22:11:41.640998 IP6 client_ip > ping_ip: ICMP6, echo reply, seq 382, length 64
22:11:42.642993 IP6 ping_ip > client_ip: ICMP6, echo request, seq 383, length 64
22:11:42.643013 IP6 client_ip > ping_ip: ICMP6, echo reply, seq 383, length 64

ip -6隣接:

fe80::216:3eff:fe01:1 dev eth1 lladdr 00:16:3e:01:00:01 router STALE
subnet-2::1:1 dev eth0  FAILED
fe80::216:3eff:fe15:1 dev eth1 lladdr 00:16:3e:15:00:01 DELAY
fe80::216:3eff:fe15:c dev eth1 lladdr 00:16:3e:15:00:0c STALE
fe80::1 dev eth0  FAILED
subnet-2::1:1 dev eth1 lladdr 00:16:3e:15:00:01 REACHABLE
fe80::216:2eff:fe01:1 dev eth0  INCOMPLETE
subnet-2::1:12 dev eth1 lladdr 00:16:3e:15:00:0c STALE
subnet-1::2 dev eth0  FAILED

1:1の失敗したエントリはここにあります。以前からpingの問題をデバッグするためにeth0にそのアドレスがあったためです...


アップデート5

したがって、Macの変更で発生するので、LLアドレスは変更しませんでした。これらの2つのアドレスが100%リンクされていることは知りませんでした。

主な問題は、古いルーターが死んで、そこからLLアドレスをコピーしても、対応するMacが変更されなかった->動作しなかった。

次に... LLを元に戻し(これは間違いでした)、Macを変更しました(数時間離れた2つの別々のステップで)。

他の誰にとっても、L2 MACとIPv6 LLアドレスは対応している必要があり、ルーターが送信しているものと一致する必要があります。

tcpdump -i eth0 ip6 -enを使用してデバッグするには、macアドレスとllアドレスを確認し、それらをインターフェイスと比較します。それらのいずれか、およびヘッツナーでルーティングアドレスとして構成されているアドレスが一致しない場合、何も機能しません。

繰り返しになりますが、それを読んだ人には申し訳ありませんが、以前は別のルーターにあったことを説明するのに何とか逃してしまい、最後のルーターが死んでしまったため、このルーターをインストールしました。明らかな修正...

5

パケットが見つからないという奇妙なルーティングの問題が発生している場合は、次の手順に従ってください。

ip lとMACアドレスを書き留めます

tcpdump -en -i eth0 ip6(または対応するインターフェース)とそれらを比較します(すべてが一致する場合)。

ip -6 aリンクローカルアドレス(スコープローカル)とMacアドレスを比較します(ここに計算機があります: http://ben.akrin.com/?p=1347 、いくつかあります)

それでも動作しない場合、問題はiptablesにあると思います。可能な限りログを使用してください:)

3