ความแตกต่างระหว่าง tun / tap vs bridge + vnet vs macvtap คืออะไร (สำหรับการจำลองเสมือน KVM)


28

ฉันเพิ่งค้นพบวิธีต่างๆมากมายในการทำเครือข่าย KVM แต่ฉันติดอยู่กับสิ่งที่ถูกต้องที่จะทำ ฉันค้นพบว่า openstack ใช้ macvtap เพื่อทำเครือข่ายนิวตรอน และมันก็ดูดี

แต่ความแตกต่างคืออะไรและทำไมต้องใช้แต่ละวิธี

วิธีที่ 1 [เก่า? TUN / TAP]

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

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

เลิกใช่ไหม?

วิธีที่ 2 [Bridge + Vnet] <- นั่นคือสิ่งที่ virt-manager ทำ

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

โดยพื้นฐานแล้วคุณสร้างสะพานเชื่อมต่อกับส่วนต่อประสานทางกายภาพของคุณภายในและ

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

และเมื่อคุณเริ่มเครื่องเสมือนจาก virt-manager จะมีการสร้างและเพิ่มส่วนต่อประสาน vnet ในบริดจ์ อย่างน้อยก็จนกว่าฉันจะรู้ ไม่จำเป็นต้องมีอินเตอร์เฟซแบบ tun / tap

มันใช้งานได้ค่อนข้างนาน แต่ตอนนี้ทะลึ่งฉันเจอปัญหา

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

ทำไมคุณสามารถเพิ่มอินเตอร์เฟส vnet ใหม่ลงในบริดจ์โดยไม่ต้องใช้อินเตอร์เฟส TAP ได้

วิธีที่ 3 [MACVTAP]

สุดท้ายคืออินเตอร์เฟส macvtap

http://virt.kernelnewbies.org/MacVTap

มันคัดลอกอินเทอร์เฟซซอฟต์แวร์ TUN / TAP แต่ทำได้ดีกว่า ไม่รู้ทาง แต่ดูเหมือนจะดีกว่า

ประโยชน์ของ macvtap ในทางที่สองคืออะไร

มีอะไรดีกว่ากัน

ความช่วยเหลือเกี่ยวกับเรื่องนี้?

คำตอบ:


4

มันขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ

  • TAP / TUN

ไม่สำคัญว่าจะเป็น VM หรือเครื่องจริง TUN นำเครือข่ายอุโมงค์และอุปกรณ์ TAP มาให้คุณ กล่าวโดยย่อคือคุณต้องผ่านเครือข่ายอุโมงค์เพื่อเข้าถึงเครือข่ายอื่น

ตัวอย่างเช่นเมื่อกำหนดค่าเครือข่าย OpenVPN คุณจะได้รับ 10.8.0.6 จากลูกค้าของคุณ เซิร์ฟเวอร์ VPN 10.8.0.1 กำหนดเส้นทางคำขอของคุณไปยังเครือข่ายอื่น (เช่น 192.168.xx) ที่อยู่เบื้องหลัง เมื่อใช้ TAP คุณจะได้รับ IP (192.168.10.10/24) โดยตรงจากเครือข่ายเป้าหมายของคุณ (192.168.10.x / 24) ง่าย

  • สะพาน

"Linux Bridge" เชื่อมต่อ VNET (จาก VM) ไปยังอีเธอร์เน็ตจริง หากคุณต้องการ VM (ตาม KVM) บริดจ์เป็นสิ่งที่ต้องมีระหว่าง vnet และ ethernet บนโฮสต์


mmmmm ขอบคุณสำหรับคำตอบ แต่จริงๆแล้วมันไม่ได้แก้ไขข้อสงสัยของฉัน หากคุณเห็นลิงก์คุณจะพบว่ามีเหตุผลมากขึ้นที่จะใช้ลิงก์ใดลิงค์หนึ่ง ในความเป็นจริงการเชื่อมโยงไม่สามารถทำงานได้ดีกับ linux stack ปัจจุบันสำหรับ vm ดังนั้นฉันต้องใช้ MACVTAP
กอนซาโล่อากีลาร์เดลกาโด

2

ฉันว่ามันขึ้นอยู่กับกรณีการใช้งานของคุณ

เพิ่ม / ลบอัตโนมัติของโฮสต์เสมือน?

