تقديم لينكس واجهات افتراضية: الأنفاق

يدعم Linux العديد من أنواع الأنفاق. هذا يربك المبتدئين الذين يجدون صعوبة في فهم الاختلافات في التكنولوجيا وفهم أي نفق من الأفضل استخدامه في موقف معين. ستقدم المادة ، التي نترجمها اليوم ، نظرة عامة مختصرة على واجهات الأنفاق الشائعة الاستخدام في نواة Linux. لن نتعمق في هذا الموضوع ، مع مراعاة الميزات العامة للأنفاق وخيارات استخدامها في Linux.



يعتقد مؤلف هذه المادة أن ما سيتم مناقشته هنا قد يكون ذا أهمية لكل شخص له علاقة بإدارة شبكات الكمبيوتر. يمكن الحصول على قائمة بواجهات النفق ، بالإضافة إلى معلومات مرجعية حول تكوين محدد ، باستخدام أمر ip link help iproute2 ip link help .

سيتم تغطية الواجهات الشائعة الاستخدام التالية: IPIP و SIT و ip6tnl و VTI و VTI6 و GRE و GRETAP و GRE6 و GRE6TAP و FOU و GUE و GENEVE و ERSPAN و IP6ERSPAN.

بعد قراءة هذه المقالة ، سوف تتعرف على ميزات هذه الواجهات ومعرفة الاختلافات بينها. سوف تتعلم كيفية إنشائها والتعرف على المواقف التي يتم استخدامها بشكل أفضل.

IPIP


نفق IPIP ، كما يوحي اسمه ، هو نفق يعمل في IP عبر وضع IP ( RFC 2003 ). رأس حزمة نفق IPIP كما هو موضح أدناه.


رأس حزمة نفق IPIP

تستخدم هذه الأنفاق بشكل شائع لتوصيل شبكتي IPv4 داخليتين عبر شبكة IPv4 عامة (الإنترنت). يؤدي استخدام IPIP إلى إنشاء حد أدنى من الحمل الإضافي على النظام ، ولكن لا يمكن إجراء سوى نقل البيانات أحادي الاتجاه (أحادي الإرسال) على هذا النفق. أي أنه بعد بناء مثل هذا النفق ، فلن يكون من الممكن استخدامه لنقل بيانات البث المتعدد.

تدعم أنفاق IPIP IP عبر IP و MPLS عبر أوضاع IP.

لاحظ أنه عند تحميل وحدة ipip ، أو عند إنشاء جهاز IPIP لأول مرة ، ستقوم نواة Linux بإنشاء جهاز tunl0 افتراضي في كل مساحة tunl0 مع السمات local=any و remote=any . عند تلقي حزم IPIP ، ستقوم النواة ، في بعض الحالات ، بإعادة توجيهها إلى tunl0 كجهاز افتراضي. يحدث هذا عندما لا تتمكن النواة من العثور على جهاز آخر تتطابق سماته local/remote بشكل وثيق مع عناوين المصدر والوجهة للحزم.

إليك كيفية إنشاء نفق IPIP:

على الخادم أ:

 # 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 

على الخادم 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 و REMOTE_INTERNAL_SUBNET و INTERNAL_IPV4_ADDR و REMOTE_INTERNAL_SUBNET بالعناوين المستخدمة في بيئتك. وينطبق الشيء نفسه على الأمثلة الأخرى من التكوينات ، والتي سننظر فيها لاحقًا.

SIT


SIT (انتقال بسيط للإنترنت) هي تقنية نفق هدفها الرئيسي هو توصيل شبكات IPv6 المعزولة عبر الإنترنت باستخدام بروتوكول IPv4.

في البداية ، يمكن أن تعمل تقنية SIT فقط في وضع الأنفاق "IPv6 عبر IPv4". ومع ذلك ، على مدار سنوات التنمية ، فقد اكتسب دعم العديد من الأنظمة الأخرى. على وجه الخصوص ، هو ipip (حدث الشيء نفسه مع نفق IPIP) ، ip6ip ، mplsip any .

يتم استخدام any وضع للتعامل مع حركة مرور IP و IPv6 ، والتي قد تكون مفيدة في بعض الحالات. كما تدعم أنفاق SIT ISATAP . هنا مثال على استخدام هذه التكنولوجيا.

رأس حزمة SIT كما هو موضح أدناه.


SIT رأس حزمة النفق

عند تحميل وحدة sit ، تقوم نواة Linux بإنشاء sit0 الافتراضي sit0 .

إليك كيفية إنشاء نفق SIT (يجب تنفيذ هذه الخطوات على الخوادم A و B):

 # 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

