| Flow filter in tc(8) | Linux | Flow filter in tc(8) |
نام (NAME)
tc-flow - فیلتر کنترل ترافیک مبتنی بر جریان (flow)
خلاصه دستور (SYNOPSIS)
- حالت نگاشت (Mapping mode):
tc filter ... flow map key KEY [ OPS ] [ OPTIONS ]
- حالت درهمسازی (Hashing mode):
tc filter ... flow hash keys KEY_LIST [ perturb secs ] [ OPTIONS ]
OPS := [ OPS ] OP
OPTIONS := [ divisor NUM ] [ baseclass ID ] [ match EMATCH_TREE ] [ action ACTION_SPEC ]
KEY_LIST := [ KEY_LIST ] KEY
OP := { or | and | xor | rshift | addend } NUM
ID := X:Y
KEY := { src | dst | proto | proto-src | proto-dst | iif | priority | mark | nfct | nfct-src | nfct-dst | nfct-proto-src | nfct-proto-dst | rt-classid | sk-uid | sk-gid | vlan-tag | rxhash }
توضیحات (DESCRIPTION)
دستهبند flow برای گسترش قابلیتهای درهمسازی (hashing) الگوریتم SFQ بدون نیاز به کدنویسی توابع درهمسازی جدید در هسته طراحی شده است. این دستهبند همچنین امکان نگاشت قطعی کلیدها به کلاسها را فراهم میکند.
گزینهها (OPTIONS)
- action ACTION_SPEC
- اعمال یک عملیات (action) از چارچوب عملیاتهای عمومی روی بستههای منطبق.
- baseclass ID
- یک آفست (میزان جابهجایی) برای شناسه کلاس (class ID) حاصل. ID میتواند root، none یا یک شناسه کلاس در مبنای شانزده (هگزادسیمال) به فرم [X:]Y باشد. مقدار X باید با هندل اصلی qdisc یا کلاس مطابقت داشته باشد (در صورت حذف، مقدار مناسب بهطور خودکار انتخاب میشود). اگر کل baseclass حذف شود، مقدار Y بهطور پیشفرض برابر با 1 خواهد بود.
- divisor NUM
- تعداد باکتها (بخشها) جهت مرتبسازی و دستهبندی. کلیدها به پیمانه (modulo) NUM محاسبه میشوند.
- hash keys KEY-LIST
- اجرای یک عملیات jhash2 روی کلیدهای مشخصشده در KEY-LIST. نتیجه (به پیمانه divisor در صورت تعیین) به عنوان شناسه کلاس در نظر گرفته میشود که به صورت اختیاری با مقدار baseclass آفست میگیرد. میتوان با استفاده از پارامتر perturb یک بازه زمانی (بر حسب ثانیه) تعیین کرد که پس از آن منبع آنتروپی jhash2 مجدداً بازسازی شود.
- map key KEY
- دادههای بسته که توسط KEY مشخص شدهاند، به شناسههای کلاسی که بسته باید به آنها هدایت شود ترجمه میشوند. این مقدار میتواند قبل از استفاده برای نگاشت، توسط OPS دستکاری و دگرگون شود. این عملیاتها به ترتیبی که در اینجا ذکر شده اعمال میشوند:
- and NUM
- انجام عملیات بیتی AND با مقدار عددی NUM.
- or NUM
- انجام عملیات بیتی OR با مقدار عددی NUM.
- xor NUM
- انجام عملیات بیتی XOR با مقدار عددی NUM.
- rshift NUM
- شیفت دادن مقدار KEY به سمت راست به اندازه NUM بیت.
- addend NUM
- افزودن NUM به مقدار KEY.
- match EMATCH_TREE
- تطبیق بستهها با استفاده از زیرساخت تطبیق گسترشیافته (extended match). برای توضیحات تفصیلی درباره ساختار نحوی مجاز در EMATCH_TREE به tc-ematch(8) مراجعه کنید.
کلیدها (KEYS)
در حالت نگاشت (mapping mode)، از یک کلید منفرد (پس از دگرگونی اختیاری) برای ساخت شناسه کلاس استفاده میشود. شناسه حاصل در بیشتر موارد قابل پیشبینی و استنتاج است. در حالت درهمسازی (hashing mode)، میتوان تعدادی کلید را تعیین کرد که درهمسازی روی آنها انجام شده و خروجی حاصل به عنوان شناسه کلاس به کار میرود. این شناسه از قبل قابل پیشبینی نیست و اگر بازه زمانی perturb تعیین شده باشد، حتی ممکن است در طول زمان برای یک جریان معین تغییر کند.
محدوده شناسههای کلاس را میتوان با گزینه divisor که به عنوان مقسومعلیه در محاسبه پیمانه (modulo) استفاده میشود، محدود کرد.
- src، dst
- استفاده از آدرس مبدأ یا مقصد به عنوان کلید. در مورد IPv4 و TIPC، این مقدار برابر با آدرس واقعی است. برای IPv6، آدرس ۱۲۸ بیتی با انجام عملیات XOR روی چهار کلمه ۳۲ بیتی، به یک مقدار ۳۲ بیتی خلاصه (fold) میشود. در سایر موارد، آدرس سوکت داخلی هسته (پس از خلاصه شدن به ۳۲ بیت در سیستمهای ۶۴ بیتی) استفاده میشود.
- proto
- استفاده از شماره پروتکل لایه چهارم به عنوان کلید.
- proto-src
- استفاده از درگاه (پورت) مبدأ لایه چهارم به عنوان کلید. در صورت عدم دسترسی، آدرس سوکت داخلی هسته به جای آن استفاده میشود.
- proto-dst
- استفاده از درگاه (پورت) مقصد لایه چهارم به عنوان کلید. در صورت عدم دسترسی، آدرس dst_entry داخلی هسته مرتبط پس از اعمال XOR با شماره پروتکل لایه سوم بسته، استفاده میشود.
- iif
- استفاده از ایندکس رابط شبکه ورودی به عنوان کلید.
- priority
- استفاده از اولویت بسته به عنوان کلید. معمولاً این مقدار برابر با مقدار DSCP/ECN در هدر IP است.
- mark
- استفاده از fwmark مربوط به netfilter به عنوان کلید.
- nfct
- استفاده از آدرس مدخل کانترک (conntrack) مرتبط به عنوان کلید.
- nfct-src، nfct-dst، nfct-proto-src، nfct-proto-dst
- اینها نسخههای آگاه از کانترک (conntrack-aware) برای src، dst، proto-src و proto-dst هستند. در صورت استفاده از NAT، اینها اساساً مقادیر هدر بسته پیش از اعمال NAT هستند.
- rt-classid
- استفاده از قلمرو (realm) مدخل جدول مسیریابی مقصد بسته به عنوان کلید.
- sk-uid
- sk-gid
- برای بستههای تولیدشده به صورت محلی، شناسه کاربر (UID) یا شناسه گروه (GID) که سوکت مبدأ به آن تعلق دارد به عنوان کلید استفاده میشود.
- vlan-tag
- استفاده از شناسه VLAN بسته به عنوان کلید.
- rxhash
- استفاده از هش جریان (flow hash) به عنوان کلید.
مثالها (EXAMPLES)
- درهمسازی کلاسیک SFQ:
-
tc filter add ... flow hash keys src,dst,proto,proto-src,proto-dst divisor 1024
- درهمسازی کلاسیک SFQ، اما با استفاده از اطلاعات کانترک (conntrack) جهت عملکرد صحیح همراه با NAT:
-
tc filter add ... flow hash keys nfct-src,nfct-dst,proto,nfct-proto-src,nfct-proto-dst divisor 1024
- نگاشت IPهای مقصد در محدوده 192.168.0.0/24 به شناسههای کلاس 1 تا 256:
-
tc filter add ... flow map key dst addend -192.168.0.0 divisor 256
- روش جایگزین برای مثال بالا:
-
tc filter add ... flow map key dst and 0xff
- همان مورد، اما با ترتیب معکوس:
-
tc filter add ... flow map key dst and 0xff xor 0xff
همچنین ببینید (SEE ALSO)
| 20 Oct 2015 | iproute2 |