لینوکس انواع مختلفی از تونل‌ها را پشتیبانی می‌کند، امّا ممکن است بسیاری از کاربران جدید تفاوت‌های آنها را از یکدیگر به‌درستی تشخیص ندهند. اینکه کدامیک از آنها برایشان کارآیی لازم را دارد، ممکن است تبدیل به یک چالش شود. در این مطلب، معرفی کوتاهی از رابط‌های کاربری تونل در هسته لینوکس خواهیم داشت. البته هیچ‌گونه آنالیز کد به کدی صورت نگرفته و تنها به برخی ویژگی‌های ساده و کاربرد آنها در لینوکس اشاره شده است. احتمالاً بسیاری از کسانی که پیش‌زمینه ذهنی از شبکه دارند، اطلاعات جالبی در اینجا پیدا می‌کنند. در همین حال، با استفاده از فرمان ip link help می‌توانید لیستی از رابط‌های کاربری تونل در کنار تنظیمات خاص هر تونل مشاهده کنید.

انواع مختلف تونل در لینوکس

انواع مختلف تونل در لینوکس

پس از مطالعه این مطلب، تمام رابط‌های کاربری تونل رایج را خواهید شناخت. همچنین می‌توانید تفاوت‌های آنها را از یکدیگر تشخیص دهید، اینکه چه موقع از آنها استفاده کنید و چگونه آنها را بسازید. با ما همراه باشید.

تونل IPIP

تونل IPIP همان‌طور که از اسمش برمی‌آید، یک تونل IP بر روی IP است که در RFC 2003 تعریف شده است. هدر تونل IPIP شبیه به زیر خواهد بود.

هدر تونل IPIP از انواع تونل در لینوکس

هدر تونل IPIP

این نونل معمولاً برای اتصال دو زیرشبکه داخلی IPv4 از طریق اینترنت عمومی IPv4 مورد استفاده قرار می‌گیرد. این تونل با اینکه کمترین بار را ایجاد می‌کند، امّا تنها می‌تواند ترافیک یونیکست IPv4 را انتقال دهد. به این معنا که شما نمی‌توانید اطلاعات مولتی‌کست را با تونل IPIP ارسال کنید.

تونل IPIP از هر دو عملکرد IP در IP و MPLS در IP پشتیبانی می‌کند.

نکته: وقتی ماژول ipip بارگذاری می‌شود و یا دستگاه IPIP برای اولین بار ایجاد می‌گردد، هسته لینوکس یک دستگاه پیش‌فرض tunl0 در هر namespace می‌سازد. این دستگاه با تنظیمات local=any و remote=any همراه است. هنگامی که هسته پاکت‌های پروتکل IPIP را دریافت می‌کند، در صورتی که دستگاه مطابق محلی یا ریموت دیگری را پیدا نکند، آنها را به tunl0 ارجاع می‌دهد.

به این صورت یک تونل IPIP ایجاد می‌کنیم.


On Server A:

# ip link add name ipip0 type ipip local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR

# ip link set ipip0 up

# ip addr add INTERNAL_IPV4_ADDR/24 dev ipip0

Add a remote internal subnet route if the endpoints don't belong to the same subnet

# ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0

On Server B:

# ip link add name ipip0 type ipip local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR

# ip link set ipip0 up

# ip addr add INTERNAL_IPV4_ADDR/24 dev ipip0

# ip route add REMOTE_INTERNAL_SUBNET/24 dev ipip0

نکته: حتماً عبارت‌های LOCAL_IPv4_ADDR، REMOTE_IPv4_ADDR، INTERNAL_IPV4_ADDR و REMOTE_INTERNAL_SUBNET را مطابق با آدرس‌هایی که با ‌آنها کار می‌کنید، تغییر دهید. همین موضوع در مورد تنظیمات مثال بعدی نیز صدق می‌کند.

تونل SIT

SIT مخفف عبارتی در انگلیسی به معنای «انتقال ساده اینترنت» است. هدف اساسی از این تونل، ارتباط داخلی شبکه‌های ایزوله IPv6 است. این شبکه‌ها در اینترنت جهانی IPv4 قرار دارند.

این تونل در ابتدا تنها دارای حالت IPv6 به روی IPv4 بوده است. امّا بعد از چند سال که از توسعه آن گذشته، پشتیبانی برای حالت‌های مختلف مانند ipip، ip6ip، mplsip و any را اضافه کرده است. حالت any برای قبول ترافیک IP و IPv6 مورد استفاده قرار می‌گیرد که برای برخی عملیات توسعه بسیار مفید خواهد بود. تونل SIT همچنین از ISATA نیز پشتیبانی می‌کند که نمونه‌ای از کاربرد آن را در زیر می‌بینید.

