tun / tap vs bridge + vnet vs macvtap의 차이점은 무엇입니까? (가상화 KVM의 경우)


28

KVM 네트워킹을 수행하는 다양한 방법을 찾았습니다. 그러나 나는 그것을하는 올바른 방법에 붙어 있습니다. openstack은 macvtap을 사용하여 중성자 네트워킹을 수행한다는 것을 발견했습니다. 그리고 좋아 보인다.

그러나 차이점과 각 방법을 사용해야하는 이유는 무엇입니까?

방법 1 [OLD? TUN / TAP]

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

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

더 이상 사용되지 않습니까?

Way 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 인터페이스가 생성되어 브리지에 추가됩니다. 적어도 내가 아는 곳까지. 튜닝 / 탭 인터페이스가 필요하지 않습니다.

그것은 오랫동안 꽤 잘 작동했지만 지금은 소 키로 문제를 발견했습니다.

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

TAP 인터페이스없이 브리지에 새 vnet 인터페이스를 추가 할 수있는 이유는 무엇입니까?

방법 3 [MACVTAP]

마지막은 macvtap 인터페이스입니다.

http://virt.kernelnewbies.org/MacVTap

TUN / TAP 소프트웨어 인터페이스를 복사하지만 더 나은 방식으로 수행합니다. 어떤 방법을 모르지만 더 나은 것 같습니다.

두 번째 방법에 비해 macvtap의 장점은 무엇입니까?

더 나은 게 뭐야?

이것에 대한 도움이 필요하십니까?

답변:


4

그것은 정확히 당신이 달성하고자하는 것에 달려 있습니다.

  • 탭 / 툰

VM 또는 물리적 시스템은 중요하지 않습니다. TUN은 터널링 된 네트워크를 제공하고 장치를 TAP합니다. 요컨대, 터널링 된 네트워크를 통해 다른 네트워크에 연결합니다.

예를 들어 OpenVPN 네트워크를 구성 할 때 클라이언트에 10.8.0.6이 제공됩니다. VPN 서버 10.8.0.1은 요청을 뒤에있는 다른 네트워크 (예 : 192.168.xx)로 라우팅합니다. TAP를 사용하면 대상 네트워크 (192.168.10.x / 24)에서 직접 IP (192.168.10.10/24)를받습니다. 단순한.

  • 다리

"Linux Bridge"는 VNET (VM에서)을 실제 이더넷으로 연결합니다. VM (KVM 기반)을 원하는 경우 호스트의 vnet과 이더넷 간 브리지는 필수입니다.


흠 답변 주셔서 감사하지만 실제로 내 의심을 해결하지 않습니다. 링크가 보이면 서로를 사용해야 할 이유가 더 있다는 것을 알게 될 것입니다. 실제로 브리징은 현재 vm의 현재 Linux 스택에서 제대로 작동하지 않습니다. MACVTAP을 사용해야했습니다.
Gonzalo Aguilar Delgado

2

사용 사례에 따라 다릅니다.

가상 호스트의 자동화 된 추가 / 삭제?

macvtap을 사용해보십시오. macvtap은 네트워크 스택을 우회하고 탭 문자 장치를 직접 내보내므로 macvlan (실제 장치에 다른 MAC을 추가하거나 네트워킹 스택에서 처리하는 정보)과 비슷한 브리지 나 추가 브리지보다 성능이 우수 해야 합니다. 그러나 저를 망치지 마십시오. 두 가지 (macvlan / macvtap) 외에도 동일한 사용 가능한 모드 (VEPA / 헤어핀, 브리징, 개인)를 공유 할 수 있으며, 헤어핀은 스위치가 반사 릴레이 모드를 지원하는 경우에만 작동합니다. 포트 x의 물리적 스위치에 도착한 패킷은 스위치를 동일한 포트 x에 다시 두어야합니다.

브리지를 사용할 때 eth0 (또는 사용하는 둘 중 하나)이 무차별 모드로 설정되므로 macvXXX 모드는 처리량이 더 높다고합니다.

이 모드는 또한 격리의 '양'을 정의합니다 (vhost는 서로 트래픽을 볼 수 있습니까? hv는 어떻습니까?). 아직 모르는 상황에서 어떻게 작동합니까?