ลอง macvtap ควรเป็นตัวดำเนินการมากกว่า macvlan (ซึ่งค่อนข้างเหมือนกับการเพิ่ม MAC อื่นลงในอุปกรณ์ทางกายภาพข่าวสารที่มาถึงจะถูกจัดการโดยเครือข่ายสแต็ก) หรือบริดจ์เพิ่มเติมเนื่องจาก macvtap ข้ามสแต็กเครือข่ายอย่างใดและส่งออกอุปกรณ์อักขระตัวอักษรโดยตรง แต่อย่าตอกย้ำฉันลงไป นอกจากนี้ทั้งสอง (macvlan / macvtap) แบ่งปันโหมดเดียวกันที่มีอยู่ (VEPA / กิ๊บ, บริดจ์, ส่วนตัว), การปักผมจะทำงานเฉพาะในกรณีที่สวิตช์ของคุณรองรับโหมดรีเลย์สะท้อนแสง (แพ็คเก็ตที่มาถึงสวิตช์ทางกายภาพที่พอร์ต x จะต้องได้รับอนุญาตให้ออกจากสวิตช์อีกครั้งบนพอร์ตเดียวกัน x)

เนื่องจาก eth0 (หรืออย่างใดอย่างหนึ่งที่คุณใช้) จะถูกใส่ลงในโหมด promiscuous เมื่อใช้สะพานโหมด macvXXX จึงถูกกล่าวว่ามี throughput สูงกว่า

โหมดยังกำหนด 'จำนวน' ของการแยก (สามารถ vhosts เห็นแต่ละอื่น ๆ ปริมาณการใช้งานหรือไม่วิธีการเกี่ยวกับ hv?) วิธีการทำงานภายใต้ประทุนที่ฉันยังไม่รู้

veth's (คู่อีเทอร์เน็ตเสมือน) ค่อนข้างคล้ายกับการแยกคุณกำหนดสองอินเทอร์เฟซเสมือนหนึ่งได้รับการเชื่อมต่อกับสะพานอื่น ๆ กับ VM ของคุณ การแยกจะทำโดยการใส่ vm-interface เข้าไปใน namespace ของมันเองเพื่อให้อุปกรณ์แยกได้ การจราจรทั้งหมดมารวมกันที่สะพาน แต่ vhost หนึ่งไม่สามารถมองเห็น vNIC อื่น