هدر تونل SIT ظاهری شبیه به زیر خواهد داشت.

هدر تونل SIT از انواع تونل در لینوکس

هدر تونل SIT

وقتی ماژول sit بارگذاری می‌شود، هسته لینوکس یک دستگاه پیش‌فرض به نام sit0  ایجاد خواهد کرد.

در اینجا، نحوه ساخت یک تونل SIT را مشاهده می‌کنید.


On Server A:

# ip link add name sit1 type sit local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR mode any

# ip link set sit1 up

# ip addr add INTERNAL_IPV4_ADDR/24 dev sit1

سپس باید همین کار را برای سیستم ریموت نیز انجام دهید.

تونل ip6tnl

ip6tnl یک رابط کاربری تونل IPv4/IPv6 به روی IPv6 است و بیشتر شبیه به یک نسخه IPv6 از تونل SIT به نظر می‌رسد. هدر این تونل ظاهری شبیه به زیر دارد.

هدر تونل ip6tnl انواع تونل در لینوکس

هدر تونل ip6tnl

تونل ip6tnl از حالت‌های ip6ip6، ipip6 و any پشتیبانی می‌کند. حالت ipip6 به صورت IPv4 در IPv6 است و حالت ip6ip6 به معنای IPv6 در IPv6 خواهد بود. همچنین در حالت any، از هر دو پروتکل IPv4/IPv6 به روی IPv6 پشتیبانی می‌شود.

وقتی ماژول ip6tnl بارگذاری می‌شود، هسته لینوکس یک دستگاه پیش‌فرض به نام ip6tnl0  ایجاد خواهد کرد.

در اینجا نحوه ساخت یک تونل ip6tnl را مشاهده می‌کنید.


# ip link add name ipip6 type ip6tnl local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR mode any

VTI و VTI6

رابط کاربری مجازی یا VTI در لینوکس بسیار شبیه به VTI در Cisco و تونل امن Juniper است. این ابزار خاص تونل در لینوکس از مشخصه فشرده‌سازی IP استفاده می‌کند که در کنار xfrm منجر به ایجاد یک تونل امن می‌شود. این ابزار سپس از روتینگ هسته به عنوان اولویت نخست خود استفاده می‌کند.

از نقطه‌نظر کلی، تونل‌های VTI عملکردی شبیه به تونل‌های ipip یا sit دارند؛ با این تفاوت که آنها ویژگی fwmark و IPsec encapsulation/decapsulation را اضافه می‌کنند.

درنظر داشته باشید که VTI6 معادل IPv6 برای VTI است.

در اینجا نحوه ساخت یک VTI را مشاهده می‌کنید.


# ip link add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR

# ip link set vti1 up

# ip addr add LOCAL_VIRTUAL_ADDR/24 dev vti1

 

# ip xfrm state add src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR spi SPI PROTO ALGR mode tunnel

# ip xfrm state add src REMOTE_IPv4_ADDR dst LOCAL_IPv4_ADDR spi SPI PROTO ALGR mode tunnel

# ip xfrm policy add dir in tmpl src REMOTE_IPv4_ADDR dst LOCAL_IPv4_ADDR PROTO mode tunnel mark VTI_KEY

# ip xfrm policy add dir out tmpl src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR PROTO mode tunnel mark VTI_KEY

همچنین امکان تنظیم IPsec با استفاده از ابزار libreswan یا  strongSwan را خواهید داشت.

GRE و GRETAP

«فشرده‌سازی روتینگ عمومی» یا به اختصار GRE، در استاندارد RFC 2784 تعریف شده است.

تونل GRE باعث اضافه‌شدن یک هدر GRE بین هدرهای IP بیرونی و داخلی می‌شود. از لحاظ تئوری، GRE  برخلاف IPIP که تنها قابلیت فشرده‌سازی IP را دارد، امکان فشرده‌سازی هر نوع پروتکل Layer 3 با هر Ethernet معتبر را خواهد داشت. هدر GRE داری شبیه به زیر است.

هدر تونل GRE انواع تونل در لینوکس

هدر تونل GRE

به خاطر داشته باشید که می‌توانید ترافیک‌های مولتی‌کست و IPv6 را از طریق تونل GRE عبور دهید.

