bug routing linux?

9

Saya telah berjuang dengan masalah ini tidak mudah direproduksi sejak beberapa saat. Saya menggunakan linux kernel v3.1.0, dan kadang-kadang routing ke beberapa alamat IP tidak berfungsi. Apa yang tampaknya terjadi adalah bahwa alih-alih mengirim paket ke gateway, kernel memperlakukan alamat tujuan sebagai lokal, dan mencoba untuk mendapatkan alamat MAC-nya melalui ARP.

Misalnya, sekarang alamat IP saya saat ini adalah 172.16.1.104/24, gateway adalah 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

Saya bisa ping beberapa alamat, tetapi tidak 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

Ketika mencoba melakukan ping 172.16.0.59, saya dapat melihat di tcpdump bahwa ARP req dikirim:

# 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

dan / proc / net / arp memiliki entri yang tidak lengkap untuk 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

Harap dicatat, bahwa 172.16.0.59 dapat diakses dari LAN ini dari komputer lain.

Adakah yang tahu apa yang sedang terjadi? Terima kasih.

pembaruan: membalas komentar di bawah ini:

  • tidak ada antarmuka selain eth0 dan lo
  • ARP req tidak dapat dilihat di ujung yang lain, tetapi begitulah seharusnya bekerja. masalah utama adalah bahwa req ARP seharusnya tidak dikirim pada awalnya
  • masalah tetap ada bahkan jika saya menambahkan rute eksplisit dengan perintah "route add -host 172.16.0.59 gw 172.16.1.254 dev eth0"
Balázs Pozsár
sumber
Saya pikir ini semacam perilaku default, mari kita lihat tabel ARP juga? Tabel arp ujung yang lain mungkin berguna di sini.
SpacemanSpiff
Bagaimana Anda memperbaikinya? Apakah menempatkan rute khusus host membuatnya berfungsi lagi? Saya ingin tahu apakah Anda mendapatkan pengalihan ICMP yang membuat tuan rumah berpikir bahwa tujuannya adalah lokal.
Paul
Sepertinya balasan arp tidak kembali. Bisakah Anda tcpdump pada host 172.16.0.59? Apakah ini tamu? Periksa lalu lintas jaringan pada host juga.
AndreasM
Bisakah Anda memposting output ifconfig -a? Apakah Anda memiliki antarmuka / IP lain yang ditetapkan untuk host ini?
Khaled
saya telah memperbarui pertanyaan dengan balasan
Balázs Pozsár

Jawaban:

7

Ini memang bug kernel linux, mungkin sejak versi 2.6.39. Saya telah memposting pertanyaan ke daftar lkml dan netdev (lihat utas di https://lkml.org/lkml/2011/11/18/191 ), dan itu baru saja dibahas dalam utas netdev yang berbeda di http: // www .spinics.net / daftar / netdev / msg179687.html

Solusi saat ini adalah reboot atau untuk menyiram semua rute dan menunggu 10 menit untuk pengalihan icmp berakhir. Untuk mencegahnya terjadi lagi,

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

membantu.

Balázs Pozsár
sumber
sayangnya hal di atas sepertinya tidak membantu ..
sivann
coba lakukan untuk semua antarmuka: find / proc / sys / net -name accept_redirects | saat membaca x; lakukan echo -n 0> $ x; selesai atau mungkin Anda memiliki bug lain
Balázs Pozsár
Terima kasih, saya sudah mengaktifkannya untuk semua antarmuka. IP berasal dari terowongan IPSEC (mesin ini memiliki jumlah hundren) dan selalu ada 5-10 di antaranya (172.x) yang tercantum dalam tabel arp di antarmuka eth0 yang terdaftar dengan HWaddress (tidak lengkap), dan HWtype hilang. Tampaknya sudah kedaluwarsa, dan yang baru menggantikannya, tetapi terkadang diperlukan reboot.
sivann
-1

172.16.XX subnet mask default adalah 255.255.0.0, Anda telah mengkonfigurasi ulang ke 255.255.255.0. Jadi hal-hal host 172.16.0.x dan 172.16.1.x berada di subnet yang berbeda. dengan demikian ia akan mencoba dan ROUTE melalui gateway default.

Mengubah subnet mask Anda ke 255.255.0.0 akan menyelesaikan masalah.

Bisakah Anda memberikan diagram. Jika Anda tidak dapat menggambar jaringan, itu tidak dapat diperbaiki (pepatah insinyur jaringan tua ... oleh saya!).

Bersulang,

Unix Janitor
sumber
Apa aplikasi web atau aplikasi desktop ringan yang akan Anda rekomendasikan untuk menggambar diagram jaringan?
Belmin Fernandez
itu tidak ada hubungannya dengan apa yang biasanya "default" netmask. pokoknya, lihat jawaban saya di atas.
Balázs Pozsár
Terima kasih atas tandanya. Jadi, mengapa menurut Anda router menghasilkan pengalihan icmp.
The Unix Janitor
Router menghasilkan pengalihan, karena host harus menggunakan gateway yang berbeda. Saya pikir pemahaman Anda tentang masalahnya adalah bug. Kecuali Anda ingin mendidik saya sebaliknya
The Unix Janitor
Harap baca utas yang ditautkan dalam jawaban yang diterima. Masalahnya adalah bahwa informasi perutean ini tidak dibuang meskipun seharusnya. Ini bukan masalah dengan router / gateway.
Balázs Pozsár