NAT action in tc(8) Linux NAT action in tc(8)

tc-nat - کنش ترجمه آدرس بومی بدون وضعیت


tc ... action nat DIRECTION OLD NEW

DIRECTION := { ingress | egress }

OLD := IPV4_ADDR_SPEC

NEW := IPV4_ADDR_SPEC

IPV4_ADDR_SPEC := { default | any | all | in_addr[/{prefix|netmask}]

کنش nat امکان انجام NAT را بدون سربار conntrack فراهم می‌کند، که در صورت زیاد بودن تعداد جریان‌ها یا آدرس‌هایی که باید ترجمه شوند بسیار مطلوب است. این کنش به بهترین شکل در ترکیب با فیلتر u32 جهت جست‌وجوی کارآمد شمار زیادی از قواعد NAT بدون وضعیت در زمان ثابت (constant time) به کار می‌رود.

ترجمه آدرس‌های مقصد؛ یعنی انجام DNAT.
ترجمه آدرس‌های مبدأ؛ یعنی انجام SNAT.
آدرس‌هایی را مشخص می‌کند که باید ترجمه شوند.
آدرس‌هایی را مشخص می‌کند که OLD باید به آن‌ها ترجمه شوند.

قالب آدرس پذیرفته‌شده در OLD و NEW بسیار انعطاف‌پذیر است. این قالب می‌تواند شامل یکی از کلیدواژه‌های default، any یا all به نشانه آدرس IP تماماً صفر باشد، یا ترکیبی از آدرس IP و ماسک شبکه یا طول پیشوند باشد که با علامت اسلش (/) جدا شده‌اند. در هر صورت، مقدار ماسک (یا طول پیشوند) OLD برای NEW نیز استفاده می‌شود تا نگاشت یک‌به‌یک آدرس‌ها تضمین گردد.

ترجمه آدرس با استفاده از ترکیبی از عملیات‌های باینری انجام می‌شود. ابتدا آدرس اصلی (مبدأ یا مقصد) با مقدار OLD تطبیق داده می‌شود. در صورت تطابق آدرس اصلی، آدرس جدید با گرفتن بیت‌های آغازین از NEW (تعیین‌شده توسط ماسک شبکه OLD) و گرفتن بیت‌های باقی‌مانده از آدرس اصلی ساخته می‌شود.

پشتیبانی اولیه‌ای برای پروتکل‌های لایه بالاتر، یعنی TCP، UDP و ICMP وجود دارد. در حالی که برای دو مورد اول تنها محاسبه مجدد مجموع مقابله‌ای (checksum) انجام می‌گیرد، این کنش هدرهای تعبیه‌شده IP درون بسته‌های ICMP را نیز با ترجمه آدرس‌های مربوطه مدیریت می‌کند.

tc(8)

12 Jan 2015 iproute2