3.6-পরবর্তী কার্নেলগুলিতে মাল্টিপথ রাউটিং


16

আপনারা সবাই সম্ভবত জানেন যে ipv4 রুট ক্যাশেটি 3.6 লিনাক্স কার্নেল সিরিজে মুছে ফেলা হয়েছে, যা মাল্টিপাথ রাউটিংয়ে মারাত্মক প্রভাব ফেলেছিল। আইপিভি ing রাউটিং কোড (আইপিভি unlike একের বিপরীতে) পরবর্তী হপ নির্বাচন করে একটি বৃত্তাকার রবিন ফ্যাশন, সুতরাং প্রদত্ত উত্স আইপি থেকে প্রদত্ত গন্তব্য আইপি পর্যন্ত প্যাকেটগুলি সর্বদা একই পরবর্তী হপ দিয়ে যায় না। ৩.6 এর আগে রাউটিং ক্যাশে সেই পরিস্থিতি সংশোধন করছিল, যেমন পরবর্তী হপ হিসাবে একবার নির্বাচিত হয়েছিল, তখন সেই ক্যাশে অবস্থান করছিল এবং একই উত্স থেকে একই গন্তব্য পর্যন্ত আরও সমস্ত প্যাকেটগুলি সেই পরবর্তী হুপের মধ্য দিয়ে যাচ্ছিল। এখন পরবর্তী হ্যাপ প্রতিটি প্যাকেটের জন্য পুনরায় নির্বাচিত হয়েছে, যা অদ্ভুত জিনিসগুলির দিকে নিয়ে যায়: রাউটিং টেবিলের 2 টি সমমূল্যের ডিফল্ট রুটগুলির সাথে, প্রতিটি একটি ইন্টারনেট সরবরাহকারীর দিকে ইঙ্গিত করে, আমি এমনকি টিসিপি সংযোগ স্থাপন করতে পারি না, কারণ প্রাথমিক এসওয়াইএন এবং চূড়ান্ত এসিকে বিভিন্ন রুট দিয়ে যান,

মাল্টিপ্যাথ রাউটিংয়ের স্বাভাবিক আচরণ পুনরুদ্ধার করার জন্য কি অপেক্ষাকৃত কোনও সহজ উপায় আছে, যাতে পরের হপ প্রতি প্যাকেটের পরিবর্তে প্রতি-প্রবাহকে নির্বাচিত করা হয়? আইপিভি 4 এর জন্য পরবর্তী হপ নির্বাচন হ্যাশ-ভিত্তিক তৈরি করার জন্য কি প্যাচগুলি রয়েছে? বা আপনি কিভাবে এটির সাথে সমস্ত আচরণ করেন?


আপনার কি এখানে "স্প্লিট অ্যাক্সেস" সেটআপ অনুরূপ: lartc.org/howto/lartc.rpdb.m Multiple-links.html ? যদি তা হয় তবে আপনার রুলসেট এবং রুটগুলি কেমন দেখাচ্ছে?
দ্য ওয়াববিট

"আইপি রুটটি 173.194.112.247" একাধিকবার ব্যবহার করার চেষ্টা করুন এবং আউটপুট পোস্ট করুন
c4f4t0r

সুস্বাদু প্রশ্নের জন্য ধন্যবাদ। :) প্রথমত, আপনি আমাদের একটি উদাহরণ দেন নি। সুতরাং আমি মনে করি আপনার মতো কিছু আছে ip ro add 8.8.8.8/32 nexthop via 1.2.3.4 nexthop via 1.2.3.5যা সঠিক অনুমান?
পাইজ

হ্যাঁ এটি সঠিক, তবে সাধারণত এটির আইপ রুটটি একাধিক পরবর্তী হप्सের সাথে 0.0.0.0/0 যোগ করে।
ইউজিন

হ্যাঁ, ঠিক সেই রকম। আমার ক্ষেত্রে "সরবরাহকারী 1" এবং "সরবরাহকারী 2" হ'ল সীমান্ত রাউটারগুলি আমার অভ্যন্তরীণ নেটওয়ার্ক এবং সরবরাহকারীর নেটওয়ার্কের সাথে সংযুক্ত এবং তারা সোর্স NAT করে। আমার অভ্যন্তরীণ রাউটারে আমার কাছে কেবল 2 টি হপস সরবরাহকারী 1 এবং সরবরাহকারী 2 এর দিকে নির্দেশ করে ডিফল্ট গেটওয়ে আছে, অন্য কোনও রুট নেই। ফায়ারওয়াল বিধিগুলি ক্লায়েন্ট মেশিনগুলির জন্য কিছু পরিষেবা (যেমন HTTP) মঞ্জুরি দেয় এবং সমস্ত কিছু অবরুদ্ধ করে।
ইউজিন

উত্তর:


8

সম্ভব হলে লিনাক্স কার্নেল> = 4.4 .... এ আপগ্রেড করুন ....

