tc u32 - সাম্প্রতিক কার্নেলগুলিতে L2 প্রোটোকলগুলি কীভাবে মেলে?


12

লিনাক্স ব্রিজটিতে নির্মিত হ্যাশ ফিল্টারিং সহ আমার একটি সুন্দর শেপার রয়েছে at সংক্ষেপে, br0সংযোগগুলি externalএবং internalশারীরিক ইন্টারফেসগুলিতে, ভিএলএএন ট্যাগযুক্ত প্যাকেটগুলি "স্বচ্ছভাবে" ব্রিজ করা হয় (মানে, কোনও ভিএলএএন ইন্টারফেস নেই)।

এখন, বিভিন্ন কার্নেল এটি আলাদাভাবে করে। সঠিক কার্নেল ভার্শন রেঞ্জগুলির সাথে আমি ভুল হতে পারি, দয়া করে আমাকে ক্ষমা করুন। ধন্যবাদ।

2.6.26

সুতরাং, ডেবিয়ানে, ২.6.২6 এবং তার উপরে (২.6.৩২ অবধি, আমি বিশ্বাস করি) --- এটি কাজ করে:

tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
    u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200

এখানে, "কার্নেল" 0x8100 এর সাথে "প্রোটোকল" ফিল্ডে দুটি বাইটের সাথে মেলে, তবে আইপি প্যাকেটের শুরুটিকে "শূন্য অবস্থান" হিসাবে গণ্য করেছে (আমার ইংরেজির জন্য দুঃখিত, আমি যদি কিছুটা অস্পষ্ট না হই)।

2.6.32

আবার, ডেবিয়ানে (আমি ভ্যানিলা কার্নেলটি তৈরি করি নি), 2.6.32-5 --- এটি কাজ করে:

tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
    u32 ht 1:64 match ip dst 192.168.1.100 at 20 flowid 1:200

এখানে, "কার্নেল" প্রোটোকলের জন্য একই মেলে তবে এই প্রোটোকলের শিরোনামের শুরু থেকে অফসেট গণনা করা হয়েছে --- আমাকে অফসেটে 4 বাইট যুক্ত করতে হবে (20, ডিএসটি ঠিকানার জন্য নয় 20)। এটা ঠিক, আমার জন্য যেমন আরও যৌক্তিক মনে হয়।

৩.২.১১, এখন সর্বশেষতম স্থিতিশীল

এটি কাজ করে --- যেন কোনও 802.1q ট্যাগ নেই:

tc filter add dev internal protocol ip parent 1:0 prio 100 \
    u32 ht 1:64 match ip dst 192.168.1.100 flowid 1:200

সমস্যাটি হ'ল আমি এ পর্যন্ত 802.1q ট্যাগের সাথে ম্যাচের কোনও উপায় খুঁজে পাইনি।

অতীতে 802.1q ট্যাগের সাথে মিলছে

আমি নিম্নলিখিত হিসাবে এটি আগে করতে পারে:

tc filter add dev internal protocol 802.1q parent 1:0 prio 100 \
    u32 match u16 0x0ed8 0x0fff at -4 flowid 1:300

এখন আমি সঙ্গে 802.1Q ট্যাগ মেলে অক্ষম নই at 0, at -2, at -4, at -6বা মত যে। আমার কাছে মুখ্য সমস্যাটি শূন্যের হিট কাউন্ট --- --- এই ফিল্টারটি একেবারেই চেক করা হচ্ছে না, "ভুল প্রোটোকল", অন্য কথায়।

দয়া করে, যে কেউ, আমাকে সহায়তা করুন :-)

ধন্যবাদ!

উত্তর:


4

ভিএলএএন ট্যাগটি সাম্প্রতিক কার্নেলগুলিতে স্কিব থেকে ছিনিয়ে নেওয়া হয়েছে। স্কিবিতে একটি মেটা ম্যাচ করার জন্য এরকম কিছু চেষ্টা করুন:

tc filter add dev internal protocol all parent 1:0 prio 100 basic match 'meta(vlan mask 0xfff eq 0x0ed8)' flowid 1:300