تدعم الأنفاق ip6ip6 ipip6 و ipip6 any أوضاع. يتم ipip6 وضع ipip6 بواسطة IPv4 عبر مخطط IPv6 ، ووضع ip6ip6 هو IPv6 عبر IPv6. any وضع يدعم كلا المخططات.

عند ip6tnl وحدة ip6tnl ، تنشئ نواة Linux جهازًا افتراضيًا يسمى ip6tnl0 .

إليك كيفية إنشاء نفق ip6tnl:

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

VTI و VTI6


تشبه واجهة Linux VTI (واجهة النفق الظاهري) واجهة Cisco VTI وتطبيق Juniper لنفق آمن (st.xx).

يقوم برنامج تشغيل الأنفاق هذا بتنفيذ تغليف IP ، والذي يمكن استخدامه مع xfrm لإنشاء أنفاق آمنة ثم استخدام أنفاق توجيه مستوى kernel عبر هذه الأنفاق.

بشكل عام ، تعمل أنفاق 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 تغليف الحزم لأي بروتوكول Layer 3 بنوع Ethernet صالح. هذا يميز تقنية GRE عن تقنية IPIP ، التي تدعم فقط تغليف حزم IP. إليك ما يبدو عليه رأس الحزمة عند استخدام تقنية GRE.


رأس حزمة النفق GRE

يرجى ملاحظة أن أنفاق GRE تسمح بدعم البث المتعدد و IPv6.

عند تحميل الوحدة النمطية gre ، ينشئ kernel Linux gre0 الافتراضي gre0 .

إليك كيفية إنشاء نفق GRE:

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

بينما تعمل أنفاق GRE في طبقة OSI 3 ، تعمل أنفاق GRETAP في طبقة OSI 2. وهذا يعني أن أحد الرؤوس الداخلية للحزم المعنية هو رؤوس Ethernet.


GRETAP Tunnel Package Header

إليك كيفية إنشاء نفق GRETAP:

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

GRE6 و GRE6TAP


GRE6 هو مكافئ IPv6 لـ GRE. تتيح لك أنفاق GRE6 تغليف أي بروتوكول طبقة 3 في IPv6. هذا هو ما يبدو عليه رأس حزمة GRE6.


رأس حزمة النفق GRE6

في أنفاق GRE6TAP ، كما في أنفاق GRETAP ، توجد رؤوس Ethernet بين رؤوس الرزم الداخلية.


GRE6TAP Tunnel Package Header

إليك كيفية إنشاء نفق GRE:

 # ip link add name gre1 type gre6 local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR # ip link add name gretap1 type gretap6 local LOCAL_IPv6_ADDR remote REMOTE_IPv6_ADDR 

FOU


يمكن إجراء النفق على مستويات مختلفة من مكدس الشبكة. توجد أنفاق IPIP و SIT و GRE في طبقة IP. وأنفاق FOU (يتم ترتيبها وفقًا لمخطط "foo over UDP") تعمل على مستوى UDP.

هناك بعض المزايا لاستخدام نفق UDP عبر نفق IP. الحقيقة هي أن بروتوكول UDP يعمل مع البنية الأساسية للأجهزة الحالية.

على سبيل المثال ، هذا هو RSS في بطاقات الشبكة ، ECMP في المحولات ، هذه تقنيات لحساب المجموع الاختباري دون مشاركة معالج مركزي. يظهر تطبيق تصحيح FOU المناسب على المطورين زيادة كبيرة في أداء SIT و IPIP.

حاليًا ، تدعم أنفاق FOU تغليف البروتوكول استنادًا إلى IPIP و SIT و GRE. إليك ما قد يبدو عليه رأس حزمة FOU.


FOU Tunnel Package Header

إليك كيفية إنشاء نفق 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 ، والذي يكون المنفذ المستهدف هو 5555.

يرجى ملاحظة أن أنفاق FOU غير مدعومة على Red Hat Enterprise Linux.

GUE


يتم تقديم نوع آخر من نفق UDP بواسطة تقنية GUE ( تغليف UDP العام ). الفرق بين FOU و GUE هو أن GUE لها رأسها الخاص ، والذي يحتوي على معلومات البروتوكول والبيانات الأخرى.

تدعم أنفاق GUE حاليًا التغليف الداخلي لـ IPIP و SIT و GRE. إليك ما قد يبدو عليه رأس حزمة GUE.


GUE Tunnel Package Header

إليك كيفية إنشاء نفق 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 Linux.

GENEVE