وقتی ماژول gre بارگذاری می‌شود، هسته لینوکس یک دستگاه پیش‌فرض به نام gre0 ایجاد می‌کند.

نحوه ساخت یک تونل GRE را نیز در زیر می‌بینید.

# ip link add name gre1 type gre local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR [seq] key KEY

در حالی که تونل‌های GRE در بستر OSI Layer 3 کار می‌کنند، تونل نوع GRETAP در بستر OSI Layer 2 عمل می‌کند. به این معنا که یک هدر Ethernet درون هدر داخلی خواهیم داشت.

هدر تونل GRETAP انواع تونل در لینوکس

هدر تونل GRETAP

نحوه ساخت تونل GRETAP به این صورت است.


# ip link add name gretap1 type gretap local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR

IP6GRE و IP6GRETAP

IP6GRE یک معادل IPv6 برای GRE محسوب می‌شود و به کاربر اجازه می‌دهد که هر نوع پروتکل Layer 3 را بر روی IPv6 فشرده‌سازی کند. هدر این تونل ظاهری شبیه به زیر دارد.

هدر تونل IP6GRE از انواع تونل در لینوکس

هدر تونل IP6GRE

IP6GRETAP همانند GRETAP دارای یک هدر Ethernet درون هدر داخلی خواهد بود.

هدر تونل IP6GRETAP از انواع تونل در لینوکس

هدر تونل IP6GRETAP

در اینجا نحوه ساخت یک تونل IP6GRE را می‌بینیم.


# ip link add name gre1 type ip6gre local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR

# ip link add name gretap1 type ip6gretap local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR

تونل FOU

«تونل‌کردن» می‌تواند در سطوح مختلفی در یک شبکه انجام شود. تونل‌های IPIP، SIT و GRE در سطح IP عمل می‌کنند.  این در حالی است که عملکرد تونل FOU در سطح UDP است. تونل‌کردن در سطح UDP مزایای خاص خود را خواهد داشت؛ چرا که UDP با زیرساخت‌های کنونی HW مانند RSS در NIC ها و ECMP در سوئیچ‌ها سازگار است. عملکرد این تونل نسبت به پروتکل‌های SIT و IPIP ارتقای قابل‌توجهی را نشان می‌دهد.

در حال حاضر، تونل FOU از پروتکل فشرده‌سازی مبتنی IPIP، SIT و GRE پشتیبانی می‌کند. یک نمونه از هدر FOU به صورت زیر خواهد بود.

هدر تونل FOU از انواع تونل در لینوکس

هدر تونل FOU

نحوه ایجاد یک تونل FOU


# ip fou add port 5555 ipproto 4

# ip link add name tun1 type ipip remote 192.168.1.1 local 192.168.1.2 ttl 225 encap fou encap-sport auto encap-dport 5555

اولین فرمان باعث تنظیم یک تونل FOU برای دریافت IPIP محدود به 5555  می‌شود. برای GRE شما تنظیم ipproto 47 را انجام دهید. دومین فرمان یک رابط کاربری مجازی جدید IPIP با نام tun1 برای فشرده‌سازی FOU ایجاد می‌کند.

نکته: تونل FOU در لینوکس Red Hat Enterprise پشتیبانی نمی‌شود.

تونل GUE

فشرده‌سازی عمومی UDP یا به اختصار GUE، نوع دیگری از تونل UDP در لینوکس به شمار می‌رود. تفاوت بین FOU و GUE در این است که GUE هدر فشرده‌سازی مخصوص به خودش را دارد. این هدر شامل اطلاعات مرتبط با پروتکل و داده‌های دیگر است.

در حال حاضر، تونل GUE از فشرده‌سازی IPIP، SIT و GRE پشتیبانی می‌کند. یک هدر نمونه GUE به صورت زیر خواهد بود.

هدر تونل GUE از انواع تونل در لینوکس

هدر تونل GUE

در اینجا نحوه ایجاد یک تونل GUE را مشاهده می‌کنید.


# ip fou add port 5555 gue

# ip link add name tun1 type ipip remote 192.168.1.1 local 192.168.1.2 ttl 225 encap gue encap-sport auto encap-dport 5555

در نتیجه، یک پورت دریافت GUE برای IPIP محدود به 5555 تنظیم می‌شود. همچنین یک تونل IPIP برای فشرده‌سازی GUE ایجاد می‌گردد.

نکته: GUE نیز در لینوکس Red Hat Enterprise پشتیبانی نمی‌شود.

تونل GENEVE

