মেফাতের উত্তরটি আমাকে অনেক সাহায্য করেছে তবে দুটি আইএসপি টেবিলের মধ্যে সমস্ত প্রধান টেবিলের নিয়মের এক অনুলিপি না করে মূল টেবিলের পরে ডিফল্ট নিয়মগুলি যুক্ত করতে নিয়ম প্রিও ব্যবহার করা আরও ভাল উপায় হতে পারে।
/ Etc / iproute2 / rt_tables স্বাভাবিক হিসাবে সেট আপ করুন:
...
10 ISP1
20 ISP2
...
মনে রাখবেন যে
ip rule show
বিধিগুলি 0-> স্থানীয়, 32766-> প্রধান এবং 32767-> ডিফল্ট দেখায়। দেখুন man ip
আরো বিস্তারিত জানার জন্য।
গুরুতরভাবে রাউটিং প্রক্রিয়াটি নিম্ন প্রিও থেকে উচ্চ প্রিও নিয়মে কাজ করবে ... তবে 32767 সর্বোচ্চ নিয়ম নয় #। সুতরাং যদি প্রধান রাউটিং টেবিলের কোনও ডিফল্ট রুট না থাকে (তবে এতে ভিপিএনএস ইত্যাদির জন্য সমস্ত ধরণের পরিবর্তনশীল রুট থাকতে পারে) তবে যদি কোনও মিল তৈরি না হয় তবে এটি ডিফল্ট হয়ে যায় (সাধারণত খালি) এবং তারপরে উচ্চতর প্রিও নিয়মের সন্ধান করে।
এখানে 'নিক্ষেপ' বিভাগটি দেখুন: 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
এই বিধিগুলি প্রধানের চেয়ে উচ্চতর প্রিয়া রয়েছে তা যাচাই করতে আবার again
তারপরে কনফার্স ম্যাঙ্গলিংকে মেফাত বলেছে:
# 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
বিষয়গুলি লক্ষ্য করুন: পিপিপিডি প্রয়োজন 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>
ইউজারস্পেস থেকে। সুতরাং যদি কোনও সংযোগে একটি দীর্ঘকালীন ডাউনলোড হয় এবং অন্য সংযোগটি হালকাভাবে বোঝা হয় তবে আমাদের উচিত হালকা বোঝা সংযোগটি পছন্দ করা উচিত।