Linuxルーティングバグ?


9

しばらくの間、私はこの簡単に再現できない問題に苦労してきました。Linuxカーネルv3.1.0を使用していますが、いくつかのIPアドレスへのルーティングが機能しないことがあります。カーネルがパケットをゲートウェイに送信するのではなく、宛先アドレスをローカルとして扱い、ARPを介してMACアドレスを取得しようとしているようです。

たとえば、現在のIPアドレスは172.16.1.104/24、ゲートウェイは172.16.1.254です。

# ifconfig eth0 eth0      Link encap:Ethernet  HWaddr 00:1B:63:97:FC:DC
          inet addr:172.16.1.104  Bcast:172.16.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:230772 errors:0 dropped:0 overruns:0 frame:0
          TX packets:171013 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:191879370 (182.9 Mb)  TX bytes:47173253 (44.9 Mb)
          Interrupt:17

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.1.254    0.0.0.0         UG    0      0        0 eth0
172.16.1.0      0.0.0.0         255.255.255.0   U     1      0        0 eth0

いくつかのアドレスに対してpingを実行できますが、172.16.0.59に対してはできません。

# ping -c1 172.16.1.254
PING 172.16.1.254 (172.16.1.254) 56(84) bytes of data.
64 bytes from 172.16.1.254: icmp_seq=1 ttl=64 time=0.383 ms

--- 172.16.1.254 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.383/0.383/0.383/0.000 ms
root@pozsybook:~# ping -c1 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=63 time=5.54 ms

--- 172.16.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.545/5.545/5.545/0.000 ms
root@pozsybook:~# ping -c1 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=62 time=7.92 ms

--- 172.16.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 7.925/7.925/7.925/0.000 ms
root@pozsybook:~# ping -c1 172.16.0.59
PING 172.16.0.59 (172.16.0.59) 56(84) bytes of data.
From 172.16.1.104 icmp_seq=1 Destination Host Unreachable

--- 172.16.0.59 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

172.16.0.59にpingしようとすると、tcpdumpでARP要求が送信されたことがわかります。

# tcpdump -n -i eth0|grep ARP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:25:16.671217 ARP, Request who-has 172.16.0.59 tell 172.16.1.104, length 28

/ proc / net / arpには172.16.0.59の不完全なエントリがあります。

# grep 172.16.0.59 /proc/net/arp
172.16.0.59      0x1         0x0         00:00:00:00:00:00     *        eth0

172.16.0.59に、このLANから他のコンピューターからアクセスできることに注意してください。

誰かが何が起こっているのかについて何か知っていますか?ありがとう。

更新:以下のコメントへの返信:

  • eth0とlo以外にインターフェースはありません
  • ARP要求はもう一方の端で見ることができませんが、それはそれが機能する方法です。主な問題は、ARP要求が最初から送信されるべきではないということです。
  • コマンド「route add -host 172.16.0.59 gw 1​​72.16.1.254 dev eth0」を使用して明示的なルートを追加しても、問題は解決しません

これはある種のデフォルトの動作だと思います。ARPテーブルも見てみましょう。ここでは、もう一方のarpテーブルが役立つ場合があります。
SpacemanSpiff

どのように修正しますか?ホスト固有のルートを設定すると、再び機能しますか?宛先がローカルであるとホストに思わせるICMPリダイレクトを何らかの形で取得しているのでしょうか。
ポール

arpの返信が返ってこないようです。172.16.0.59ホストでtcpdumpを実行できますか?これはvmゲストですか?ホストのネットワークトラフィックも確認してください。
AndreasM 2011年

の出力を投稿できますifconfig -aか?このホストに割り当てられている他のインターフェース/ IPはありますか?
Khaled

私は回答して質問を更新しました
バラージュPozsár

回答:


7

おそらくバージョン2.6.39以降のLinuxカーネルのバグです。質問をlkmlとnetdevのリストに投稿しました(https://lkml.org/lkml/2011/11/18/191のスレッドを参照。http:// wwwの別のnetdevスレッドで議論されました。.spinics.net / lists / netdev / msg179687.html

現在の解決策は、リブートするか、すべてのルートをフラッシュして、icmpリダイレクトの期限が切れるまで10分待つことです。それが再び起こるのを防ぐために、

echo 0 >/proc/sys/net/ipv4/conf/eth0/accept_redirects

助けます。


残念ながら、上記...助けていないようだ
sivann

すべてのインターフェースに対してそれを試してください:/ proc / sys / net -name accept_redirectsを見つけてください。do echo -n 0> $ x; 行わまたは多分あなたは、他のバグ持っている
バラージュPozsár

おかげで、私はすでにすべてのインターフェースに対してそれを有効にしていました。IPはIPSECトンネルからのものであり(このマシンにはトンネルがあり)、eth0インターフェイスのarpテーブルに常に5-10(172.x)がリストされており、(不完全な)HWアドレスがあり、HWtypeがありません。それらは有効期限が切れているようで、新しいものが代わりに使用されますが、場合によっては再起動が必要です。
sivann 2014

-1

172.16.XXのデフォルトのサブネットマスクは255.255.0.0であり、255.255.255.0に再構成しました。したがって、ホストのもの172.16.0.xと172.16.1.xは異なるサブネット上にあります。したがって、デフォルトゲートウェイを介してルーティングを試行します。

サブネットマスクを255.255.0.0に変更すると、問題が解決します。

図を提供していただけますか。ネットワークを描くことができない場合、それを修正することはできません(古いネットワークエンジニアのことわざ...私が!)。

乾杯、


ネットワーク図の描画にどのWebアプリまたは軽量のデスクトップアプリをお勧めしますか?
Belmin Fernandez

これは通常「デフォルト」のネットマスクとは何の関係もありません。とにかく、上記の私の答えを参照してください。
バラージュPozsár

値下げをありがとう。では、なぜルーターがicmpリダイレクトを生成していると思いますか。
Unix Janitor

ホストが別のゲートウェイを使用する必要があるため、ルーターはリダイレクトを生成しています。問題の理解はバグだと思います。他に教えて
ほしく

承認された回答にリンクされているスレッドをお読みください。問題は、これらのルーティング情報が破棄されなくても破棄されないことです。ルーター/ゲートウェイの問題ではありません。
バラージュPozsár
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.