Câu trả lời của mefat đã giúp tôi rất nhiều nhưng thay vì một bản sao của tất cả các quy tắc bảng chính vào hai bảng ISP, cách tiếp cận tốt hơn có thể là sử dụng nguyên tắc quy tắc để thêm quy tắc mặc định sau bảng chính.
Thiết lập / etc / iproute2 / rt_tables như bình thường:
...
10 ISP1
20 ISP2
...
Lưu ý rằng
ip rule show
Hiển thị quy tắc 0-> cục bộ, 32766-> chính và 32767-> mặc định. Xem man ip
để biết thêm chi tiết.
Điều quan trọng là quá trình định tuyến sẽ hoạt động từ quy tắc ưu tiên thấp đến quy tắc cao cấp ... nhưng 32767 không phải là quy tắc cao nhất #. Vì vậy, nếu bảng định tuyến chính không có tuyến mặc định (nhưng có thể chứa tất cả các loại tuyến thay đổi động cho vpns, v.v.) thì nếu một trận đấu không được thực hiện, nó sẽ rơi vào mặc định (thường trống) và sau đó tìm quy tắc cao hơn.
Xem phần 'ném' tại đây: http://linux-ip.net/html/routing-tables.html
Vì vậy, bây giờ thiết lập
ip route add default dev $ISP1_IFACE table ISP1
ip route add default dev $ISP2_IFACE table ISP2
và để chắc chắn rằng họ đã nhìn vào bảng chính:
ip rule add fwmark 20 table ISP1 prio 33000
ip rule add fwmark 10 table ISP2 prio 33000
Sử dụng
ip rule show
một lần nữa để xác minh rằng các quy tắc này là cao hơn so với chính
Sau đó, sử dụng CONNORE xáo trộn như mefat nói:
# iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
# iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
# iptables -t mangle -A PREROUTING -j MARK --set-mark 10
# iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 20
# iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
Những điều cần lưu ý: pppd cần nodefaultroute
nếu không nó sẽ thiết lập chính; khi một thiết bị khởi động lại, các bảng ISP1 / ISP2 được làm sạch, do đó cần phải khôi phục bằng tập lệnh.
Tôi sử dụng tập lệnh trong /etc/ppp/ip- nbup,down Bolog.d / dual-routing
# One of my connections is ~2x faster than the other
BALANCED=0.3
ALL_ISP1=0
ALL_ISP2=1
RULENUM=4
set_balance() {
iptables -t mangle -R PREROUTING $RULENUM -m statistic --mode random --probability $0 -j MARK --set-mark 2
}
# if both up
set_balance $BALANCED
# if ppp1 down:
set_balance $ALL_ISP1
# if ppp0 down:
set_balance $ALL_ISP2
Đây là cân bằng tải dựa trên kết nối, vì vậy tôi sẽ xem xét sử dụng tải để theo dõi và thay thế quy tắc thống kê: iptables -t mangle -R PREROUTING <n>
từ không gian người dùng. Vì vậy, nếu có tải xuống lâu dài trên một kết nối và kết nối khác được tải nhẹ, chúng ta nên ưu tiên kết nối được tải nhẹ.