mefat'ın yanıtı bana çok yardımcı oldu, ancak tüm ana tablo kurallarının bir kopyasını değil, iki ISS tablosuna kopyalamak yerine, ana tablodan sonra varsayılan kuralları eklemek için kural prio'yu kullanmak daha iyi bir yaklaşım olabilir.
/ Etc / iproute2 / rt_tables dosyasını normal şekilde ayarlayın:
...
10 ISP1
20 ISP2
...
Bunu not et
ip rule show
0-> yerel, 32766-> ana ve 32767-> varsayılan kurallarını gösterir. Daha man ip
fazla bilgi için bakınız.
Yönlendirme süreci, düşük priodan yüksek prio kurallarına kadar çalışacaktır ... ancak 32767 en yüksek kural # değildir. Dolayısıyla, ana yönlendirme tablosunda varsayılan bir rota yoksa (ancak vpns vb. İçin her türlü dinamik olarak değişen rota içerebilir), bir eşleşme yapılmazsa, varsayılana (normalde boş) düşer ve daha yüksek prio kurallarını arar.
Buradaki 'atma' bölümüne bakın: http://linux-ip.net/html/routing-tables.html
Şimdi kurulum
ip route add default dev $ISP1_IFACE table ISP1
ip route add default dev $ISP2_IFACE table ISP2
ve ana masaya baktıklarından emin olmak için:
ip rule add fwmark 20 table ISP1 prio 33000
ip rule add fwmark 10 table ISP2 prio 33000
kullanım
ip rule show
yine bu kuralların ana kurallardan daha yüksek prio olduğunu doğrulamak için
O zaman mefat dediği gibi CONNMARK mangling kullanın:
# 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
Unutulmaması gereken şeyler: pppd'nin nodefaultroute
aksi takdirde ana olarak kurulması gerekir ; bir cihaz yeniden başlatıldığında ISP1 / ISP2 tabloları temizlenir, bu yüzden bir komut dosyası kullanılarak geri yüklenmesi gerekir.
/Etc/ppp/ip-{up,down {.d/dual-routing içinde bir komut dosyası kullanıyorum
# 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
Bu bağlantı tabanlı yük dengeleme, bu yüzden istatistik kuralını izlemek ve değiştirmek için yükü kullanacağım: iptables -t mangle -R PREROUTING <n>
kullanıcı alanından. Dolayısıyla, bir bağlantıda uzun süre çalışan bir indirme varsa ve diğer bağlantı hafif yüklüyse, hafif yüklü bağlantıyı tercih etmeliyiz.