linux bug bug?


9

ฉันดิ้นรนกับปัญหาที่ไม่สามารถทำซ้ำได้ง่ายนี้มานานแล้ว ฉันกำลังใช้เคอร์เนล linux v3.1.0 และบางครั้งการกำหนดเส้นทางไปยังที่อยู่ IP บางแห่งไม่ทำงาน สิ่งที่น่าจะเกิดขึ้นคือแทนที่จะส่งแพ็กเก็ตไปที่เกตเวย์เคอร์เนลจะปฏิบัติต่อที่อยู่ปลายทางเป็นท้องถิ่นและพยายามรับที่อยู่ MAC ของตนผ่าน ARP

ตัวอย่างเช่นตอนนี้ที่อยู่ 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

เมื่อพยายาม ping 172.16.0.59 ฉันเห็นได้ใน tcpdump ว่า ARP req ถูกส่ง:

# 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 req ได้ที่ปลายอีกด้านหนึ่ง แต่นั่นเป็นวิธีที่ควรใช้งาน ปัญหาหลักคือต้องไม่ส่ง ARP req ตั้งแต่แรก
  • ปัญหายังคงมีอยู่แม้ว่าฉันจะเพิ่มเส้นทางที่ชัดเจนด้วยคำสั่ง "เส้นทางเพิ่ม -host 172.16.0.59 gw 172.16.1.254 dev eth0"

ฉันคิดว่านี่เป็นพฤติกรรมเริ่มต้นบางอย่างมาดูตาราง ARP ด้วยหรือไม่ ตาราง arp ของอีกฝั่งอาจมีประโยชน์ที่นี่
SpacemanSpiff

คุณจะแก้ไขได้อย่างไร การกำหนดเส้นทางเฉพาะโฮสต์ทำให้การทำงานนั้นใช้งานได้อีกหรือไม่ ฉันสงสัยว่าคุณกำลังรับการเปลี่ยนเส้นทาง ICMP ที่ทำให้โฮสต์คิดว่าปลายทางนั้นอยู่ในพื้นที่หรือไม่
พอล

ดูเหมือนว่าคำตอบ arp จะไม่กลับมา คุณสามารถ tcpdump บนโฮสต์ 172.16.0.59 ได้หรือไม่? นี่เป็นแขก vm หรือไม่? ตรวจสอบปริมาณการใช้เครือข่ายบนโฮสต์ด้วย
AndreasM

คุณช่วยโพสต์ผลลัพธ์ของได้ifconfig -aไหม คุณมีอินเตอร์เฟส / IP อื่น ๆ ที่กำหนดให้กับโฮสต์นี้หรือไม่
เลด

ฉันได้อัปเดตคำถามพร้อมคำตอบแล้ว
BalázsPozsár

คำตอบ:


7

แท้จริงแล้วเป็นข้อบกพร่องของเคอร์เนล linux ซึ่งอาจเป็นรุ่น 2.6.39 ฉันได้โพสต์คำถามไปยังรายการ lkml และ netdev (ดูกระทู้ที่https://lkml.org/lkml/2011/11/18/191 ) และได้มีการพูดคุยกันในกระทู้ netdev อื่นที่http: // www .spinics.net / รายการ / netdev / msg179687.html

โซลูชันปัจจุบันคือรีบูตหรือเพื่อล้างเส้นทางทั้งหมดและรอ 10 นาทีเพื่อให้การเปลี่ยนเส้นทาง icmp หมดอายุ เพื่อป้องกันไม่ให้มันเกิดขึ้นอีกครั้ง

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

จะช่วยให้


น่าเสียดายที่ดังกล่าวข้างต้นดูเหมือนจะไม่ช่วยเหลือ ..
sivann

ลองทำเพื่อส่วนต่อประสานทั้งหมด: find / proc / sys / net -name accept_redirects | ในขณะที่อ่าน x; ทำ echo -n 0> $ x; เสร็จแล้วหรือบางทีคุณมีข้อผิดพลาดอื่น ๆ
BalázsPozsár

ขอบคุณฉันได้เปิดใช้งานแล้วสำหรับอินเทอร์เฟซทั้งหมด IP มาจาก IPSEC tunnels (เครื่องนี้มี hundrends อยู่) และมี 5-10 รายการ (172.x) ที่แสดงรายการในตาราง arp ในอินเตอร์เฟส eth0 ที่แสดงรายการด้วย HWaddress (ไม่สมบูรณ์) และ HWtype ที่ขาดหายไป สิ่งเหล่านั้นดูเหมือนจะหมดอายุและสิ่งใหม่ ๆ เข้ามาแทนที่ แต่บางครั้งจำเป็นต้องรีบูต
sivann

-1

172.16.XX ซับเน็ตมาสก์ที่เป็นค่าเริ่มต้นคือ 255.255.0.0 คุณได้กำหนดค่าใหม่เป็น 255.255.255.0 ดังนั้นสิ่งที่โฮสต์ 172.16.0.x และ 172.16.1.x อยู่ในเครือข่ายย่อยที่แตกต่างกัน ดังนั้นมันจะลองและรูตผ่านเกตเวย์เริ่มต้น

การเปลี่ยน subnet mask เป็น 255.255.0.0 จะช่วยแก้ปัญหาได้

คุณช่วยจัดทำแผนภาพ หากคุณไม่สามารถวาดเครือข่ายมันไม่สามารถแก้ไขได้ (สุภาษิตวิศวกรเครือข่ายเก่า ... โดยฉัน!)

ไชโย


คุณต้องการแนะนำแอพพลิเคชั่นเว็บหรือเดสก์ท็อปน้ำหนักเบาสำหรับการวาดแผนภาพเครือข่าย
Belmin Fernandez

มันไม่เกี่ยวอะไรกับสิ่งที่ "default" netmask มักจะเป็น อย่างไรก็ตามดูคำตอบของฉันด้านบน
BalázsPozsár

ขอบคุณสำหรับการทำเครื่องหมายลง ดังนั้นทำไมคุณคิดว่าเราเตอร์กำลังสร้างการเปลี่ยนเส้นทาง icmp
Unix Janitor

เราเตอร์กำลังสร้างการเปลี่ยนเส้นทางเพราะโฮสต์ควรใช้เกตเวย์ที่แตกต่างกัน ฉันคิดว่าคุณเข้าใจปัญหาเป็นข้อผิดพลาด เว้นแต่คุณต้องการให้การศึกษาแก่ฉันเป็นอย่างอื่น
The Unix Janitor

โปรดอ่านหัวข้อที่เชื่อมโยงในคำตอบที่ยอมรับ ปัญหาคือข้อมูลการกำหนดเส้นทางเหล่านี้ไม่ได้ถูกทิ้งแม้ว่าพวกเขาควรจะเป็น ไม่มีปัญหากับเราเตอร์ / เกตเวย์
BalázsPozsár
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.