ในกรณีที่คุณทำงานกับบริดจ์คุณมีการกำหนดค่าเพิ่มเติมที่ต้องทำและเมื่อสะพานไม่ทำงานดังนั้นการเชื่อมต่อทั้งหมดของคุณ เมื่อนำบริดจ์กลับมาคุณอาจต้องเชื่อมต่ออินเทอร์เฟซเสมือนทั้งหมดกลับไปที่บริดจ์อีกครั้ง (หรือเพียงแค่รีบูต hv ... ทั้งหมด

ด้านล่างบรรทัด: ถ้าคุณไม่เปลี่ยนโทโพโลยีของคุณบ่อยครั้งเพียงแค่ไปเชื่อมต่อในขณะที่คุณค้นหาข้อมูลส่วนใหญ่บนโลกออนไลน์ซึ่งดีกว่าการอ่านรหัสเคอร์เนล Heck แม้แต่แพคเกจ iproute2-doc เองก็ยังขาดข้อมูล iproute2 ส่วนใหญ่ที่มีอยู่แม้ว่าคุณจะเรียกใช้เวอร์ชั่นที่มีเลือดไหล ลองค้นหาman ip-tcp_metricsจาก manpages หรือ ip-crefs.ps ที่มีอยู่ ...


ฉันไม่จำแม้แต่เขียนสิ่งนี้มากน้อยที่ฉันพบข้อมูลทั้งหมดที่ :(
sjas

0

วิธีการเหล่านี้กำลังทำสิ่งที่แตกต่างกันโดยพื้นฐาน เพื่อให้เข้าใจว่าทำไมคุณต้องเข้าใจโมเดลเครือข่ายแบบเลเยอร์ เพื่อจุดประสงค์ของเราที่นี่เลเยอร์ 1, 2 และ 3 มีความสำคัญ:

  • เลเยอร์ 1 เป็นเลเยอร์ทางกายภาพ - สิ่งนี้ระบุสิ่งต่าง ๆ เช่นสายเคเบิลที่คุณสามารถใช้รูปแบบแรงดันไฟฟ้า / กระแสไฟฟ้าที่แสดงถึง 1s และ 0s บนสายเคเบิลนั้นอุปกรณ์ที่ปลายแต่ละด้านของสายเคเบิลใช้เจรจาอัตราบิตที่ทำงาน
  • เลเยอร์ 2 เป็นลิงค์เลเยอร์ - นี่เป็นการระบุว่าภาษาใดที่ปลายสายเคเบิลเชื่อมต่อกัน อุปกรณ์อีเธอร์เน็ตในชั้นนี้มีสิ่งต่าง ๆ เช่นเฟรมและที่อยู่ MAC
  • เลเยอร์ 3 เป็นเลเยอร์เครือข่าย - นี่เป็นการระบุวิธีที่อุปกรณ์ใช้ลิงก์โดยตรงเลเยอร์ 2 ไปยังอุปกรณ์อื่นเพื่อเข้าถึงอุปกรณ์ที่สามซึ่งพวกเขาไม่สามารถเข้าถึงได้โดยตรงที่เลเยอร์ 2 อุปกรณ์ในเลเยอร์นี้มีที่อยู่ IP และตารางเส้นทาง

MACVLAN / MACVTAP

MACVLAN สร้างอุปกรณ์เลเยอร์เสมือน 2 หรือลิงค์เลเยอร์พร้อมที่อยู่ MAC ของตัวเองซึ่งใช้เลเยอร์ 1 หรือเลเยอร์ทางกายภาพร่วมกับอุปกรณ์ที่มีอยู่ กรณีที่เข้าใจได้ชัดเจนที่สุดคือที่ที่คุณเสียบอุปกรณ์อีเธอร์เน็ตเข้ากับเครือข่ายและคุณสร้างอุปกรณ์ MACVLAN ตามอุปกรณ์อีเธอร์เน็ตนั้น ตอนนี้คุณมี "อุปกรณ์" อีเธอร์เน็ตสองตัวที่มีที่อยู่ MAC ที่แตกต่างกัน ฉันจะพูดเกี่ยวกับ MACVTAP อีกเล็กน้อย

อินเตอร์เฟส MACVLAN สามารถโต้ตอบได้หลายวิธีกับอินเตอร์เฟสอีเทอร์เน็ตที่มีอยู่โดยเฉพาะอย่างยิ่งเมื่อเฟรมปรากฏบนหนึ่งในอินเตอร์เฟสซึ่งอยู่กับอีกอินเตอร์เฟสหนึ่ง:

  • ในโหมดส่วนตัวเฟรมจะถูกโยนทิ้งไป เป็นไปไม่ได้ที่อินเทอร์เฟซสองรายการจะสื่อสารกันเฉพาะกับอุปกรณ์ภายนอกเท่านั้น
  • ในโหมดvepaเฟรมจะถูกส่งไปยังเลเยอร์ทางกายภาพเหมือนกับเฟรมอื่น ๆ หากคุณเสียบอุปกรณ์เข้ากับสวิตช์ที่ฉลาดพอที่จะมองเห็นว่าเฟรมนั้นจำเป็นต้องส่งกลับไปที่พอร์ตเดิมที่มาถึงมันจะได้รับโดยเลเยอร์ทางกายภาพเดียวกันที่ส่งไปแล้วเลเยอร์ 2 จะ ใช้ MAC เพื่อส่งไปยังอินเตอร์เฟสเครือข่ายที่ต้องการ
  • ในโหมดบริดจ์เมื่อเฟรมปรากฏบนอุปกรณ์หนึ่งมันจะถูกตรวจสอบเพื่อดูว่ามันมีไว้สำหรับอุปกรณ์อื่นและถ้าเป็นเช่นนั้นมันจะถูกส่งไปที่นั่นโดยไม่ต้องผ่านเลเยอร์ 1
  • นอกจากนี้ยังมีโหมดปิดบังอีกสองสามโหมด

โปรดทราบว่าอินเทอร์เฟซ MACVLAN มีข้อ จำกัด ที่สำคัญ: พวกเขาไม่สามารถเรียนรู้ที่อยู่ ดังนั้นคุณจึงไม่สามารถเชื่อมต่ออินเตอร์เฟส MACVLAN กับอุปกรณ์ฟิสิคัลที่สองและคาดว่าจะสามารถเข้าถึงอุปกรณ์ฟิสิคัลที่สองผ่านอุปกรณ์แรกได้ สิ่งนี้ใช้ได้กับอินเตอร์เฟส Ethernet ดั้งเดิม แต่ไม่ได้ต่อกับอินเตอร์เฟส MACVLAN ที่ต่ออยู่

TUN / TAP

อินเตอร์เฟส TAP ยังเป็นอุปกรณ์เลเยอร์เสมือน 2 ใหม่ แต่ไม่มีการเชื่อมต่อกับเลเยอร์ 1 แต่โปรแกรมสามารถรับไฟล์ descriptor ที่แทนเลเยอร์ทางกายภาพ จากนั้นมันสามารถเขียนข้อมูลเฟรมอีเทอร์เน็ตดิบลงในตัวให้คำอธิบายไฟล์นั้นและเคอร์เนลจะปฏิบัติต่อมันเหมือนแพ็กเก็ตอีเทอร์เน็ตอื่น ๆ ที่ได้รับบนอินเตอร์เฟสจริง

สิ่งที่สำคัญเกี่ยวกับอินเตอร์เฟส TAP คือเลเยอร์ทางกายภาพอยู่ในโหมดผู้ใช้ ซอฟต์แวร์ใด ๆ ที่มีการอนุญาตที่เหมาะสมสามารถสร้างเฟรมอีเธอร์เน็ตได้ในทุกทางที่มันชอบและผลักมันให้เป็นสิ่งที่เคอร์เนลปฏิบัติเช่นเดียวกับอินเทอร์เฟซทางกายภาพจริง สิ่งนี้ทำให้มีประโยชน์มากสำหรับสิ่งต่างๆเช่น VPN และการสร้างช่องสัญญาณ คุณสามารถเขียนซอฟแวร์ทันเนลที่คุณต้องการในพื้นที่ผู้ใช้และไม่จำเป็นต้องเข้าไปยุ่งเกี่ยวกับพื้นที่เคอร์เนลเพื่อให้เฟรมเข้าสู่เครือข่ายสแต็คคุณเพียงแค่สร้างอุปกรณ์ TAP และเขียนเฟรมลงในไฟล์อธิบายของมัน

อุปกรณ์ TUN นั้นเหมือนกับอุปกรณ์ TAP ยกเว้นว่าทำงานที่เลเยอร์ 3 แทนเลเยอร์ 2 และซอฟต์แวร์โหมดผู้ใช้จะต้องเขียนแพ็กเก็ต IP แบบดิบลงในไฟล์อธิบายแทนเฟรมอีเทอร์เน็ตแบบดิบ

กลับไปที่อุปกรณ์MACVTAPสิ่งเหล่านี้เป็นการผสมผสานระหว่าง MACVLAN และอินเตอร์เฟส TAP เช่นเดียวกับอินเตอร์เฟส TAP โปรแกรมโหมดผู้ใช้สามารถรับไฟล์ descriptor และเขียนเฟรมอีเทอร์เน็ตแบบ raw เข้าไป เช่นเดียวกับอินเตอร์เฟส MACVLAN เฟรมเหล่านั้นจะถูกส่งไปยังเลเยอร์ทางกายภาพของอุปกรณ์อีเธอร์เน็ตจริง สิ่งนี้ช่วยให้คุณสามารถดัดแปลงซอฟต์แวร์ที่เขียนขึ้นเพื่อใช้อุปกรณ์ TAP เพื่อใช้อุปกรณ์ MACVLAN แทนได้อย่างง่ายดาย

วีเน็ต

สิ่งนี้คล้ายกับแนวคิดของเครือข่าย TUN / TAP แต่มีระนาบควบคุมที่พัฒนาขึ้น (ดังนั้นซอฟต์แวร์โหมดผู้ใช้ที่ใช้มันสามารถกำหนดค่าส่วนต่อประสานที่ยืดหยุ่นได้มากกว่า) และระนาบข้อมูลที่ปรับให้เหมาะสมยิ่งขึ้น (เพื่อให้คุณสามารถย้ายข้อมูลผ่านอุปกรณ์เครือข่ายเสมือน ได้อย่างมีประสิทธิภาพ)

ทั้งหมดนี้ทำสิ่งที่คล้ายกัน แต่มีความสามารถแตกต่างกันเล็กน้อย ทั้งหมดนี้สามารถใช้เชื่อมต่อ VM กับเครือข่ายอีเธอร์เน็ต:

  • ผลิตภัณฑ์เวอร์ช่วลไลเซชันสามารถนำอีเทอร์เน็ตเฟรมจากแขกและเขียนลงในไฟล์อธิบายสำหรับอุปกรณ์ TAP อุปกรณ์ TAP นั้นสามารถกำหนดที่อยู่ IP ของตัวเองได้โดยโฮสต์หรือสามารถเชื่อมต่อกับบริดจ์พร้อมกับอีเธอร์เน็ตอินเตอร์เฟสเพื่อแชร์ที่อยู่ IP ของโฮสต์หรือสามารถกำหนดค่า iptables ให้ส่งต่อทราฟฟิกโดยใช้ NAT
  • ผลิตภัณฑ์เวอร์ช่วลไลเซชันสามารถอีเทอร์เน็ตเฟรมจากแขกแล้วเขียนลงในไฟล์ descriptor สำหรับอุปกรณ์ MACVTAP สิ่งเหล่านี้จะถูกส่งโดยตรงบนเลเยอร์ทางกายภาพของอุปกรณ์อีเธอร์เน็ตทำให้ VM เป็นอุปกรณ์อีเธอร์เน็ต "ของจริง" (แม้ว่าโปรดทราบว่ามันเป็นไปได้ที่จะสร้างอุปกรณ์ MACVLAN / MACVTAP สำหรับอินเตอร์เฟสเครือข่ายประเภทอื่นเช่นบริดจ์)
  • ผลิตภัณฑ์เวอร์ช่วลไลเซชันสามารถเชื่อมต่อไดรเวอร์ virtio ในเกสต์เข้ากับไดรเวอร์ virtio ในโฮสต์สำหรับการเชื่อมต่อเครือข่ายที่มีประสิทธิภาพมาก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.