Apa perbedaan antara tun / tap vs bridge + vnet vs macvtap? (Untuk virtualisasi KVM)

28

Saya baru saja menemukan banyak cara berbeda untuk melakukan jejaring KVM. Tapi saya terjebak tentang apa cara yang benar untuk melakukannya. Saya menemukan bahwa openstack menggunakan macvtap untuk melakukan jaringan neutron. Dan itu terlihat bagus.

Tapi apa bedanya dan mengapa harus menggunakan setiap cara.

Cara 1 [LAMA? TUN / TAP]

http://www.shakthimaan.com/installs/debian-tun-tap-setup.html

/--------\   /----\   /----\   /----\   /--------\
|Internet|---|eth0|---|br0 |---|tap0|---|Guest NIC
\--------/   \----/   \----/   \----/   \--------/

Sudah usang, kan?

Way 2 [Bridge + Vnet] <- Itulah yang dilakukan virt-manager

http://www.linux-kvm.com/content/using-bridged-networking-virt-manager

Pada dasarnya Anda membuat antarmuka jembatan dengan antarmuka fisik Anda di dalam dan

auto br0
#iface br0 inet dhcp
iface br0 inet static
address 172.16.0.100
network 172.16.0.0
netmask 255.255.0.0
broadcast 172.16.255.255
gateway 172.16.0.1
   bridge_ports eth2
   bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

Dan ketika Anda memulai mesin virtual dari virt-manager, antarmuka vnet dibuat dan ditambahkan ke bridge. Setidaknya sampai di mana aku tahu. Tidak diperlukan antarmuka tun / tap.

Ini bekerja cukup baik untuk waktu yang lama, tetapi sekarang dengan cakep saya menemukan masalah.

https://bugs.launchpad.net/ubuntu/+source/core-network/+bug/1255516

Mengapa Anda dapat menambahkan antarmuka vnet baru ke jembatan tanpa antarmuka TAP?

Cara 3 [MACVTAP]

Terakhir adalah antarmuka macvtap.

http://virt.kernelnewbies.org/MacVTap

Ini menyalin antarmuka perangkat lunak TUN / TAP tetapi tidak dengan cara yang lebih baik. Tidak tahu bagaimana, tapi sepertinya lebih baik.

Apa kelebihan macvtap dibanding cara kedua?

Apa yang lebih baik?

Ada bantuan untuk ini?

Gonzalo Aguilar Delgado
sumber

Jawaban:

4

Itu sangat tergantung apa yang ingin Anda raih

  • TAP / TUN

Tidak masalah itu VM atau mesin fisik. TUN memberi Anda jaringan terowongan dan TAP perangkat. Singkatnya, Anda pergi melalui jaringan terowongan untuk menjangkau jaringan lain.

Misalnya, ketika mengkonfigurasi jaringan OpenVPN, Anda akan diberikan 10.8.0.6 pada klien Anda. Server VPN 10.8.0.1 merutekan permintaan Anda ke jaringan lain (mis. 192.168.xx) di belakang. Saat menggunakan TAP, Anda akan menerima IP (192.168.10.10/24) langsung dari jaringan target Anda (192.168.10.x / 24). Sederhana.

  • Jembatan

"Linux Bridge" menjembatani VNET (dari VM) ke ethernet fisik. Jika Anda menginginkan VM (berbasis KVM), bridge adalah keharusan antara vnet dan ethernet pada host

jffff
sumber
MMmmm. Terima kasih atas jawabannya tetapi itu benar-benar tidak menyelesaikan keraguan saya. Jika Anda melihat tautan, Anda akan menemukan bahwa ada lebih banyak alasan untuk menggunakan satu atau yang lain. Sebenarnya bridging sekarang tidak berfungsi dengan baik pada stack linux saat ini untuk vm. Jadi saya harus menggunakan MACVTAP.
Gonzalo Aguilar Delgado
2

Saya akan mengatakan itu tergantung pada kasus penggunaan Anda.

Otomatis menambah / menghapus host virtual?

Cobalah macvtap. Harus juga menjadi performanter dari macvlan (yang kira-kira seperti menambahkan MAC lain untuk perangkat fisik, infos tiba ada ditangani oleh tumpukan jaringan) atau jembatan tambahan, seperti macvtap melewati tumpukan jaringan entah bagaimana dan ekspor perangkat karakter tap langsung. Tapi jangan memaku saya pada itu. Selain keduanya (macvlan / macvtap) memiliki mode yang sama (VEPA / hairpin, bridging, private) yang sama, hairpinning hanya berfungsi jika switch Anda mendukung mode relay reflektif. (Paket yang tiba di sakelar fisik di port x harus dibiarkan meninggalkan sakelar di port yang sama x.)