এর জন্য একটি রুট ফিল্টার যুক্ত করার চেষ্টা protocol allআমাকে দেয় RTNETLINK answers: Invalid argument(এখানে 3.3.4 কার্নেল)। আমি এটি আরও নতুন কার্নেল দিয়ে পরীক্ষা করব। ধন্যবাদ.
ব্রাউনিয়ান

এটি আমার জন্য ডেবিয়ান হুইজি কার্নেল ৩.২.০ নিয়ে কাজ করেছে। আমি পুরো বিবরণ সহ আরও একটি উত্তর যুক্ত করেছি।
নিক ক্রেগ-উড

3

আমাকে ঠিক এই কাজটি করতে হয়েছিল। আমি দেখতে পেলাম যে @ থুসিথার পরামর্শ দেওয়া উত্তরটি নতুন কার্নেলের জন্য এটি করার সঠিক উপায়।

দেবিয়ান হুইজি কার্নেল ৩.২.০-৪ এবং আইপ্রউটের সাথে পরীক্ষা করা হয়েছে (যেখান থেকে টিসি কমান্ড আসে) সংস্করণ 20120521-3 + বি 3

এখানে সম্পূর্ণ স্ক্রিপ্ট, tc filterলাইনগুলি প্রায় ঠিক ঠিক @ থুসিথা দ্বারা নির্দিষ্ট করা হয়েছে

function qos() {
    if="$1"
    vlan1="$2"
    vlan2="$3"

    # delete previous
    tc qdisc del dev $if root >/dev/null 2>&1
    tc qdisc del dev $if ingress >/dev/null 2>&1

    # Root HTB for $if
    tc qdisc add dev $if root handle 1: htb r2q 1 default 1

    # Root class to borrow from
    tc class add dev $if parent 1: classid 1:1 htb quantum 1000000 rate 500mbit ceil 500mbit burst 64k prio 2
    tc qdisc add dev $if parent 1:1 handle 101 sfq perturb 10

    # class for vlan1
    tc class add dev $if parent 1:1 classid 1:106 htb quantum 1000000 rate 1.00mbit ceil 1.00mbit burst 6k
    tc qdisc add dev $if parent 1:106 handle 107 sfq perturb 10
    tc filter add dev $if protocol all parent 1: prio 100 basic match "meta(vlan mask 0xfff eq ${vlan1})" flowid 1:106

    # class for vlan2
    tc class add dev $if parent 1:1 classid 1:108 htb quantum 1000000 rate 1.00mbit ceil 10.00mbit burst 6k
    tc qdisc add dev $if parent 1:108 handle 108 sfq perturb 10
    tc filter add dev $if protocol all parent 1: prio 100 basic match "meta(vlan mask 0xfff eq ${vlan2})" flowid 1:108

}

qos eth1 1234 1235
qos eth2 2345 2346

আজব, protocol allভ্যানিলা কার্নেলটিতে আমাকে ত্রুটি দিয়েছে। আমার আরও পরীক্ষা করা উচিত। ধন্যবাদ.
ব্রাউনিয়ান

1

ইন্টারফেসের মাধ্যমে যা চলছে তা ইউজারস্পেসে দৃশ্যমান হিসাবে ক্যাপচার করতে এবং ফিল্টারটি লেখার জন্য এটি ব্যবহার করার জন্য আমি ওয়্যারশার্ক ব্যবহার করার পরামর্শ দেব। আমি ভাবছি যদি সম্ভবত ইন্টারফেসটি কোনও কারণে ভিএলএএন ট্যাগগুলি সরিয়ে ফেলছে (স্বচ্ছভাবে সেতুতে কনফিগার করা সত্ত্বেও)। সম্ভবত এটি অতিরিক্ত ট্যাগ বা কিছু যুক্ত করছে?


না, এটি ভিএলএএন ট্যাগটি ছড়িয়ে দিচ্ছে না, অবশ্যই - সবকিছুই কাজ করে (শ্যাপারে থাকা ফিল্টারগুলি বাদ দিয়ে ট্রাফিকটি হার্ডওয়্যার সুইচে ট্রাঙ্কের মাধ্যমে স্যুইচ হয়ে যায়)। তবে আমি আরও কাছাকাছি দেখব। আমি ভিএলএএন ট্যাগ অফলোডের ক্ষমতার দিকে তাকিয়েছিলাম, কিন্তু এই ড্রাইভারগুলি ভিড অফলোড করতে সক্ষম নয়।
ব্রাউনিয়ান

