Tại sao không có tuyến đường cho localhost trong 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

Điều này không có nghĩa là 127.0.0.0/8 được chuyển đến cổng của 172.17.42.1 chứ không phải thiết bị loopback?


Ý tôi là: Tại sao không có lộ trình lặp lại trong Ubuntu?
Balazs Rau

Tôi cho rằng các tuyến rõ ràng cho mạng loopback là từ quá khứ. Nhìn thấy câu hỏi của bạn, tôi xem một số máy chủ của chúng tôi và không có tuyến đường nào trên bảng định tuyến cho loopback. Điều đó cũng hợp lệ với Solaris 10, không phải cho Solaris 8 (vâng, chúng tôi vẫn còn một số hộp với Solaris 8).
alphamikevictor

Câu trả lời:


25

Các routelệnh được chấp nhận, và không nên được sử dụng nữa.

Cách mới là sử dụng bộ lệnh iproute, tất cả được gọi với ipmột đối tượng theo sau. Ví dụ:

$ 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 

Bây giờ, tôi nghe bạn nói, về cơ bản là cùng một thông tin! Vâng, nhưng đây không phải là toàn bộ câu chuyện. Trước khi các bảng định tuyến (có, số nhiều) đến bảng quy tắc:

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

Bảng định tuyến chúng ta đã xem xét trước đó là mainbảng định tuyến. Câu hỏi của bạn liên quan đến localbảng định tuyến, trong đó có tất cả các tuyến liên quan đến các kết nối cục bộ. Bảng này có thể được hiển thị như sau:

$ 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

(Bạn có thể viết tắt ipcác tùy chọn / tham số miễn là chúng vẫn duy nhất, do đó ip ro shgiống như ip route show.)

Ở đây bạn có thể thấy các tuyến loopback.

Bạn có thể làm tất cả những điều tuyệt vời với định tuyến dựa trên chính sách này , tôi khuyên bạn nên đọc Định tuyến chính sách với Linux của Matthew G. Marsh cho tất cả thông tin bạn cần.


1
Chỉ cần một mối quan tâm về từ ngữ của bạn: Câu hỏi của anh ấy thực sự là về định tuyến cho các địa chỉ địa phương (127.0.0.0/8). table locallà câu trả lời, nhưng không phải là câu hỏi. Đó là câu trả lời vì lưu lượng truy cập đến bất kỳ địa chỉ 127. * nào được chuyển đổi thành địa chỉ nguồn 127.0.0.1 và tôi nghĩ cũng bị buộc phải sử dụng dev lo.
Peter Cordes

1
Vì vậy, câu trả lời thực sự cho câu hỏi là "bởi vì loopback là đặc biệt và không cần một câu trả lời", là câu trả lời thực sự. Chẳng hạn, không có mục nào trong bảng định tuyến nói bất cứ điều gì về cách định tuyến tới 127.1.1.1, nhưng nó vẫn hoạt động (như bạn có thể biết từ thời gian ping). Có lẽ mã mạng đặc biệt là các địa chỉ địa phương vì lý do hiệu suất, vì ip addrkhông hiển thị lonhiều hơn 127.0.0.1địa chỉ của chính nó, nhưng nó thực sự sẽ nhận được lưu lượng truy cập cho bất kỳ ip nào trong 127 ... / 8
Peter Cordes

4
@PeterCordes Trên thực tế, dòng local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1bao gồm tuyến đến 127.1.1.1; nó có nghĩa là bất cứ điều gì bắt đầu với 127. là địa phương.
wurtel

À, ok tôi đã không hiểu mọi thứ mà một localmục trong localbảng ngụ ý. Cảm ơn.
Peter Cordes

2

Các routelệnh đã già từ 10 năm trước đây và bạn nên đi với các iproute2gói.

Khi bạn đang sử dụng ip route showcác mainbảng được hiển thị. Để hiển thị localbảng sử dụng ip route show table local.

Hy vọng nó sẽ giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.