فشرده‌سازی شبیه‌سازی شبکه عمومی یا به عبارت مختصر GENEVE از تمام قابلیت‌های VXLAN، NVGRE و STT پشتیبانی می‌کند. این تونل برای پشت‌سر گذاشتن محدودیت‌های این پروتکل‌ها طراحی شده است.  بسیاری بر این عقیده‌اند که GENEVE به‌راحتی می‌تواند جایگزین این فرمت‌های اولیه شود. هدر تونل دارای ظاهری شبیه به زیر است.

هدر تونل GENEVE از انواع تونل در لینوکس

هدر تونل GENEVE

این هدر بسیار شبیه به VXLAN است. تفاوت اصلی در انعطاف‌پذیر بودن هدر GENEVE است.  به‌راحتی می‌تواند با گسترش هدر با یک فیلد TLV جدید، مشخصه‌های جدید به این تونل اضافه کدر.

شبکه مجازی باز یا OVN از GENEVE به عنوان پروتکل فشرده‌سازی پیش‌فرض استفاده می‌کند. در اینجا نحوه ساخت یک تونل GENEVE را مشاهده می‌کنید.


# ip link add name geneve0 type geneve id VNI remote REMOTE_IPv4_ADDR

ERSPAN و IP6ERSPAN

ERSPAN که مخفف عبارت Encapsulated Remote Switched Port Analyzer در انگلیسی است، از فشرده‌سازی GRE برای گسترش قابلیت‌ آینه‌ای پورت پایه از Layer 2 به Layer 3 می‌کند. این قابلیت به تونل ERSPAN اجازه می‌دهد که ترافیک آینه‌ای را از طریق یک شبکه IP هدایت‌شونده انتقال دهد. هدر ERSPAN به صورت زیر است.

هدر تونل ERSPAN از انواع تونل در لینوکس

هدر تونل ERSPAN

آشتونل ERSPAN به هاست لینوکس این امکان را می‌دهد که به عنوان یک منبع ترافیک ERSPAN عمل کند و ترافیک آینه‌ای ERSPAN را به یک هاست ریموت یا یک مقصد ERSPAN انتقال دهد. این فرآیند و تنظیمات آن می‌تواند برای آنالیز، بررسی و تشخیص ترافیک‌های جعلی و آسیب‌رسان مورد استفاده قرار گیرد.

لینوکس در حال حاضر از بسیاری قابلیت‌ها دو نسخه ERSPAN، یعنی v1 (type II) و v2 (type III) پشتیبانی می‌کند.

در اینجا نحوه ساخت یک تونل ERSPAN را می‌بینیم.


# ip link add dev erspan1 type erspan local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR seq key KEY erspan_ver 1 erspan IDX

or

# ip link add dev erspan1 type erspan local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR seq key KEY erspan_ver 2 erspan_dir DIRECTION erspan_hwid HWID

Add tc filter to monitor traffic

# tc qdisc add dev MONITOR_DEV handle ffff: ingress

# tc filter add dev MONITOR_DEV parent ffff: matchall skip_hw action mirred egress mirror dev erspan1

جمع‌بندی

در اینجا خلاصه‌ای از تونل‌هایی که در بالا معرفی شدند، ملاحظه می‌کنید.

نوع لینک/ تونل هدر خروجی هدر فشرده‌سازی هدر داخلی
ipip IPv4 None IPv4
sit IPv4 None IPv4/IPv6
ip6tnl IPv6 None IPv4/IPv6
vti IPv4 IPsec IPv4
vti6 IPv6 IPsec IPv6
gre IPv4 GRE IPv4/IPv6
gretap IPv4 GRE Ether + IPv4/IPv6
ip6gre IPv6 GRE IPv4/IPv6
ip6gretap IPv6 GRE Ether + IPv4/IPv6
fou IPv4/IPv6 UDP IPv4/IPv6/GRE
gue IPv4/IPv6 UDP + GUE IPv4/IPv6/GRE
geneve IPv4/IPv6 UDP + Geneve Ether + IPv4/IPv6
erspan IPv4 GRE + ERSPAN IPv4/IPv6
ip6erspan IPv6 GRE + ERSPAN IPv4/IPv6

نکته: تمام تنظیمات در این آموزش به صورت موقتی بوده و پس از راه‌اندازی مجدد سیستم از بین می‌روند. اگر قصد تنظیمات همیشگی برای سرور دارید، حتماً از ابزار‌های تنظیمات شبکه مانند NetworkManager استفاده نمایید.