Karena eth0 (atau yang mana pun yang Anda gunakan) dimasukkan ke mode promiscuous ketika menggunakan bridge, mode macvXXX dikatakan memiliki throughput yang lebih tinggi.

Mode juga menentukan 'jumlah' isolasi (dapatkah vhosts saling melihat lalu lintas? Bagaimana dengan hv?). Bagaimana ini bekerja di bawah tenda saya belum tahu.

veth (pasangan ethernet virtual) agak mirip untuk isolasi, Anda mendefinisikan dua antarmuka virtual, satu terhubung ke jembatan, yang lain ke VM Anda. Di sana isolasi dilakukan dengan menempatkan antarmuka-vm ke dalam namespace itu sendiri sehingga perangkat agak terisolasi. Semua lalu lintas berkumpul di jembatan, tetapi satu vhost tidak dapat melihat vNIC orang lain.

Jika Anda bekerja dengan jembatan, Anda memiliki konfigurasi tambahan yang harus dilakukan, dan ketika jembatan turun, demikian juga semua koneksi Anda. Saat membawa kembali jembatan, Anda mungkin harus menghubungkan kembali semua antarmuka virtual ke jembatan lagi (atau hanya me-reboot lengkap hv ...).

Intinya: Jika Anda tidak sering mengubah topologi Anda, pergilah dengan menjembatani saat Anda menemukan sebagian besar informasi di internet, yang lebih baik daripada membaca kode kernel. Heck, bahkan paket iproute2-doc itu sendiri tidak memiliki sebagian besar informasi yang sebenarnya dimiliki iproute2, bahkan ketika Anda menjalankan versi terbaru. Coba cari tahu tentang man ip-tcp_metricsdari halaman manual yang tersedia atau ip-crefs.ps ...

