Sự khác biệt giữa tun / tap vs Bridge + vnet vs macvtap là gì? (Đối với KVM ảo hóa)


28

Tôi vừa tìm thấy rất nhiều cách khác nhau để thực hiện kết nối mạng KVM. Nhưng tôi bế tắc về những gì đúng cách để làm điều đó. Tôi phát hiện ra rằng openstack sử dụng macvtap để thực hiện kết nối mạng neutron. Và nó có vẻ tốt.

Nhưng sự khác biệt là gì và tại sao nên sử dụng từng cách.

Cách 1 [TUỔI? TUN / TAP]

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

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

Khấu hao, phải không?

Cách 2 [Cầu + Vnet] <- Đó là những gì người quản lý tài năng làm

http://www.linux-kvm.com/content/USE-opedged-networking-virt-manager

Về cơ bản, bạn tạo một giao diện cầu nối với giao diện vật lý của bạn bên trong và

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

Và khi bạn khởi động một máy ảo từ virt-manager, giao diện vnet được tạo và thêm vào cây cầu. Ít nhất là cho đến khi tôi biết. Không có giao diện tun / tap là cần thiết.

Nó hoạt động khá tốt trong một thời gian dài nhưng bây giờ với vấn đề saucy tôi đã tìm thấy vấn đề.

https://bugs.launchpad.net/ubfox/+source/core-network/+orms/1255516

Tại sao bạn có thể thêm giao diện vnet mới vào cầu mà không có giao diện TAP?

Cách 3 [MACVTAP]

Cuối cùng là giao diện macvtap.

http://virt.kernelnewbies.org/MacVTap

Nó sao chép giao diện phần mềm TUN / TAP nhưng theo cách tốt hơn. Không biết cách nào, nhưng nó có vẻ tốt hơn.

Lợi thế của macvtap so với cách thứ hai là gì?

Có gì tốt hơn?

Bất kỳ trợ giúp về điều này?

Câu trả lời:


4

Nó thực sự phụ thuộc vào chính xác những gì bạn muốn đạt được

  • TAP / TUN

Không quan trọng đó là VM hay máy vật lý. TUN mang đến cho bạn một mạng đường hầm và TAP một thiết bị. Nói tóm lại, bạn đi qua một mạng lưới đường hầm để tiếp cận một mạng khác.

Chẳng hạn, khi định cấu hình mạng OpenVPN, bạn sẽ được cung cấp 10.8.0.6 trên máy khách của mình. Máy chủ VPN 10.8.0.1 định tuyến yêu cầu của bạn đến một mạng khác (ví dụ 192.168.xx) phía sau. Khi sử dụng TAP, bạn sẽ nhận được IP (192.168.10.10/24) trực tiếp từ mạng mục tiêu của mình (192.168.10.x / 24). Đơn giản.

  • Cầu

"Cầu Linux" kết nối VNET (từ VM) với ethernet vật lý. Nếu bạn muốn có VM (dựa trên KVM), cầu nối là phải giữa vnet và ethernet trên máy chủ


MMmmm. Cảm ơn bạn đã trả lời nhưng nó thực sự không giải quyết được nghi ngờ của tôi. Nếu bạn thấy các liên kết bạn sẽ thấy rằng có nhiều lý do để sử dụng cái này hay cái khác. Trong thực tế, bắc cầu hiện không hoạt động tốt trên stack linux hiện tại cho vm. Vì vậy, tôi đã phải sử dụng MACVTAP.
Gonzalo Aguilar Delgado

2

Tôi muốn nói rằng nó phụ thuộc vào trường hợp sử dụng của bạn.

Tự động thêm / xóa các máy chủ ảo?

Hãy thử macvtap. Nên cũng được performanter hơn macvlan (đó là xấp xỉ như thêm một MAC đến một thiết bị vật lý, infos đến đó được xử lý bởi các ngăn xếp mạng) hoặc một cầu bổ sung, như macvtap bỏ qua ngăn xếp mạng bằng cách nào đó và xuất khẩu một thiết bị nhân vật tap trực tiếp. Nhưng đừng làm tôi thất vọng về điều đó. Bên cạnh cả hai (macvlan / macvtap) có chung các chế độ khả dụng (VEPA / kẹp tóc, bắc cầu, riêng tư), kẹp tóc chỉ hoạt động nếu công tắc của bạn hỗ trợ chế độ rơle phản chiếu. (Các gói đến công tắc vật lý tại cổng x phải được phép rời khỏi công tắc một lần nữa trên cùng một cổng x.)

Vì eth0 (hoặc bất kỳ cái nào bạn sử dụng) được đưa vào chế độ lăng nhăng khi sử dụng cầu, chế độ macvXXX được cho là có thông lượng cao hơn.

