Trong Linux, số liệu nào có tuyến đường không có số liệu?


11

Nếu bạn có (trong Linux) hai tuyến này:

default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0  proto static  metric 600

Tôi hy vọng rằng cái đầu tiên được sử dụng, nhưng đó không phải là trường hợp: cái thứ hai được sử dụng thay thế.

Nếu tôi thay đổi điều này thành:

default via 192.168.1.1 dev enp58s0f1  proto static  metric 100 
default via 192.168.16.1 dev wlp59s0  proto static  metric 600

Sau đó, nó hoạt động như mong đợi. Có vẻ như "không có số liệu" là số liệu kém hơn (cao hơn) so với bất kỳ số nào, thay vì số liệu 0.

Chuyện gì đang xảy ra vậy? Nó dành riêng cho Linux, hay một chuẩn mạng?

Cảm ơn trước.

Câu trả lời:


6

Bạn có chắc chắn về quan sát đầu tiên của bạn? Những gì hiện ip route showhoặc route -nhiển thị sau đó? Có kết quả thay đổi nếu bạn thêm proto statictrong trường hợp đầu tiên?

Tôi đã tìm thấy ít nhất hai tài nguyên nói rõ ràng đó 0là giá trị mặc định trong Linux:

  • http://0pulum.de/lennart/projects/ifmetric/ : Số liệu mặc định cho một tuyến đường trong nhân Linux là 0, có nghĩa là mức ưu tiên cao nhất.
  • http://www.man7.org/linux/man-pages/man8/route.8.html : Nếu tùy chọn này không được chỉ định số liệu cho gia đình địa chỉ inet6 (IPv6) mặc định là '1', cho inet (IPv4) nó mặc định là '0'. (sau đó gợi ý rằng mặc định có thể khác khi sử dụng iproute2nhưng phân tích các nguồn này không hiển thị nó là gì)

Một hacker Linux kernel chắc chắn sẽ cần thiết để sắp xếp nó.

Ngoài ra bất cứ điều gì mặc định được chọn là rõ ràng hệ điều hành cụ thể. Bài viết này ( https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes ) ví dụ cho thấy Windows chọn số liệu mặc định dựa trên băng thông của liên kết


Tôi đánh dấu câu trả lời của bạn là đúng vì tôi chưa gặp lại hành vi này trong máy tính của mình. Tôi đổ lỗi cho nó trong một số điều kỳ lạ xảy ra trong máy tính để bàn với Ubuntu, ít nhất là với phiên bản mà tôi có tại thời điểm câu hỏi. Tôi đã không thấy nó xảy ra trong một vài hộp khác chạy Ubuntu LTS. Vì vậy, một tệp X (ngày nay tham chiếu đó có quá cũ không?). Cảm ơn câu trả lời của bạn!
rsuarez

6

Vì các tuyến này nằm trên các mạng con khác nhau, nên có nhiều liên quan ở đây hơn là chỉ số liệu. Ví dụ, nếu lưu lượng truy cập ban đầu nằm trên mạng con 192.168.1.1 có một tuyến không mặc định phù hợp trong bảng định tuyến của bạn, thì tuyến đó sẽ khớp với thông qua tiền tố dài nhất trước khi số liệu được xem xét.

Giả sử một tuyến đường không mặc định không khớp, thì nhân không có số liệu nên được hiểu là hạt nhân có số liệu bằng 0 và do đó tuyến có mức độ ưu tiên cao nhất. Mặc dù đó là một chế độ xem đơn giản vì một số trình nền định tuyến sau này sẽ dịch số liệu mặc định đó thành một giá trị khác như 1024. Tôi hy vọng đây là những gì đang xảy ra với bạn và bản phân phối không tên của bạn.

Nếu ip routehiển thị không có số liệu nào cả, bạn có thể xác nhận rằng đó thực sự là 0 bằng cách sử dụng route -nlệnh cũ hơn từ gói công cụ mạng hoặc cat /proc/net/route. Tuy nhiên, đầu ra này không nhất thiết phải khớp với những gì daemon định tuyến sẽ sử dụng trong nội bộ khi nó gặp giá trị 0.

Hơn nữa, làm thế nào bạn tạo ra các vấn đề tuyến đường quá. ip routesử dụng API netlink, trong khi routesử dụng ioctl. Mã cho cách số liệu mặc định được tạo giữa hai cách tiếp cận dẫn đến các giá trị số liệu khác nhau. Ví dụ: tạo tuyến mặc định IPv6 qua ip routesẽ dẫn đến giá trị số liệu là 1024 trên RHEL 7, trong khi tạo tuyến tương tự thông qua routesẽ dẫn đến số liệu là 1.

Từ RedHat :

  • nếu không có gì được truyền cho lệnh tuyến đường như số liệu tuyến đường, giá trị 1 được sử dụng bởi chính lệnh đó.
  • Nếu không có gì được truyền cho lệnh ip dưới dạng chỉ số tuyến, thuộc tính hoàn toàn không được tạo và kernel hiểu nó là 0, sau này được dịch 1024 thành mặc định.
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.