লিনাক্সে একাধিক আইএসপি সংযোগ লোড ব্যালেন্সিং এবং NAT-ing


15

আমার দুটি পৃথক আইএসপি থেকে দুটি ইন্টারনেট সংযোগ রয়েছে এবং আমার দুটি নেটওয়ার্কের মধ্যে এবং আমার নেটওয়ার্ক থেকে আসা ট্র্যাফিকের ভারসাম্য বজায় রাখা দরকার। আমি ডেবিয়ান জিএনইউ / লিনাক্স ব্যবহার করছি।

আমার সেট আপটি এর মতো -

eth0 (192.168.0.0/24) - স্থানীয় নেটওয়ার্ক

eth1 (192.168.1.0/24) - আইএসপি # 1

eth2 (192.168.2.0/24) - আইএসপি # 2

আমার স্থানীয় নেটওয়ার্কটি এথ0 এর মাধ্যমে এই সার্ভারের সাথে সংযুক্ত রয়েছে এবং ল্যানের সমস্ত মেশিনের জন্য বাক্সটি ডিএইচসিপি সার্ভার কাম গেটওয়ে।

সার্ভারের দুটি আইএসপি-র মধ্যে লোড-ব্যালেন্সিং করা দরকার এবং এটি NAT-ingও করতে হবে।

আমি lartc.org এ রাউটিং নির্দেশাবলী অনুসরণ করেছি তবে NAT-ing সঠিকভাবে করার জন্য আমার এখনও নির্দেশাবলীর প্রয়োজন।

যে কোন ধরণের সাহায্য গ্রহন করা হবে.

পিএস - আমি পিফসেন্স সম্পর্কে জানি তবে আমার লিনাক্স ব্যবহার করা দরকার।


2
আপনার কোন ধরণের নির্দেশাবলীর দরকার? lartc.org এ সবকিছু ব্যাখ্যা করা হয়েছে। আপনার বিশেষত কোনও সমস্যা আছে?
lorenzog

উত্তর:


19

আমি lartc.org এবং iptables উভয় পদ্ধতি ব্যবহার করে লোড ব্যালেন্সিং করেছি এবং আমি দেখতে পেয়েছি যে iptables পদ্ধতিটি বোঝা এবং বাস্তবায়ন করা সহজ। একমাত্র ক্ষতি হ'ল স্ট্যাটিস্টিক মডিউলটি ব্যবহার করতে সক্ষম হওয়ার জন্য আপনার সাম্প্রতিক iptables সংস্করণটি প্রয়োজন

ধরা যাক কয়েকটি জিনিস:

ল্যান: eth0: 192.168.0.1/24

আইএসপি 1: এথ 1: 192.168.1.1/24, গেটওয়ে: 192.168.1.2/24

আইএসপি 2: এথ 2: 192.168.2.1/24, গেটওয়ে: 192.168.2.2/24

সুতরাং এখানে আমি iptables পদ্ধতি ব্যবহার করে কি করব:

রুট টেবিল

রুট টেবিল নম্বর এবং আইএসপি নামের মধ্যে একটি মানচিত্র যুক্ত করতে প্রথমে / etc / iproute2 / rt_tables সম্পাদনা করুন

...
10 ISP1
20 ISP2
...

সুতরাং সারণি 10 এবং 20 যথাক্রমে আইএসপি 1 এবং আইএসপি 2 এর জন্য। এই কোড স্নিপেটের সাথে প্রধান টেবিল থেকে রুটগুলি নিয়ে আমার এই টেবিলগুলি পপুলি করা দরকার (যা আমি hxxp থেকে নিয়েছি: //linux-ip.net/html/adv-mult-internet.html)

ip route show table main | grep -Ev '^default' \
   | while read ROUTE ; do
     ip route add table ISP1 $ROUTE
done

এবং সেই আইএসপি 1 এর গেটওয়ের মাধ্যমে আইএসপি 1 এ ডিফল্ট গেটওয়ে যুক্ত করুন:

ip route add default via 192.168.1.2 table ISP1

আইএসপি 2 এর জন্যও একই কাজ করুন

সুতরাং এখন আমার কাছে 2 টি রুট টেবিল রয়েছে, প্রতিটি আইএসপির জন্য 1 টি।

iptables

ঠিক আছে এখন আমি প্রতিটি রুট টেবিলগুলিতে সমানভাবে প্যাকেট বিতরণ করতে iptables ব্যবহার করি। এই কাজটি এখানে কীভাবে পাওয়া যাবে সে সম্পর্কে আরও তথ্য ( http://www.diegolima.org/wordpress/?p=36 ) এবং এখানে ( http://home.regit.org/?page_id=7 )

# 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

ন্যাট

ভাল NAT সহজ:

# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

3
লিঙ্ক সহ ভাল উত্তর। এটি করার জন্য আপনার অগত্যা কোনও নতুন আইপটেবলের প্রয়োজন হবে না কারণ সেখানে পরিসংখ্যানের ম্যাচ আগে র্যান্ডম এবং নবম ম্যাচ ছিল যা একই সার্ভারে একই ভূমিকা পালন করেছিল।
সিজেএক্স

1
Iptables এর চিহ্নগুলি সম্পর্কে আমার একটি প্রশ্ন আছে। পোস্ট করা লিঙ্কটিতে, তারা কেবলমাত্র প্যাকেটগুলি চিহ্নিত করছে যা নতুন রাজ্যের সাথে মেলে। কেন আপনি এটি অন্যভাবে করছেন?
Matías

আমি কি আরও একটি নেটওয়ার্ক ব্যবহার করতে পারি, যেমন আইএসপি 3, আইএসপি 4 ইত্যাদি?
মজুকো

3

মেফাতের উত্তরটি আমাকে অনেক সাহায্য করেছে তবে দুটি আইএসপি টেবিলের মধ্যে সমস্ত প্রধান টেবিলের নিয়মের এক অনুলিপি না করে মূল টেবিলের পরে ডিফল্ট নিয়মগুলি যুক্ত করতে নিয়ম প্রিও ব্যবহার করা আরও ভাল উপায় হতে পারে।

/ 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>ইউজারস্পেস থেকে। সুতরাং যদি কোনও সংযোগে একটি দীর্ঘকালীন ডাউনলোড হয় এবং অন্য সংযোগটি হালকাভাবে বোঝা হয় তবে আমাদের উচিত হালকা বোঝা সংযোগটি পছন্দ করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.