ct action in tc(8) Linux ct action in tc(8)

tc-ct - اکشن رهگیری اتصال در ابزار کنترل ترافیک (tc)


tc ... action ct commit [ force ] [ zone ZONE ] [ mark MASKED_MARK ] [ label MASKED_LABEL ] [ nat NAT_SPEC ]

tc ... action ct [ nat ] [ zone ZONE ]

tc ... action ct clear

اکشن ct یک اکشن در ابزار tc برای ارسال بسته‌ها و تعامل با ماژول رهگیری اتصال (conntrack) در نت‌فیلتر (netfilter) است.

این اکشن می‌تواند (همان‌طور که در خلاصه دستور و به ترتیب نشان داده شده است) کارهای زیر را انجام دهد:

ارسال بسته به conntrack و ثبت (commit) اتصال، در حالی که یک نشان (mark) ۳۲ بیتی، یک برچسب (label) ۱۲۸ بیتی و NAT مبدأ/مقصد را پیکربندی می‌کند.

ارسال بسته به conntrack که بسته را با وضعیت اتصال و فراداده‌های پیکربندی‌شده (mark/label) علامت‌گذاری کرده و NAT پیکربندی‌شده قبلی را اجرا می‌کند.

پاک‌سازی وضعیت قبلی رهگیری اتصال در بسته.

مشخص کردن شماره ناحیه (zone) در conntrack که بسته باید از طریق آن به conntrack فرستاده شود.
مشخص کردن یک نشان (mark) ۳۲ بیتی ماسک‌شده برای تنظیم روی اتصال (تنها همراه با commit معتبر است).
مشخص کردن یک برچسب (label) ۱۲۸ بیتی ماسک‌شده برای تنظیم روی اتصال (تنها همراه با commit معتبر است).
که در آن NAT_SPEC := {src|dst} addr addr1[-addr2] [port port1[-port2]]

مشخص کردن مبدأ/مقصد و محدوده nat برای پیکربندی روی اتصال (تنها همراه با commit معتبر است).

پیکربندی nat مبدأ (src) یا مقصد (dst).
addr1/addr2 - آدرس‌های IPv4/IPv6
port1/port2 - شماره پورت‌ها
بازیابی هرگونه nat پیکربندی‌شده قبلی.
حذف هرگونه وضعیت conntrack و فراداده (mark/label) از بسته (باید تنها گزینه مشخص‌شده باشد).
اجبار جهت conntrack برای اتصالات از پیش ثبت‌شده، به طوری که جهت فعلی به جهت اصلی تبدیل شود (تنها همراه با commit معتبر است).

نمونه‌ای که دیوار آتش با قابلیت NAT را در ناحیه ۲ conntrack و نحوه استفاده از conntrack mark نشان می‌دهد:

# افزودن qdisc ورودی (ingress) روی رابط‌های eth0 و eth1
$ tc qdisc add dev eth0 ingress
$ tc qdisc add dev eth1 ingress
# تنظیم فیلترها روی eth0؛ اجازه باز کردن اتصالات جدید در ناحیه ۲ و انجام src nat + mark برای هر اتصال جدید
$ tc filter add dev eth0 ingress prio 1 chain 0 proto ip flower ip_proto tcp ct_state -trk \
action ct zone 2 pipe action goto chain 2
$ tc filter add dev eth0 ingress prio 1 chain 2 proto ip flower ct_state +trk+new \
action ct zone 2 commit mark 0xbb nat src addr 5.5.5.7 pipe action mirred egress redirect dev eth1
$ tc filter add dev eth0 ingress prio 1 chain 2 proto ip flower ct_zone 2 ct_mark 0xbb ct_state +trk+est \
action ct nat pipe action mirred egress redirect dev eth1
# تنظیم فیلترها روی eth1؛ تنها اجازه عبور اتصالات برقرار شده ناحیه ۲ و NAT معکوس (در این مورد dst nat)
$ tc filter add dev eth1 ingress prio 1 chain 0 proto ip flower ip_proto tcp ct_state -trk \
action ct zone 2 pipe action goto chain 1
$ tc filter add dev eth1 ingress prio 1 chain 1 proto ip flower ct_zone 2 ct_mark 0xbb ct_state +trk+est \
action ct nat pipe action mirred egress redirect dev eth0

tc(8), tc-flower(8), tc-mirred(8)

Paul Blakey <paulb@mellanox.com>

Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>

Yossi Kuperman <yossiku@mellanox.com>

14 May 2020 iproute2