Các công cụ cấp cao như Trình quản lý mạng thường xóa địa chỉ và tuyến đường trên các liên kết "linkdown" (nghĩa là: với cờ KHÔNG CÓ NGƯỜI CHUYỂN GIAO được hiển thị trên giao diện). Vì vậy, nếu giao diện được quản lý bởi công cụ như vậy, người ta có thể mong đợi lộ trình của nó xuất hiện và biến mất khi được cắm và rút phích cắm.
Tôi hiểu rằng việc sử dụng Trình quản lý mạng có thể quá xâm phạm giao thức định tuyến động được sử dụng cùng lúc và do đó có thể không phải là ý tưởng hay nhất.
Nhưng trên thực tế, ngăn xếp định tuyến hạt nhân đã cung cấp tính năng như vậy mà không cần phải sửa đổi bất kỳ địa chỉ hoặc tuyến đường nào: bỏ qua_routes_with_linkdown.
Như một số mục khác, mục này đã xuất hiện trong nhân 4.2 (có sẵn trong nhân 4.19 của Debian 10) và đã sau đó được hiển thị trong kernelnewbies.org khi nó xuất hiện, đã được chỉ được ghi lại kể từ kernel 5.11:
bỏ qua_routes_with_linkdown - BOOLESE
Bỏ qua các tuyến đường có liên kết không hoạt động khi thực hiện tra cứu FIB.
Vì vậy, nếu giao diện được gọi mgmt0
và tuyến đường mà nó cung cấp chỉ nên được sử dụng khi phát hiện một nhà cung cấp dịch vụ trên đó, người ta chỉ cần thực hiện:
sysctl -w net.ipv4.conf.mgmt0.ignore_routes_with_linkdown=1
hoặc đặt cái này vào /etc/sysctl.conf
.
Bây giờ khi giao diện này vẫn được duy trì về mặt quản trị bị ngắt kết nối, mục tuyến đường được hiển thị lại bởi lộ trình ip
sẽ hiển thị các lá cờ liên kết chết
thay vì lá cờ duy nhất liên kết xuống
để nói với vùng người dùng rằng thực sự tuyến đường này hiện đang bị bỏ qua trong quá trình tra cứu FIB.
Lưu ý: để một giao diện phát hiện một liên kết, nó phải được cấp nguồn. Vì vậy, nó phải ở lại hành chính lên. Nếu nó bị hỏng khi sóng mang bị mất, thì nó không thể tự động được khôi phục sau khi phát hiện sóng mang, vì sẽ không còn phát hiện như vậy nữa.
Hoàn thành ví dụ:
liên kết ip add name vethtest1 up gõ tên veth peer vethtest1peer
liên kết ip add name vethtest2 up type veth peer name vethtest2peer
thiết lập liên kết ip dev vethtest2peer up
địa chỉ ip add 192.0.2.2/25 dev vethtest1
địa chỉ ip add 192.0.2.3/24 dev vethtest2
Đặt địa chỉ sẽ cài đặt các tuyến LAN hạt nhân tự động. vethtest1
có giao diện ngang hàng không được đưa lên sẽ có trạng thái KHÔNG CÓ VẬN CHUYỂN và các tuyến của nó sẽ nhận được một liên kết xuống
lá cờ.
# lộ trình ip tới root 192.0.2.0/24
192.0.2.0/25 dev vethtest1 liên kết phạm vi hạt nhân proto src 192.0.2.2 liên kết xuống
192.0.2.0/24 dev vethtest2 liên kết phạm vi kernel proto src 192.0.2.3
Một tuyến đường đến 192.0.2.100 sẽ sử dụng vethtest1
vì nó có một tuyến đường hẹp hơn (mặc dù có liên kết xuống
lá cờ).
# tuyến ip nhận 192.0.2.100
192.0.2.100 dev vethtest1 src 192.0.2.2 uid 0
bộ đệm
Sau đó, với cài đặt mới:
sysctl -w net.ipv4.conf.vethtest1.ignore_routes_with_linkdown=1
đến hành vi mới:
# lộ trình ip tới root 192.0.2.0/24
192.0.2.0/25 dev vethtest1 liên kết phạm vi kernel proto src 192.0.2.2 liên kết chết
192.0.2.0/24 dev vethtest2 liên kết phạm vi kernel proto src 192.0.2.3
# ip -4 netconf show dev vethtest1
inet vethtest1 chuyển tiếp trên rp_filter tắt mc_forwarding tắt proxy_neigh tắt ignore_routes_with_linkdown bật
# tuyến ip nhận 192.0.2.100
192.0.2.100 dev vethtest2 src 192.0.2.3 uid 0
bộ đệm
Bây giờ nếu giao diện có sóng mang (được mô phỏng tại đây bằng cách hiển thị giao diện ngang hàng của nó):
thiết lập liên kết ip dev vethtest1peer up
tuyến đường được khôi phục thông qua nó:
# lộ trình ip tới root 192.0.2.0/24
192.0.2.0/25 dev vethtest1 liên kết phạm vi kernel proto src 192.0.2.2
192.0.2.0/24 dev vethtest2 liên kết phạm vi kernel proto src 192.0.2.3
# tuyến ip nhận 192.0.2.100
192.0.2.100 dev vethtest1 src 192.0.2.2 uid 0
bộ đệm