تدعم أنفاق GENEVE (تغليف المحاكاة الافتراضية للشبكة العامة) جميع ميزات XLAN و NVGRE و STT. تم تصميم تقنية GENEVE للتحايل على القيود المحددة لهذه التقنيات الثلاث. يعتقد الكثيرون أن هذه التكنولوجيا قادرة ، على المدى الطويل ، على استبدال هذه الأشكال الثلاثة القديمة بالكامل. إليك ما يبدو عليه رأس حزمة نفق GENEVE.


رأس حزمة نفق جنيف

يشبه هذا الرأس رأس حزمة VXLAN . الفرق الرئيسي بين الاثنين هو أن رأس GENEVE أكثر مرونة. يسهل تطبيق الميزات الجديدة عن طريق توسيع الرؤوس باستخدام حقول Type-Length-Value (TLV).

يمكن العثور على تفاصيل حول GENEVE هنا وهنا .

يتم استخدام GENEVE في حل الشبكة الافتراضية المفتوحة (OVN) SDN كأداة تغليف قياسية. إليك كيفية إنشاء نفق GENEVE:

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

ERSPAN و IP6ERSPAN


تستخدم تقنية Encapsulated Port Switched Analyzer (ERSPAN) مغلفة GRE لتوسيع القدرات الأساسية لعكس المنفذ من الطبقة 2 إلى الطبقة 3. يتيح لك ذلك إعادة توجيه حركة مرور لها نسخ متطابقة عبر شبكة IP موجهة. هذا هو ما يبدو عليه رأس حزمة ERSPAN.


ERSPAN Tunnel Package Header

تسمح أنفاق ERSPAN لمضيفي Linux بالعمل كمصدر لحركة مرور ERSPAN وإرسال حركة مرور ERSPAN لها نسخ متطابقة إما إلى مضيف بعيد أو إلى وجهة ERSPAN تستقبل وتتعامل مع حزم ERSPAN التي تم إنشاؤها بواسطة محولات Cisco أو الأجهزة الأخرى التي تدعم ERSPAN. يمكن استخدام نظام مماثل لتحليل وتشخيص الشبكة ، لاكتشاف حركة المرور الضارة.

يدعم Linux حاليًا معظم ميزات الإصدارين من ERSPAN - الإصدار 1 (النوع الثاني) و الإصدار الثاني (الإصدار الثالث).

إليك كيفية إنشاء أنفاق ERSPAN:

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

يمكنك أيضًا القيام بذلك:

 # 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 

أضف مرشح tc لمراقبة حركة المرور:

 # 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 

النتائج


لقد قمنا بتغطية عدد غير قليل من تقنيات الأنفاق في نظام Linux هنا. هنا جدول موجز لهم.

نفق / اتصال نوع
رأس الخارجي
مغلفة رأس
رأس الداخلية
IPIP
عناوين IPv4
لا شيء
عناوين IPv4
اعتصام
عناوين IPv4
لا شيء
IPv4 / IPv6
ip6tnl
عناوين IPv4
لا شيء
IPv4 / IPv6
VTI
عناوين IPv4
أمن بروتوكول الإنترنت
عناوين IPv4
vti6
الإصدار IPv6
أمن بروتوكول الإنترنت
الإصدار IPv6
GRE
عناوين IPv4
GRE
IPv4 / IPv6
gretap
عناوين IPv4
GRE
الأثير + IPv4 / IPv6
gre6
الإصدار IPv6
GRE
IPv4 / IPv6
gre6tap
الإصدار IPv6
GRE
الأثير + IPv4 / IPv6
فو
IPv4 / IPv6
UDP
IPv4 / IPv6 / GRE
غوي
IPv4 / IPv6
UDP + GUE
IPv4 / IPv6 / GRE
جنيف
IPv4 / IPv6
UDP + جنيف
الأثير + IPv4 / IPv6
erspan
عناوين IPv4
GRE + ERSPAN
IPv4 / IPv6
ip6erspan
الإصدار IPv6
GRE + ERSPAN
IPv4 / IPv6

يرجى ملاحظة أن جميع الأنفاق ، التي تظهر أمثلة إنشاءها هنا ، موجودة فقط حتى يتم إعادة تشغيل الخادم. إذا كنت ترغب في إنشاء نفق يتعافى بعد إعادة التشغيل ، ففكر في استخدام البرنامج الخفي لتكوين الشبكة ، مثل NetworkManager ، أو استخدم الآلية المناسبة من توزيع Linux الذي تستخدمه.

أعزائي القراء! ما هي أنفاق لينكس التي تستخدمها؟

Source: https://habr.com/ru/post/ar457386/


All Articles