হ্যাশ-ভিত্তিক মাল্টিপ্যাথ রুটিং চালু করা হয়েছে, যা বিভিন্ন দিক থেকে 3.6 পূর্বের আচরণের চেয়ে ভাল is এটি প্রবাহ ভিত্তিক, পৃথক সংযোগের জন্য পথ অবিচ্ছিন্ন রাখতে উত্স এবং গন্তব্য আইপি (পোর্টগুলি উপেক্ষা করা হয়) এর একটি হ্যাশ গ্রহণ করে। একটি ক্ষতি হ'ল আমি বিশ্বাস করি যে 3.. 3. পূর্ববর্তী সময়ে বিভিন্ন অ্যালগরিদম / কনফিগার মোড উপলব্ধ ছিল, তবে এখন আপনি যা পেয়েছেন তা পেয়ে গেছেন! আপনি weightযদিও রাস্তার পছন্দকে প্রভাবিত করতে পারেন ।

আপনি যদি আমার পরিস্থিতিতে থাকেন তবে আপনি আসলে এটি চান 3.6 >= behaviour < 4.4তবে এটি আর সমর্থিত নয়।

আপনি যদি> = 4.4 এ আপগ্রেড করেন তবে অন্য কমান্ডগুলি ছাড়াই এই কৌশলটি করা উচিত:

ip route add default  proto static scope global \
nexthop  via <gw_1> weight 1 \
nexthop  via <gw_2> weight 1

বিকল্পভাবে ডিভাইস দ্বারা:

ip route add default  proto static scope global \
 nexthop  dev <if_1> weight 1 \
 nexthop  dev <if_2> weight 1

যে কেউ এই সমাধানে আসছেন তাদের জন্য - একবার দেখুন: নেট.আইপিভি 4.ফিব_মল্টিপথ_উস_নিউথথপ / গেটওয়েটি স্বয়ংক্রিয়ভাবে "ড্রপড" অক্ষম করার জন্য।
রোস্টিস্লাভ কান্ডিলারভ

6

"তুলনামূলকভাবে সহজ" একটি কঠিন শব্দ, তবে আপনিও পারেন

  1. আপনার প্রতিটি লিঙ্কের জন্য রাউটিং টেবিলগুলি সেট আপ করুন - একক ডিফল্ট গেটওয়ে দিয়ে প্রতি লিঙ্কে একটি টেবিল
  2. একক স্ট্রিমের সমস্ত প্যাকেটে অভিন্ন চিহ্নগুলি স্ট্যাম্প করতে নেটফিল্টার ব্যবহার করুন
  3. চিহ্নিত উপর নির্ভর করে বিভিন্ন রাউটিং টেবিলের মাধ্যমে প্যাকেটগুলি রুট করতে আইপি রুল টেবিলটি ব্যবহার করুন
  4. আপনার গেটওয়ে / লিঙ্কগুলির মধ্যে প্রথম সেশনের প্যাকেটগুলিতে ভারসাম্য বজায় রাখার জন্য একটি মাল্টি-নেক্সথপ ওজনযুক্ত রুট ব্যবহার করুন।

নেটফিল্টার মেলিং তালিকায় এই বিষয়টি নিয়ে আলোচনা হয়েছে যেখান থেকে আমি তালিকা চুরি করছি:

১. রাউটিং বিধি (আরপিডিবি এবং এফআইবি)

ip route add default via <gw_1> lable link1
ip route add <net_gw1> dev <dev_gw1> table link1
ip route add default via <gw_2> table link2
ip route add <net_gw2> dev <dev_gw2> table link2

/sbin/ip route add default  proto static scope global table lb \
 nexthop  via <gw_1> weight 1 \
 nexthop  via <gw_2> weight 1

ip rule add prio 10 table main
ip rule add prio 20 from <net_gw1> table link1
ip rule add prio 21 from <net_gw2> table link2
ip rule add prio 50 fwmark 0x301 table link1
ip rule add prio 51 fwmark 0x302 table link2
ip rule add prio 100 table lb

ip route del default

২. ফায়ারওয়াল বিধিমালা ("প্রবাহ" এলবি মোডে চাপ দেওয়ার জন্য আইপসেট ব্যবহার করে)

ipset create lb_link1 hash:ip,port,ip timeout 1200
ipset create lb_link2 hash:ip,port,ip timeout 1200

# Set firewall marks and ipset hash
iptables -t mangle -N SETMARK
iptables -t mangle -A SETMARK -o <if_gw1> -j MARK --set-mark 0x301
iptables -t mangle -A SETMARK -m mark --mark 0x301 -m set !
--match-set lb_link1 src,dstport,dst -j SET \
          --add-set lb_link1 src,dstport,dst
iptables -t mangle -A SETMARK -o <if_gw2> -j MARK --set-mark 0x302
iptables -t mangle -A SETMARK -m mark --mark 0x302 -m set !
--match-set lb_link2 src,dstport,dst -j SET \
          --add-set lb_link2 src,dstport,dst

# Reload marks by ipset hash
iptables -t mangle -N GETMARK
iptables -t mangle -A GETMARK -m mark --mark 0x0 -m set --match-set
lb_link1 src,dstport,dst -j MARK --set-mark 0x301
iptables -t mangle -A GETMARK -m mark --mark 0x0 -m set --match-set
lb_link2 src,dstport,dst -j MARK --set-mark 0x302