veth (가상 이더넷 쌍)는 격리와 다소 유사하므로 두 개의 가상 인터페이스를 정의합니다. 하나는 브리지에 연결되고 다른 하나는 VM에 연결됩니다. vm- 인터페이스를 자체 네임 스페이스에 배치하여 격리를 수행하므로 장치가 다소 격리됩니다. 모든 트래픽이 브리지에서 함께 발생하지만 하나의 호스트는 다른 호스트의 vNIC를 볼 수 없습니다.

브리지로 작업하는 경우 추가 구성이 필요하며 브리지가 다운되면 모든 연결도 마찬가지입니다. 브리지를 다시 시작할 때 모든 가상 인터페이스를 브리지에 다시 연결해야합니다 (또는 전체 HV를 재부팅하면됩니다).

결론 : 토폴로지를 자주 변경하지 않으면 온라인에서 가장 많은 정보를 찾을 때 브리징을 사용하면 커널 코드를 읽는 것보다 낫습니다. 심지어 iproute2-doc 패키지 자체에도 최첨단 버전을 실행할 때도 iproute2가 실제로 가지고있는 대부분의 정보가 부족합니다. man ip-tcp_metrics사용 가능한 맨 페이지 또는 ip-crefs.ps에서 찾아보십시오 ...


나는 이것을 쓰는 것을 기억하지도 않고, 모든 정보를 찾은 곳은 훨씬 적습니다. :(
sjas

0

이 방법들은 근본적으로 다른 일을하고 있습니다. 이유를 이해하려면 계층화 된 네트워킹 모델을 이해해야합니다. 여기서는 레이어 1, 2 및 3이 중요합니다.

  • 레이어 1은 물리적 레이어입니다. 사용할 수있는 케이블, 해당 케이블의 전압 및 전류 패턴이 1과 0을 나타내는 것, 케이블의 각 끝에있는 장치가 작동하는 비트 전송률 등을 협상하는 방법 등을 지정합니다.
  • 레이어 2는 링크 레이어입니다. 이것은 케이블의 각 끝에서 서로 대화하는 언어를 지정합니다. 이 계층의 이더넷 장치에는 프레임 및 MAC 주소와 같은 것이 있습니다.
  • 계층 3은 네트워크 계층입니다. 이는 계층 2에서 직접 연결할 수없는 장치가 다른 장치에 직접 계층 2 링크를 사용하여 세 번째 장치에 도달하는 방법을 지정합니다.이 계층의 장치에는 IP 주소와 라우팅 테이블이 있습니다.

MACVLAN / MACVTAP

MACVLAN은 고유 한 MAC 주소를 사용하여 가상 계층 2 또는 링크 계층 장치를 작성하여 계층 1 또는 물리 계층을 기존 장치와 공유합니다. 가장 분명하게 이해할 수있는 경우는 이더넷 장치를 네트워크에 연결하고 해당 이더넷 장치를 기반으로 MACVLAN 장치를 만드는 경우입니다. 이제 서로 다른 MAC 주소를 가진 두 개의 이더넷 "장치"가 있지만 둘 다 동일한 케이블을 통해 프레임을 전송합니다. MACVTAP에 대해 조금 더 이야기하겠습니다.

MACVLAN 인터페이스는 기존 이더넷 인터페이스와 여러 가지 방식으로 상호 작용할 수 있습니다. 특히 다른 인터페이스의 주소 인 인터페이스 중 하나에 프레임이 나타나는 경우 :

  • 에서 개인 모드, 프레임은 폐기된다 두 인터페이스가 서로 통신 할 수 없으며 외부 장치와 만 통신 할 수 없습니다.
  • 에서는 VEPA 모드, 상기 프레임은 다른 프레임과 같은 물리 계층을 통해 전송된다. 장치를 스위치에 꽂아 프레임이 도착한 포트와 동일한 포트로 다시 전송해야한다고 판단 할 수있을 정도로 영리한 스위치에 연결 한 경우 장치를 전송 한 동일한 물리적 계층에서 수신 한 다음 계층 2가 수신합니다. MAC을 사용하여 원하는 네트워크 인터페이스로 보냅니다.
  • 에서는 다리 가 다른 경우를위한 프레임이 하나 개의 장치에 표시 모드, 이는 볼 체크하고, 만약 그렇다면, 그것은 1 층을 거치지 않고가 전송된다.
  • 몇 가지 더 모호한 모드도 있습니다.

MACVLAN 인터페이스에는 중요한 제한 사항이 있습니다. 학습을 처리 할 수 ​​없습니다. 따라서 MACVLAN 인터페이스를 두 번째 물리적 장치에 연결할 수 없으며 첫 번째 물리적 장치를 통해 두 번째 물리적 장치에 도달 할 수있을 것으로 기대합니다. 이것은 원래 이더넷 인터페이스에서는 작동하지만 MACVLAN 인터페이스에는 연결되어 있지 않습니다.

TUN / TAP

TAP 인터페이스는 새로운 가상 계층 2 장치이지만 계층 1이 연결되어 있지 않습니다. 대신, 프로그램은 물리 계층을 나타내는 파일 디스크립터를 얻을 수 있습니다. 그런 다음 원시 이더넷 프레임 데이터를 해당 파일 디스크립터에 쓸 수 있으며 커널은 실제 물리적 인터페이스에서 수신하는 다른 이더넷 패킷처럼 처리합니다.

TAP 인터페이스의 가장 큰 장점은 물리 계층이 사용자 모드에 있다는 것입니다. 적절한 권한을 가진 소프트웨어는 이더넷 프레임을 원하는 방식으로 생성하여 커널이 실제 물리적 인터페이스와 동일하게 취급하는 방식으로 밀어 넣을 수 있습니다. 이것은 VPN 및 터널링과 같은 것들에 매우 유용합니다. 사용자 공간에서 원하는 종류의 터널링 소프트웨어를 작성할 수 있으며 프레임을 네트워킹 스택으로 가져 오기 위해 커널 공간에 개입 할 필요가 없습니다. TAP 장치를 만들고 파일 설명자에 프레임을 쓰면됩니다.

TUN 장치는 TAP 장치와 유사하지만 레이어 2 대신 레이어 3에서 작동하며 사용자 모드 소프트웨어는 원시 이더넷 프레임 대신 원시 IP 패킷을 파일 디스크립터에 써야합니다.

MACVTAP 장치로 돌아 가면 MACVLAN과 TAP 인터페이스가 혼합되어 있습니다. TAP 인터페이스와 마찬가지로 사용자 모드 프로그램은 파일 디스크립터를 가져 와서 원시 이더넷 프레임을 쓸 수 있습니다. MACVLAN 인터페이스와 마찬가지로 이러한 프레임은 실제 이더넷 장치의 물리적 계층을 통해 전송됩니다. 이를 통해 TAP 장치를 사용하여 MACVLAN 장치를 대신 사용하도록 작성된 소프트웨어를 쉽게 조정할 수 있습니다.

VNet

이것은 개념적으로 TUN / TAP 네트워킹과 유사하지만보다 발전된 제어 평면 (이를 사용하는 사용자 모드 소프트웨어는 인터페이스를보다 유연하게 구성 할 수 있음)과보다 최적화 된 데이터 평면 (가상 네트워크 장치를 통해 데이터를 더 많이 이동할 수 있음)을 가지고 있습니다 효율적으로).

이들 모두 유사한 기능을 수행하지만 기능이 약간 다릅니다. 모두 VM을 이더넷 네트워크에 연결하는 데 사용할 수 있습니다.

  • 가상화 제품은 게스트에서 이더넷 프레임을 가져와 TAP 장치의 파일 설명자에 쓸 수 있습니다. 해당 TAP 장치에는 호스트가 고유 한 IP 주소를 할당하거나 이더넷 인터페이스와 함께 브리지에 종속되어 호스트의 IP 주소를 공유하거나 NAT를 사용하여 트래픽을 전달하도록 iptables를 구성 할 수 있습니다.
  • 가상화 제품은 게스트의 이더넷 프레임을 MACVTAP 장치의 파일 디스크립터에 쓸 수 있습니다. 그런 다음 이더넷 장치의 물리 계층에서 직접 전송되어 VM에 "실제"이더넷 장치를 효과적으로 제공합니다 (브리지와 같은 다른 유형의 네트워크 인터페이스에 대해 MACVLAN / MAVTAP 장치를 생성 할 수 있음).
  • 가상화 제품은 게스트의 virtio 드라이버를 호스트의 virtio 드라이버에 연결하여 매우 효율적인 네트워킹을 수행 할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.