sja
sumber
Saya bahkan tidak ingat menulis ini, apalagi di mana saya menemukan semua informasi itu. :(
sjas
0

Metode-metode ini melakukan hal-hal yang secara fundamental berbeda. Untuk memahami alasannya, Anda perlu memahami model jejaring berlapis. Untuk tujuan kita di sini, layer 1, 2 dan 3 penting:

  • Lapisan 1 adalah lapisan fisik - ini menentukan hal-hal seperti kabel apa yang dapat Anda gunakan, pola tegangan / arus apa yang mewakili 1s dan 0s pada kabel itu, bagaimana perangkat di setiap ujung kabel menegosiasikan berapa bit rate yang mereka operasikan dan seterusnya.
  • Lapisan 2 adalah lapisan tautan - ini menentukan bahasa apa yang ada di setiap ujung kabel yang berbicara satu sama lain. Perangkat Ethernet pada lapisan ini memiliki hal-hal seperti bingkai dan alamat MAC.
  • Lapisan 3 adalah lapisan jaringan - ini menentukan bagaimana perangkat menggunakan tautan lapisan 2 langsung ke perangkat lain untuk mencapai perangkat ketiga yang tidak dapat dijangkau secara langsung di lapisan 2. Perangkat di lapisan ini memiliki alamat IP dan tabel perutean.

MACVLAN / MACVTAP

MACVLAN membuat perangkat layer 2 atau link layer virtual, dengan alamat MAC-nya sendiri, yang membagikan layer 1 atau layer fisik dengan perangkat yang ada. Kasus yang paling jelas dimengerti adalah di mana Anda memiliki perangkat Ethernet yang terhubung ke jaringan dan Anda membuat perangkat MACVLAN berdasarkan pada perangkat Ethernet itu; sekarang Anda memiliki dua "perangkat" Ethernet dengan alamat MAC yang berbeda tetapi keduanya mengirimkan frame mereka pada kabel yang sama. Saya akan berbicara tentang MACVTAP sedikit lebih jauh ke bawah.

Antarmuka MACVLAN dapat berinteraksi dalam beberapa cara berbeda dengan antarmuka Ethernet yang ada, khususnya ketika sebuah bingkai muncul di salah satu antarmuka yang merupakan alamat yang lain:

  • Dalam mode pribadi , bingkai dibuang; kedua antarmuka tidak mungkin saling berkomunikasi, hanya dengan perangkat eksternal.
  • Dalam mode vepa , frame dikirim melalui layer fisik seperti frame lainnya. Jika perangkat Anda dicolokkan ke sakelar yang cukup pintar untuk mengetahui bahwa frame tersebut perlu dikirim kembali ke port yang sama dengan saat ia tiba, maka itu akan diterima oleh lapisan fisik yang sama yang mengirimnya dan kemudian lapisan 2 akan gunakan MAC untuk mengirimkannya ke antarmuka jaringan yang dimaksud.
  • Dalam mode jembatan , ketika sebuah bingkai muncul di satu perangkat, itu diperiksa untuk melihat apakah itu ditujukan untuk yang lain dan jika demikian, itu dikirim ke sana tanpa melalui lapisan 1.
  • Ada juga beberapa mode yang lebih tidak jelas.

Perhatikan bahwa antarmuka MACVLAN memiliki batasan penting: Mereka tidak mampu belajar alamat. Jadi Anda tidak dapat menjembatani antarmuka MACVLAN ke perangkat fisik kedua dan berharap dapat menjangkau perangkat fisik kedua itu dari yang pertama. Ini berfungsi dengan antarmuka Ethernet asli tetapi tidak dengan antarmuka MACVLAN yang menyertainya.

TUN / TAP

Antarmuka TAP juga merupakan perangkat lapisan 2 virtual baru tetapi tanpa lapisan 1 yang melekat padanya. Sebagai gantinya, sebuah program bisa mendapatkan deskriptor file yang mewakili lapisan fisik. Ia kemudian dapat menulis data frame Ethernet mentah ke dalam deskriptor file tersebut dan kernel akan memperlakukannya seperti paket Ethernet lain yang diterimanya pada antarmuka fisik nyata.

Hal besar tentang antarmuka TAP adalah lapisan fisik berada dalam mode pengguna; setiap perangkat lunak dengan izin yang sesuai dapat menghasilkan frame Ethernet dengan cara apa pun yang disukainya dan mendorongnya menjadi sesuatu yang oleh kernel diperlakukan sama seperti antarmuka fisik nyata. Ini membuatnya sangat berguna untuk hal-hal seperti VPN dan tunneling; Anda dapat menulis perangkat lunak tunneling apa pun yang Anda suka di ruang pengguna dan tidak perlu mencampuri ruang kernel untuk memasukkan frame ke dalam tumpukan jaringan, Anda cukup membuat perangkat TAP dan menulis frame ke deskriptor file-nya.

Perangkat TUN sama seperti perangkat TAP kecuali mereka beroperasi pada layer 3, bukan layer 2 dan perangkat lunak mode pengguna harus menulis paket IP mentah ke dalam deskriptor file, bukan frame Ethernet mentah.

Kembali ke perangkat MACVTAP , ini adalah semacam campuran antara antarmuka MACVLAN dan TAP. Seperti antarmuka TAP, program mode pengguna bisa mendapatkan deskriptor file dan menulis frame Ethernet mentah ke dalamnya. Seperti antarmuka MACVLAN, frame-frame tersebut kemudian dikirim melalui lapisan fisik perangkat Ethernet yang sebenarnya. Ini memungkinkan Anda untuk dengan mudah menyesuaikan perangkat lunak yang ditulis untuk menggunakan perangkat TAP untuk menggunakan perangkat MACVLAN.

VNet

Ini secara konseptual mirip dengan jaringan TUN / TAP tetapi memiliki bidang kontrol yang lebih maju (sehingga perangkat lunak mode pengguna yang menggunakannya dapat mengkonfigurasi antarmuka lebih fleksibel) dan bidang data yang lebih optimal (sehingga Anda dapat memindahkan data melalui perangkat jaringan virtual lebih lanjut efisien).

Semua ini melakukan hal yang serupa tetapi memiliki kemampuan yang sedikit berbeda. Semuanya dapat digunakan untuk menghubungkan VM ke jaringan Ethernet:

  • Produk virtualisasi dapat mengambil frame Ethernet dari tamu dan menuliskannya ke dalam deskriptor file untuk perangkat TAP. Perangkat TAP itu dapat ditetapkan alamat IP-nya sendiri oleh tuan rumah, atau ia dapat bekerja keras ke jembatan bersama dengan antarmuka Ethernet untuk berbagi alamat IP tuan rumah, atau iptables dapat dikonfigurasi untuk meneruskan lalu lintas di atasnya menggunakan NAT.
  • Sebuah produk virtualisasi dapat membuat Ethernet membingkai dari tamu dan menuliskannya ke dalam deskriptor file untuk perangkat MACVTAP; ini kemudian ditransmisikan secara langsung pada lapisan fisik perangkat Ethernet, secara efektif memberikan VM perangkat Ethernet "nyata" (meskipun perlu dicatat bahwa dimungkinkan untuk membuat perangkat MACVLAN / MACVTAP untuk jenis antarmuka jaringan lain seperti jembatan).
  • Produk virtualisasi dapat menghubungkan driver virtio di tamu ke driver virtio di host untuk jaringan yang sangat efisien.
Tom
sumber