Các chế độ cũng xác định 'số lượng' của sự cô lập (các vhost có thể thấy lưu lượng của nhau không? Làm thế nào về hv?). Làm thế nào điều này hoạt động dưới mui xe tôi chưa biết.

veth's (cặp ethernet ảo) có phần giống nhau để tách biệt, bạn xác định hai giao diện ảo, một giao diện được gắn vào một cây cầu, cái còn lại với VM của bạn. Ở đó, việc cách ly được thực hiện bằng cách đặt giao diện vm vào không gian tên của chính nó để các thiết bị có phần bị cô lập. Tất cả lưu lượng truy cập cùng nhau tại cầu, nhưng một vhost không thể thấy vNIC của người khác.

Trong trường hợp bạn làm việc với một cây cầu, bạn có cấu hình bổ sung để thực hiện và khi cây cầu bị hỏng, tất cả các kết nối của bạn cũng vậy. Khi đưa cây cầu trở lại, bạn có thể phải kết nối lại tất cả các giao diện ảo với cây cầu một lần nữa (hoặc chỉ cần khởi động lại hv hoàn chỉnh ...).

Điểm mấu chốt: Nếu bạn không thay đổi cấu trúc liên kết thường xuyên, chỉ cần đi với cầu nối khi bạn tìm thấy nhiều thông tin nhất trên mạng, điều này tốt hơn là đọc mã hạt nhân. Heck, ngay cả gói iproute2-doc cũng thiếu hầu hết thông tin mà iproute2 thực sự có, ngay cả khi bạn chạy các phiên bản mới nhất. Hãy thử tìm hiểu về man ip-tcp_metricstừ các trang web có sẵn hoặc ip-crefs.ps ...


