Memperkenalkan Linux Virtual Interfaces: Tunnels

Linux mendukung banyak jenis terowongan. Ini membingungkan pemula yang merasa sulit untuk memahami perbedaan dalam teknologi dan memahami terowongan mana yang lebih baik untuk digunakan dalam situasi tertentu. Materi, terjemahan yang kami terbitkan hari ini, akan memberikan gambaran singkat tentang antarmuka tunneling yang umum digunakan dari kernel Linux. Kami tidak akan mempelajari secara mendalam topik ini, hanya mempertimbangkan fitur umum terowongan dan opsi untuk penggunaannya di Linux.



Penulis materi ini percaya bahwa apa yang akan dibahas di sini mungkin menarik bagi semua orang yang ada hubungannya dengan mengelola jaringan komputer. Daftar antarmuka terowongan, serta informasi referensi pada konfigurasi tertentu, dapat diperoleh dengan menggunakan perintah ip link help iproute2 ip link help .

Antarmuka yang umum digunakan berikut akan dibahas di sini: IPIP, SIT, ip6tnl, VTI dan VTI6, GRE dan GRETAP, GRE6 dan GRE6TAP, FOU, GUE, GENEVE, ERSPAN dan IP6ERSPAN.

Setelah membaca artikel ini, Anda akan belajar tentang fitur-fitur dari antarmuka ini dan mencari tahu perbedaan di antara mereka. Anda akan belajar cara membuatnya dan belajar tentang situasi di mana mereka paling baik digunakan.

IPIP


Terowongan IPIP, seperti namanya, adalah terowongan yang beroperasi dalam mode IP over IP ( RFC 2003 ). Header paket tunnel IPIP adalah seperti yang ditunjukkan di bawah ini.


Header paket tunnel IPIP

Terowongan semacam itu biasanya digunakan untuk menghubungkan dua subnet IPv4 internal melalui jaringan IPv4 publik (Internet). Penggunaan IPIP menciptakan beban tambahan minimal pada sistem, tetapi hanya transmisi data satu arah (unicast) yang dapat dilakukan pada terowongan semacam itu. Artinya, setelah membangun terowongan seperti itu, tidak akan mungkin menggunakannya untuk transmisi data multicast.

Terowongan IPIP mendukung IP over IP dan MPLS over mode IP.

Harap dicatat bahwa ketika modul ipip dimuat, atau ketika perangkat IPIP pertama kali dibuat, kernel Linux akan membuat perangkat tunl0 default di setiap namespace dengan atribut local=any dan remote=any . Saat menerima paket IPIP, kernel, dalam kasus tertentu, akan mengarahkan mereka ke tunl0 sebagai perangkat default. Ini terjadi ketika kernel tidak dapat menemukan perangkat lain yang atribut local/remote lebih cocok dengan sumber dan alamat tujuan paket.

Berikut cara membuat terowongan IPIP:

Di 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 

Di 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 

Harap dicatat bahwa ketika menggunakan konfigurasi ini, itu harus sejalan dengan data nyata. Secara khusus, LOCAL_IPv4_ADDR , REMOTE_IPv4_ADDR , INTERNAL_IPV4_ADDR dan REMOTE_INTERNAL_SUBNET perlu diganti dengan alamat yang digunakan di lingkungan Anda. Hal yang sama berlaku untuk contoh konfigurasi lainnya, yang akan kita bahas nanti.

Duduk


SIT (Simple Internet Transition) adalah teknologi tunneling yang tujuan utamanya adalah untuk menghubungkan jaringan IPv6 yang terisolasi melalui Internet menggunakan protokol IPv4.

Awalnya, teknologi SIT hanya bisa bekerja dalam mode tunneling "IPv6 over IPv4". Namun, selama bertahun-tahun pembangunan, telah mendapatkan dukungan dari beberapa rezim lagi. Secara khusus, itu adalah ipip (hal yang sama terjadi dengan terowongan IPIP), ip6ip , mplsip dan lainnya.

Mode apa pun digunakan untuk bekerja dengan lalu lintas IP dan IPv6, yang mungkin berguna dalam beberapa situasi. Terowongan SIT juga mendukung ISATAP . Berikut adalah contoh penggunaan teknologi ini.

Header dari paket SIT adalah seperti yang ditunjukkan di bawah ini.


Header paket tunnel SIT

Ketika modul sit dimuat, kernel Linux menciptakan sit0 default.

