เหตุใดจึงไม่มีเส้นทางสำหรับ localhost ใน Ubuntu


12
$ sudo docker run --rm ubuntu:14.04 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.42.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

นี่ไม่ได้หมายความว่า 127.0.0.0/8 ถูกกำหนดเส้นทางไปยังเกตเวย์ของ 172.17.42.1 ไม่ใช่อุปกรณ์ลูปแบ็ค


ฉันหมายถึง: ทำไมไม่มีเส้นทางสำหรับลูปแบ็คใน Ubuntu
Balazs Rau

ฉันคิดว่าเส้นทางที่ชัดเจนสำหรับเครือข่ายลูปแบ็คมาจากอดีต เมื่อเห็นคำถามของคุณฉันจะดูที่เซิร์ฟเวอร์ของเราบางแห่งและไม่มีเส้นทางในตารางเส้นทางสำหรับลูปแบ็ค นั่นก็ใช้ได้สำหรับ Solaris 10 ไม่ใช่สำหรับ Solaris 8 (ใช่เรายังมีบางกล่องที่มี Solaris 8)
alphamikevictor

คำตอบ:


25

routeคำสั่งเลิกและไม่ควรนำมาใช้อีกต่อไป

วิธีใหม่คือการใช้ชุดคำสั่ง iproute ซึ่งถูกเรียกใช้ทั้งหมดipตามด้วยวัตถุ ตัวอย่างเช่น:

$ ip route show
default via 192.168.1.254 dev eth0 
192.168.0.0/23 dev eth0  proto kernel  scope link  src 192.168.1.27 

ตอนนี้ฉันได้ยินคุณพูดว่านี่เป็นข้อมูลเดียวกันโดยทั่วไป! ใช่ แต่นี่ไม่ใช่เรื่องราวทั้งหมด ก่อนตารางการเราต์ (ใช่พหูพจน์) มาที่ตารางกฎ:

$ ip rule show
    0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

ตารางเส้นทางที่เรามองไปก่อนหน้าคือmainตารางเส้นทาง คำถามของคุณเกี่ยวกับlocalตารางเส้นทางซึ่งมีเส้นทางทั้งหมดที่เกี่ยวข้องกับการเชื่อมต่อท้องถิ่น ตารางนี้สามารถแสดงดังต่อไปนี้:

$ ip ro sh table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.0.0 dev eth0  proto kernel  scope link  src 192.168.1.27 
local 192.168.1.27 dev eth0  proto kernel  scope host  src 192.168.1.27 
broadcast 192.168.1.255 dev eth0  proto kernel  scope link  src 192.168.1.27

(คุณสามารถย่อตัวipเลือก / พารามิเตอร์ได้ตราบใดที่ยังคงไม่ซ้ำกันดังนั้นจึงip ro shเหมือนกับip route show)

ที่นี่คุณสามารถดูเส้นทางลูปแบ็ค

คุณสามารถทำสิ่งมหัศจรรย์ทุกประเภทด้วยการกำหนดเส้นทางตามนโยบายนี้ฉันขอแนะนำให้คุณอ่านPolicy Routing with Linuxโดย Matthew G. Marsh สำหรับข้อมูลทั้งหมดที่คุณต้องการ


1
เป็นเพียงความกังวลเกี่ยวกับถ้อยคำของคุณ: คำถามของเขาเกี่ยวกับการกำหนดเส้นทางสำหรับที่อยู่ในพื้นที่ (127.0.0.0/8) table localคือคำตอบ แต่ไม่ใช่คำถาม มันเป็นคำตอบเนื่องจากปริมาณการใช้ข้อมูลไปยังที่อยู่ 127 * ใด ๆ ได้รับการแปลงเป็นแหล่งที่อยู่ของ 127.0.0.1 และฉันคิดว่ามันถูกบังคับให้ใช้dev loเช่นกัน
Peter Cordes

1
ดังนั้นคำตอบที่แท้จริงสำหรับคำถามคือ "เนื่องจากลูปแบ็คเป็นพิเศษและไม่ต้องการ" จึงเป็นคำตอบที่แท้จริง ไม่มีรายการตารางการเราต์เหล่านั้นพูดอะไรเกี่ยวกับการกำหนดเส้นทางไปยัง 127.1.1.1 ตัวอย่างเช่น แต่มันยังใช้ได้ (ตามที่คุณสามารถบอกได้จากเวลา ping) สันนิษฐานว่ารหัสเครือข่ายกรณีพิเศษที่อยู่ในท้องถิ่นเพื่อเหตุผลด้านประสิทธิภาพเนื่องจากip addrไม่แสดงloว่ามีมากกว่าเพียงแค่127.0.0.1ที่อยู่ของตัวเอง แต่จริง ๆ แล้วจะได้รับปริมาณการใช้งานสำหรับ ip ใด ๆ ใน 127 ... / 8
Peter Cordes

4
@PeterCordes ที่จริงแล้วบรรทัดlocal 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1ครอบคลุมเส้นทางไปที่ 127.1.1.1; หมายความว่าอะไรก็ตามที่เริ่มต้นด้วย 127 คือท้องถิ่น
wurtel

อ่าฉันไม่เข้าใจทุกอย่างที่localรายการในlocalตารางบอกเป็นนัย ขอบคุณ
Peter Cordes

2

routeคำสั่งอายุตั้งแต่ 10 ปีที่แล้วและคุณควรจะไปกับiproute2แพคเกจ

เมื่อคุณกำลังใช้ตารางจะปรากฏ เพื่อแสดงการใช้ตารางip route showmainlocalip route show table local

หวังว่ามันจะช่วย

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