Tôi thậm chí không nhớ người viết này, ít hơn nhiều nơi tôi tìm thấy tất cả thông tin đó. :(
sjas

0

Những phương pháp này đang làm những điều cơ bản khác nhau. Để hiểu lý do tại sao, bạn cần hiểu mô hình lớp của mạng. Đối với mục đích của chúng tôi ở đây, các lớp 1, 2 và 3 rất quan trọng:

  • Lớp 1 là lớp vật lý - lớp này chỉ định những thứ như bạn có thể sử dụng loại cáp nào, mẫu điện áp / dòng điện nào đại diện cho 1 và 0 trên cáp đó, cách các thiết bị ở mỗi đầu cáp thỏa thuận tốc độ bit mà chúng hoạt động.
  • Lớp 2 là lớp liên kết - lớp này xác định những thứ ngôn ngữ ở mỗi đầu của cáp nói chuyện với nhau. Các thiết bị Ethernet ở lớp này có những thứ như khung và địa chỉ MAC.
  • Lớp 3 là lớp mạng - lớp này chỉ định cách các thiết bị sử dụng liên kết lớp 2 trực tiếp đến thiết bị khác để tiếp cận thiết bị thứ ba mà chúng không thể tiếp cận trực tiếp ở lớp 2. Các thiết bị ở lớp này có địa chỉ IP và bảng định tuyến.

MACVLAN / MACVTAP

MACVlan tạo một thiết bị lớp 2 hoặc lớp liên kết ảo, với địa chỉ MAC riêng, chia sẻ lớp 1 hoặc lớp vật lý với một thiết bị hiện có. Trường hợp dễ hiểu nhất là nơi bạn có một thiết bị Ethernet được cắm vào mạng và bạn tạo một thiết bị MACVlan dựa trên thiết bị Ethernet đó; bây giờ bạn có hai "thiết bị" Ethernet với các địa chỉ MAC khác nhau nhưng cả hai đều truyền các khung của chúng trên cùng một cáp. Tôi sẽ nói về MACVTAP một chút nữa.

Các giao diện MACVlan có thể tương tác theo nhiều cách khác nhau với giao diện Ethernet hiện có, đặc biệt khi một khung xuất hiện trên một trong các giao diện có địa chỉ cho một giao diện khác:

  • Trong chế độ riêng tư , khung hình bị ném đi; Hai giao diện không thể giao tiếp với nhau, chỉ với các thiết bị bên ngoài.
  • Trong chế độ vepa , khung được gửi qua lớp vật lý như bất kỳ khung nào khác. Nếu bạn đã cắm thiết bị vào một công tắc đủ thông minh để phát hiện ra rằng khung cần phải được gửi trở lại cùng một cổng mà nó đã đến, thì nó sẽ được nhận bởi cùng một lớp vật lý đã gửi nó và sau đó lớp 2 sẽ sử dụng MAC để gửi nó đến giao diện mạng dự định.
  • Trong chế độ cầu , khi một khung xuất hiện trên một thiết bị, nó sẽ được kiểm tra xem liệu nó có dành cho thiết bị kia hay không và nếu có, nó sẽ được gửi đến đó mà không đi qua lớp 1.
  • Ngoài ra còn có một vài chế độ tối nghĩa hơn.

Lưu ý rằng giao diện MACVlan có một hạn chế quan trọng: Chúng không có khả năng giải quyết việc học. Vì vậy, bạn không thể kết nối giao diện MACVlan với thiết bị vật lý thứ hai và mong muốn có thể tiếp cận thiết bị vật lý thứ hai đó qua thiết bị thứ nhất. Điều này hoạt động với giao diện Ethernet gốc nhưng không có giao diện MACVlan được đính kèm.

TUN / TAP

Giao diện TAP cũng là một thiết bị lớp 2 ảo mới nhưng không có lớp 1 nào được đính kèm. Thay vào đó, một chương trình có thể nhận được một mô tả tập tin đại diện cho lớp vật lý. Sau đó, nó có thể ghi dữ liệu khung Ethernet thô vào bộ mô tả tệp đó và hạt nhân sẽ coi nó giống như bất kỳ gói Ethernet nào khác mà nó nhận được trên giao diện vật lý thực.

Điều quan trọng về giao diện TAP là lớp vật lý ở chế độ người dùng; bất kỳ bit phần mềm nào có quyền thích hợp đều có thể tạo khung Ethernet theo bất kỳ cách nào nó thích và chuyển chúng vào thứ gì đó mà kernel xử lý giống như giao diện vật lý thực. Điều này làm cho chúng rất hữu ích cho những thứ như VPN và đường hầm; bạn có thể viết bất kỳ loại phần mềm đường hầm nào bạn thích trong không gian người dùng và không cần phải can thiệp vào không gian kernel để đưa các khung vào ngăn xếp mạng, bạn chỉ cần tạo một thiết bị TAP và ghi các khung vào bộ mô tả tệp của nó.

Các thiết bị TUN giống như các thiết bị TAP ngoại trừ chúng hoạt động ở lớp 3 thay vì lớp 2 và phần mềm chế độ người dùng phải ghi các gói IP thô vào bộ mô tả tệp thay vì các khung Ethernet thô.

Quay trở lại các thiết bị MACVTAP , đây là các loại kết hợp giữa giao diện MACVlan và TAP. Giống như giao diện TAP, một chương trình ở chế độ người dùng có thể lấy một bộ mô tả tệp và ghi các khung Ethernet thô vào nó. Giống như giao diện MACVlan, các khung đó sau đó được gửi qua lớp vật lý của thiết bị Ethernet thực. Điều này cho phép bạn dễ dàng điều chỉnh phần mềm được viết để sử dụng các thiết bị TAP để sử dụng thiết bị MACVlan.

VNet

Đây là khái niệm tương tự như mạng TUN / TAP nhưng có mặt phẳng điều khiển phát triển hơn (vì vậy phần mềm chế độ người dùng sử dụng nó có thể định cấu hình giao diện linh hoạt hơn) và mặt phẳng dữ liệu được tối ưu hóa hơn (để bạn có thể di chuyển dữ liệu qua thiết bị mạng ảo nhiều hơn hiệu quả).

Tất cả đều làm những điều tương tự nhưng có khả năng hơi khác nhau. Tất cả chúng có thể được sử dụng để kết nối VM với mạng Ethernet:

  • Một sản phẩm ảo hóa có thể lấy các khung Ethernet từ khách và ghi chúng vào bộ mô tả tệp cho thiết bị TAP. Thiết bị TAP đó có thể được gán địa chỉ IP của chính nó bởi máy chủ hoặc thiết bị có thể trượt vào cầu cùng với giao diện Ethernet để chia sẻ địa chỉ IP của máy chủ hoặc iptables có thể được định cấu hình để chuyển tiếp lưu lượng truy cập trên nó bằng NAT.
  • Một sản phẩm ảo hóa có thể tạo khung Ethernet từ khách và ghi chúng vào bộ mô tả tệp cho thiết bị MACVTAP; những thứ này sau đó được truyền trực tiếp trên lớp vật lý của thiết bị Ethernet, mang lại cho VM một thiết bị Ethernet "thực" (mặc dù lưu ý rằng có thể tạo các thiết bị MACVlan / MACVTAP cho các loại giao diện mạng khác như cầu nối).
  • Một sản phẩm ảo hóa có thể kết nối một trình điều khiển virtio trong khách với trình điều khiển virtio trong máy chủ để kết nối mạng rất hiệu quả.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.