Sau khi thực hiện cấu hình bình thường chỉ eth0, tôi quay lại và thêm cấu hình cho eth1. Chỉ với eth0 trở lên, bảng lộ trình là:
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
Nhưng một khi tôi đưa ra eth1, thứ tự của các câu lệnh tuyến mặc định đã xác định giao diện nào luôn được sử dụng. Như được hiển thị bên dưới, tình cờ chọn tuyến eth1 đến cổng 192.168.1,65.
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100
chỉ có một tuyên bố cổng
Vấn đề đầu tiên có thể là tuyến đường mặc định 'qua 192.168.1,65'. Nó xuất hiện ở đó nếu định nghĩa eth1 trong / etc / network / interface có câu lệnh "gateway 192.168.1.60". Vì vậy, loại bỏ bất kỳ câu lệnh cổng bổ sung và thoát giao diện:
# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
thiết lập bảng định tuyến mới
Tạo một bảng định tuyến mới, riêng biệt chứa một tuyến mặc định phù hợp cho tất cả lưu lượng truy cập ra khỏi eth1. Số bảng ở đây không quan trọng; 101 đơn giản không phải là bảng định tuyến chính. Thực hiện việc này bằng lệnh 'post-up' trên cấu hình eth1 trong / etc / network / interface. Chỉ thêm một bài đăng lên eth1; Không thêm nó vào bất kỳ giao diện phụ eth1 :.
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Bounce eth1. Bảng định tuyến chính không thay đổi và bảng 101 sẽ chứa tuyến đường mặc định 192.168.1,65 nếu eth1 hoạt động.
# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101 (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101
default via 192.168.1.65 dev eth1
quy tắc định tuyến mới
Thêm quy tắc định tuyến để sử dụng bảng 101 để chọn tuyến mặc định cho các gói đi ra eth1.
# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0: from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default
Thêm quy tắc vào /etc/network/interfaces
tệp là tốt:
post-up ip rule add from 192.168.1.64/27 lookup 101
Bây giờ hãy đảm bảo thêm dọn dẹp để xóa tuyến đường và quy tắc khi giao diện không hoạt động:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[EDIT cho ubfox 16.04+] Giống như được chỉ ra ở đây và từ thử nghiệm tôi đã thực hiện từ trợ giúp này, ip route2 đã thay đổi cấu trúc lệnh của anh ấy. Để thực hiện công việc, bạn sẽ phải điều chỉnh chỉ một chút để làm theo thứ tự các man ip
điểm .
up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65
Hoặc bạn sẽ kết thúc sau lệnh ifdown - ifup với lệnh thông báo lỗi @ifdown (thông báo chuẩn để nói rằng các thiết bị ngoại vi không được cấu hình đúng) và @ifup không có tuyến đường trong bảng 101.