tcpdumpসমস্ত ইন্টারফেসে vlan আইডি দেখায় bridgeএবং এটি পোর্ট করে।
ব্রাউনিয়ান

এখন আমার সুন্দর শেপার আন লিনাক্স কার্নেল ৩.৩.৪ কাজ করে, ৮০২২ কিউ ট্যাগ ফিল্টারিং বাদে সবকিছু দুর্দান্ত কাজ করে (আমি এটি ছাড়া বাঁচতে পারি)। সমস্যাটি অমীমাংসিত থেকে যায়। যাহোক তোমাকে ধন্যবাদ.
ব্রাউনিয়ান

1

আপনি ebtables সঙ্গে ভ্লান প্যাকেট চিহ্নিত করতে পারেন ।

# mark packets according to the vlan id
ebtables -i br0 -A PREROUTING -p 802_1Q --vlan-id 1 -j mark --mark-set 1
ebtables -i br0 -A PREROUTING -p 802_1Q --vlan-id 5 -j mark --mark-set 2

তারপরে চিহ্নের উপর ভিত্তি করে শেপিং লাগান। ebtables এবং iptables একই চিহ্নিত করে।

আমি নিজে এখনও এটি করিনি। সুতরাং এটি বরং একটি কুঁচক।


আমি সন্দেহ করি এটি 10 ​​জিবি লিঙ্কে সুচারুভাবে কাজ করবে ... আমি কোনও * টেবিল এড়াতে চাই। যাইহোক পরামর্শের জন্য ধন্যবাদ।
ব্রাউনিয়ান

@ উদ্যান আপনি কি ভাবেন যে আইপ্রুট 2 তে ঠিক একই ফিল্টারিং করা উচ্চতর পারফরম্যান্স হবে? এটি একই কার্নেল, একই কোড পাথ, একই অ্যালগরিদম। যতক্ষণ না আপনি দুর্ঘটনাক্রমে সংযোগ ট্র্যাকিং চালু করার মতো কিছু না করেন, আপনার কোনও পার্থক্য দেখা উচিত নয়। * টেবিল পারেন সম্পাদনাকে প্রভাবিত করা হয়েছে কারণ এটি করতে জটিল জিনিস অনেক না। তবে তার মানে এই নয় যে এটি হবে
টাইলার

@tylerl যেহেতু আমাকে আসলে iproute2 দিয়ে ফিল্টার করতে হবে (একই ভলানের শত শত গ্রাহক, ফিল্টার হ্যাশগুলির একগুচ্ছ) - প্রতিটি প্যাকেটের জন্য অন্য কোনও অতিরিক্ত চেক কর্মক্ষমতাকে প্রভাবিত করবে , আমি বিশ্বাস করি।
ব্রাউনিয়ান

0

reorder_hdrভ্লান ইন্টারফেসে বিকল্পটি বন্ধ করার চেষ্টা করুন । যদি পুনরায় অর্ডার শিরোনাম বিকল্প সক্ষম করা থাকে, তবে ফ্রেমগুলি থেকে ট্যাগগুলি সরানো হচ্ছে। কমান্ড দ্বারা এটি পরীক্ষা করুন ip -d link list dev vlan_iface


1
দয়া করে, আপনি কী পরিষ্কার করতে পারবেন, কখন এটি সরানো হবে এবং কখন এটি আবার sertedোকানো হবে? মানে, একটি ট্যাগযুক্ত ফ্রেমটি লিনাক্স ব্রিজের ভিতরে প্রবেশ করে এবং অন্য ইন্টারফেস থেকে ছেড়ে দেয় - কখন / কোথায় এই ট্যাগ ম্যানিপুলেশনগুলি ঘটে এবং কখন / কোথায় tcফিল্টারগুলি বলা হয়? আপনার কোনও মানচিত্রের লিঙ্ক আছে বা এর মতো? ধন্যবাদ!
ব্রাউনিয়ান

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