Berikut cara membuat terowongan SIT (langkah-langkah ini harus dilakukan pada server A dan 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


Antarmuka ip6tnl bekerja dalam mode IPv4 / IPv6 over IPv6. Ini mirip dengan versi IPv6 dari terowongan SIT. Inilah tampilan header paket ip6tnl.


Header paket tunnel IP6tnl

Terowongan Ip6tnl mendukung ip6ip6 , ipip6 dan mode any . Mode ipip6 diwakili oleh skema IPv4 over IPv6, mode ip6ip6 adalah IPv6 over IPv6. Mode apa pun mendukung kedua skema.

Ketika modul ip6tnl , kernel Linux menciptakan perangkat default yang disebut ip6tnl0 .

Berikut cara membuat terowongan ip6tnl:

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

VTI dan VTI6


Antarmuka Linux VTI (Virtual Tunnel Interface) mirip dengan antarmuka Cisco VTI dan implementasi Juniper dari secure tunnel (st.xx).

Driver tunneling ini mengimplementasikan enkapsulasi IP, yang dapat digunakan dengan xfrm untuk membuat terowongan yang aman dan kemudian menggunakan terowongan rute level kernel melalui terowongan tersebut.

Secara umum, terowongan VTI berfungsi seperti terowongan IPIP atau SIT. Pengecualian adalah bahwa mereka menggunakan enkapsulasi / dekapsulasi fwmark dan IPsec.

VTI6 adalah setara IPv6 dari VTI.

Berikut cara membuat terowongan 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 

Selain itu, IPsec dapat dikonfigurasi menggunakan libreswan atau strongSwan .

GRE dan GRETAP


Teknologi GRE (Generic Routing Encapsulation) dijelaskan dalam RFC 2784 . Dalam tunneling GRE, header GRE tambahan ditambahkan antara header paket IP internal dan eksternal.

Secara teoritis, GRE dapat merangkum paket dari setiap protokol Layer 3 dengan tipe Ethernet yang valid. Ini membedakan teknologi GRE dari teknologi IPIP, yang hanya mendukung enkapsulasi paket IP. Inilah tampilan header paket saat menggunakan teknologi GRE.


Header paket tunnel GRE

Harap dicatat bahwa terowongan GRE memungkinkan dukungan multicast dan IPv6.

Saat memuat modul gre , kernel Linux membuat gre0 default gre0 .

Berikut cara membuat terowongan GRE:

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

Sementara terowongan GRE beroperasi di OSI layer 3, terowongan GRETAP beroperasi di OSI layer 2. Ini berarti bahwa salah satu header internal dari paket masing-masing adalah header Ethernet.


Header Paket GRETAP Tunnel

Berikut cara membuat terowongan GRETAP:

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

GRE6 dan GRE6TAP


GRE6 adalah setara IPv6 dari GRE. Terowongan GRE6 memungkinkan Anda merangkum semua protokol layer 3 di IPv6. Ini adalah tampilan paket GRE6.


Header Paket Tunnel GRE6

Dalam terowongan GRE6TAP, seperti pada terowongan GRETAP, ada header Ethernet di antara header paket internal.


Header Paket Tunnel GRE6TAP

Berikut cara membuat terowongan 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


Tunneling dapat dilakukan di berbagai tingkat tumpukan jaringan. Terowongan IPIP, SIT, dan GRE ada di lapisan IP. Dan terowongan FOU (mereka diatur sesuai dengan skema "foo over UDP") beroperasi di tingkat UDP.

Ada beberapa keuntungan menggunakan tunneling UDP dibandingkan tunneling IP. Faktanya adalah protokol UDP bekerja dengan infrastruktur perangkat keras yang ada.

Sebagai contoh, ini adalah RSS di kartu jaringan, ECMP di switch, ini adalah teknologi untuk menghitung checksum tanpa partisipasi prosesor sentral. Menerapkan patch FOU yang sesuai untuk pengembang menunjukkan peningkatan signifikan dalam kinerja untuk SIT dan IPIP.

Saat ini, terowongan FOU mendukung enkapsulasi protokol berdasarkan IPIP, SIT, dan GRE. Beginilah tampilan tajuk paket FOU.


Header Paket FOU Tunnel

Berikut cara membuat terowongan 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 

Perintah pertama mengonfigurasi port FOU penerima untuk IPIP yang terikat ke 5555. Untuk menggunakan GRE, Anda harus menggunakan ipproto 47 . Perintah kedua mengkonfigurasi antarmuka IPIP virtual baru ( tun1 ), yang dirancang untuk enkapsulasi FOU, yang port targetnya adalah 5555.

Harap dicatat bahwa terowongan FOU tidak didukung di Red Hat Enterprise Linux.

Gue


Tipe lain dari tunneling UDP diperkenalkan oleh teknologi GUE ( Generic UDP Encapsulation ). Perbedaan antara FOU dan GUE adalah bahwa GUE memiliki header sendiri, yang berisi informasi protokol dan data lainnya.

Terowongan GUE saat ini mendukung enkapsulasi internal IPIP, SIT, dan GRE. Inilah tampilan header paket GUE.


Header Paket GUE Tunnel

Berikut cara membuat terowongan 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 

Berkat perintah ini, port GUE penerima untuk IPIP terikat ke nomor 5555 dan terowongan IPIP yang dikonfigurasi untuk enkapsulasi GUE akan dibuat.

Terowongan GUE tidak didukung di Red Hat Enterprise Linux.

GENEVE


Terowongan GENEVE (Generic Network Virtualization Encapsulation) mendukung semua fitur XLAN, NVGRE, dan STT. Teknologi GENEVE dirancang untuk menghindari keterbatasan yang diidentifikasi dari ketiga teknologi ini. Banyak yang percaya bahwa teknologi ini mampu, dalam jangka panjang, sepenuhnya menggantikan ketiga format yang lebih tua ini. Inilah yang terlihat seperti header paket tunnel GENEVE.


Header Paket Tunnel GENEVE

Header ini mirip dengan header paket VXLAN . Perbedaan utama antara keduanya adalah bahwa header GENEVE lebih fleksibel. Itu membuatnya sangat mudah untuk mengimplementasikan fitur-fitur baru dengan memperluas header menggunakan bidang Type-Length-Value (TLV).

Detail tentang GENEVE dapat ditemukan di sini dan di sini .

GENEVE digunakan dalam solusi SDN Open Virtual Network (OVN) sebagai alat enkapsulasi standar. Berikut cara membuat terowongan GENEVE:

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

ERSPAN dan IP6ERSPAN


Teknologi Encapsulated Remote Switched Port Analyzer (ERSPAN) menggunakan enkapsulasi GRE untuk memperluas kemampuan dasar mirroring port dari layer 2 ke layer 3. Ini memungkinkan Anda untuk meneruskan lalu lintas yang dicerminkan melalui jaringan IP yang diarahkan. Inilah tampilan header paket ERSPAN.


Header Paket ERSPAN Tunnel

Terowongan ERSPAN memungkinkan host Linux untuk bertindak sebagai sumber lalu lintas ERSPAN dan mengirim lalu lintas ERSPAN yang dicerminkan ke host jarak jauh atau ke tujuan ERSPAN yang menerima dan memproses paket ERSPAN yang dihasilkan oleh switch Cisco atau perangkat lain yang mendukung ERSPAN. Sistem serupa dapat digunakan untuk menganalisis dan mendiagnosis jaringan, untuk mendeteksi lalu lintas berbahaya.

Linux saat ini mendukung sebagian besar fitur dari dua versi ERSPAN - v1 (tipe II) dan v2 (tipe III).

Berikut cara membuat terowongan ERSPAN:

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

Anda juga dapat melakukan ini:

 # 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 

Tambahkan filter tc untuk memantau lalu lintas:

 # 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 

Ringkasan


Kami telah membahas beberapa teknologi tunneling di Linux di sini. Ini adalah tabel ringkasan untuk mereka.

Tunnel / Jenis Koneksi
Header luar
Header yang dienkapsulasi
Header dalam
ipip
IPv4
Tidak ada
IPv4
duduk
IPv4
Tidak ada
IPv4 / IPv6
ip6tnl
IPv4
Tidak ada
IPv4 / IPv6
vti
IPv4
IPsec
IPv4
vti6
IPv6
IPsec
IPv6
gre
IPv4
GRE
IPv4 / IPv6
Gretap
IPv4
GRE
Eter + IPv4 / IPv6
gre6
IPv6
GRE
IPv4 / IPv6
gre6tap
IPv6
GRE
Eter + IPv4 / IPv6
kamu
IPv4 / IPv6
UDP
IPv4 / IPv6 / GRE
gue
IPv4 / IPv6
UDP + GUE
IPv4 / IPv6 / GRE
gen
IPv4 / IPv6
UDP + Geneve
Eter + IPv4 / IPv6
erspan
IPv4
GRE + ERSPAN
IPv4 / IPv6
ip6erspan
IPv6
GRE + ERSPAN
IPv4 / IPv6

Harap dicatat bahwa semua terowongan, contoh-contoh pembuatan yang ditunjukkan di sini, hanya ada sampai server di-boot ulang. Jika Anda ingin membuat terowongan yang pulih setelah reboot, pertimbangkan untuk menggunakan daemon untuk mengkonfigurasi jaringan, seperti NetworkManager , atau gunakan mekanisme yang sesuai dari distribusi Linux yang Anda gunakan.

Pembaca yang budiman! Terowongan Linux apa yang Anda gunakan?

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


All Articles