# Defining and save firewall marks
iptables -t mangle -N CNTRACK
iptables -t mangle -A CNTRACK -o <if_gw1> -m mark --mark 0x0 -j SETMARK
iptables -t mangle -A CNTRACK -o <if_gw2> -m mark --mark 0x0 -j SETMARK
iptables -t mangle -A CNTRACK -m mark ! --mark 0x0 -j CONNMARK --save-mark
iptables -t mangle -A POSTROUTING -j CNTRACK

# Reload all firewall marks
# Use OUTPUT chain for local access (Squid proxy, for example)
iptables -t mangle -A OUTPUT -m mark --mark 0x0 -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -m mark --mark 0x0 -j GETMARK
iptables -t mangle -A PREROUTING -m mark --mark 0x0 -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark --mark 0x0 -j GETMARK

উপরের কিছু বৈকল্পিকতার জন্য আপনি নেটফিল্টার মেলিং তালিকা আলোচনাটি অনুসরণ করতে চাইতে পারেন।


নিশ্চিত নন, কিন্তু সহজ হতে পারে u32গুরুত্বপূর্ণ পরামিতি কুচি-কুচি করিয়া কাটা বস্তু এবং পেতে তারপর "লেবেল" জন্য নির্ধারিত ip rule'র
poige

আপনাকে ধন্যবাদ, তবে এটি দেখতে বেশ জটিল সমাধানের মতো। আমি যা বুঝতে পারি না তা হ'ল এখানে কোন টুকরোটি "একটি স্ট্রিমের সমস্ত প্যাকেটে অভিন্ন চিহ্নগুলি স্ট্যাম্পের জন্য" দায়ী? কীভাবে এই আইপসেট ম্যাজিক কাজ করে? আমি ভেবেছিলাম আইপসেট হ'ল নির্দিষ্ট আইপিগুলির একটি সেট যা নিয়মিতভাবে মেশানো যায়।
ইউজিন

আপনি ঠিক বলেছেন ipset- এটি কেবল এমন সেট তৈরি করছে যা ব্যবহারের --add-setসাথে পূরণ হয় এবং ব্যবহারের সাথে মিলে যায় --match-set- তবে এটি বেশিরভাগই নতুন রাজ্যে সংযোগের জন্য। ইস্টাব্লিশড স্টেট সংযোগের জন্য লক্ষ্যটির --restore-markপ্যারামিটার ব্যবহার করে প্যাকেটগুলিতে চিহ্নটি স্ট্যাম্প করা হয় CONNMARK- এই নির্দেশিকাটি প্যাকেটে সংযোগের চিহ্নটি অনুলিপি করছে। সংযোগের চিহ্নটি আগে শৃঙ্খলে ব্যবহার করে সেট করা --save-markহয়েছিল POSTROUTING(যেখানে নতুন সংযোগের প্যাকেটগুলি দিয়ে যেত। স্ক্রিপ্টটি আমার কাছে অত্যধিক সংশ্লেষিত মনে হয় তবে এটি ধারণাটি প্রকাশ করে।
দ্য ওয়াবিট

1
হ্যাঁ, এখন আমি ধারণা পেয়েছি, আমি মনে করি। শেষ প্রশ্ন: আপনি বুঝতে পেরেছেন যে কার্নেল বিকাশকারীরা আইপিভি 4 এর জন্য হ্যাশ-ভিত্তিক পরবর্তী হপ নির্বাচন প্রবর্তন করেন না কেন? রুট ক্যাশে অপসারণের পাশাপাশি এটি বাস্তবায়ন না করার কোনও কারণ আছে কি? আইপিভি 6 এর জন্য অনুরূপ সমাধান বেশ ভাল কাজ করে। এই সমস্ত সংযোগের যাদু কি এত সাধারণ কাজের জন্য ওভারকিল নয়?
ইউজিন

1
@ ইউজিন দুর্ভাগ্যক্রমে, আইপি স্ট্যাক বিকাশের (বা সাধারণভাবে লিনাক্স কার্নেল বিকাশ) কাছে আপনার যে কোনও প্রশ্নের অনুমোদনের জন্য আমি যথেষ্ট কাছে থেকে দূরে আছি, তবে আমি অনুমান করতে পারি যে আইপিভি 4 দিয়ে বিভিন্ন সরবরাহকারী ব্যবহার করে মাল্টিপ্যাথিংয়ের বিষয়টি অনেক বেশি হিসাবে বিবেচিত হত এটিতে আরও কোনও কাজ করার জন্য একটি কোণার কেস। নেটফিল্টার সিএনএনমার্ক ব্যবহার করা স্পষ্টতই একটি বাজে কালডেজের মতো দেখায়, তবে রুট ক্যাশে কোড বাদ দেওয়ার সিদ্ধান্তে এটি সম্ভবত "ব্যবহারযোগ্য কাজ" হিসাবে বিবেচিত হবে।
দ্য ওয়াবিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.