يدعم 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 هنا. هنا جدول موجز لهم.
يرجى ملاحظة أن جميع الأنفاق ، التي تظهر أمثلة إنشاءها هنا ، موجودة فقط حتى يتم إعادة تشغيل الخادم. إذا كنت ترغب في إنشاء نفق يتعافى بعد إعادة التشغيل ، ففكر في استخدام البرنامج الخفي لتكوين الشبكة ، مثل
NetworkManager ، أو استخدم الآلية المناسبة من توزيع Linux الذي تستخدمه.
أعزائي القراء! ما هي أنفاق لينكس التي تستخدمها؟