mefat के जवाब से मुझे बहुत मदद मिली, लेकिन दो ISP तालिकाओं में सभी मुख्य तालिका नियमों की एक-एक नकल के बजाय मुख्य तालिका के बाद डिफ़ॉल्ट नियमों को जोड़ने के लिए नियम प्रियो का उपयोग करने के लिए एक बेहतर तरीका हो सकता है।
सामान्य रूप में सेट करें / etc / iproute2 / rt_tables:
...
10 ISP1
20 ISP2
...
ध्यान दें कि
ip rule show
नियमों को दिखाता है 0-> स्थानीय, 32766-> मुख्य और 32767-> डिफ़ॉल्ट। man ip
अधिक जानकारी के लिए देखें।
महत्वपूर्ण रूप से राउटिंग प्रक्रिया कम बेशुमार से लेकर उच्च बेशुमार नियमों तक काम करेगी ... लेकिन 32767 सर्वोच्च नियम # नहीं है। इसलिए यदि मुख्य मार्ग तालिका में कोई डिफ़ॉल्ट मार्ग नहीं है (लेकिन vpns आदि के लिए सभी प्रकार के गतिशील रूप से बदलते मार्ग हो सकते हैं) तो यदि कोई मेल नहीं बनता है, तो यह डिफ़ॉल्ट रूप से (सामान्य रूप से खाली) होकर गिरता है और फिर उच्चतर प्रियो नियमों की तलाश करता है।
यहां 'थ्रो' सेक्शन देखें: http://linux-ip.net/html/rout-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 मैनबलिंग का उपयोग करें क्योंकि मेफैट ने कहा:
# 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-ministrup,downministr.d.d/dual-rout में स्क्रिप्ट का उपयोग करता हूं
# 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>
उपयोक्ता से। इसलिए यदि एक कनेक्शन पर लंबे समय तक चलने वाला डाउनलोड है और दूसरा कनेक्शन हल्का लोड है तो हमें हल्के से लोड किए गए कनेक्शन को प्राथमिकता देना चाहिए।