คำตอบของ mefat ช่วยฉันได้มาก แต่แทนที่จะคัดลอกกฎตารางหลักทั้งหมดลงในตาราง ISP สองวิธีแนวทางที่ดีกว่าอาจใช้กฎ prio เพื่อเพิ่มกฎเริ่มต้นหลังจากตารางหลัก
ตั้งค่า / etc / iproute2 / rt_tables ตามปกติ:
...
10 ISP1
20 ISP2
...
สังเกตได้ว่า
ip rule show
แสดงกฎ 0-> local, 32766-> main และ 32767-> default ดูman ip
รายละเอียดเพิ่มเติมได้ที่
ขั้นตอนการกำหนดเส้นทางที่สำคัญจะทำงานจากกฎ prio ต่ำถึงสูง prio ... แต่ 32767 ไม่ใช่กฎสูงสุด # ดังนั้นหากตารางเส้นทางหลักไม่มีเส้นทางเริ่มต้น (แต่อาจมีเส้นทางการเปลี่ยนแบบไดนามิกสำหรับ vpns และอื่น ๆ ทุกชนิด) ดังนั้นหากไม่มีการจับคู่มันจะผ่านไปสู่การเริ่มต้น
ดูส่วน 'โยน' ได้ที่นี่: http://linux-ip.net/html/routing-tables.html
ดังนั้นตอนนี้การติดตั้ง
ip route add default dev $ISP1_IFACE table ISP1
ip route add default dev $ISP2_IFACE table ISP2
และเพื่อให้แน่ใจว่าพวกเขาดูแลตารางหลัก:
ip rule add fwmark 20 table ISP1 prio 33000
ip rule add fwmark 10 table ISP2 prio 33000
ใช้
ip rule show
อีกครั้งเพื่อตรวจสอบว่ากฎเหล่านี้สูงกว่าหลัก
จากนั้นใช้ CONNMARK mangling ตามที่ mefat พูดว่า:
# 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
สิ่งที่ควรทราบ: pppd ต้องการเป็นnodefaultroute
อย่างอื่นมันตั้งอยู่ในหลัก; เมื่ออุปกรณ์รีสตาร์ทตาราง ISP1 / ISP2 จะได้รับการทำความสะอาดดังนั้นจึงจำเป็นต้องกู้คืนโดยใช้สคริปต์
ฉันใช้สคริปต์ใน /etc/ppp/ip-{up,down}.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
นี่คือการโหลดบาลานซ์ตามการเชื่อมต่อดังนั้นฉันจะดูที่การใช้โหลดเพื่อตรวจสอบและแทนที่กฎสถิติ: iptables -t mangle -R PREROUTING <n>
จาก userspace ดังนั้นหากมีการดาวน์โหลดที่ใช้เวลานานในการเชื่อมต่อหนึ่งและการเชื่อมต่ออื่น ๆ มีการโหลดเบา ๆ เราควรจะชอบการเชื่อมต่อที่โหลดเบา ๆ