Ubuntu 22.04에서 트렁크 포트를 사용하여 KVM을 구성하는 방법은 무엇입니까?

Ubuntu 22.04에서 트렁크 포트를 사용하여 KVM을 구성하는 방법은 무엇입니까?

Cisco Catalyst 스위치의 트렁크 포트에 Ubuntu 22.04가 설치된 Dell R440을 설정하고 있습니다. 문제는 기본 VLAN 트래픽만 시스템에서 캡처된다는 것입니다.

포트 구성은 다음과 같습니다.

interface GigabitEthernet1/0/44
 switchport access vlan 201
 switchport trunk native vlan 201
 switchport trunk allowed vlan 10,201
 switchport mode trunk
!

show interfaces GigabitEthernet 1/0/44 trunk

Port        Mode             Encapsulation  Status        Native vlan
Gi1/0/44    on               802.1q         trunking      201

Port        Vlans allowed on trunk
Gi1/0/44    10,201

Port        Vlans allowed and active in management domain
Gi1/0/44    10,201

Port        Vlans in spanning tree forwarding state and not pruned
Gi1/0/44    10,201

이 정확한 구성은 태그된 VLAN 트래픽을 다른 포트로 전송하며, 이는 Debian 및 BSD 시스템에서 캡처할 수 있습니다.

서버의 인터페이스 구성은 다음과 같습니다.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
    altname enp4s0f0
    inet 192.168.201.20/24 brd 192.168.201.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::d294:66ff:feaa:aaaa/64 scope link 
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether bb:bb:bb:bb:bb:bb brd ff:ff:ff:ff:ff:ff
    altname enp4s0f1
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:d1:36:8a brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: eno1.10@eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.199/24 scope global eno1.10
       valid_lft forever preferred_lft forever
    inet6 fe80::d294:66ff:feaa:aaaa/64 scope link 
       valid_lft forever preferred_lft forever
6: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 500
    link/ether 50:50:50:50:50:50 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::5054:ff:fe6e:5932/64 scope link 
       valid_lft forever preferred_lft forever

보시다시피 VLAN 인터페이스와 macvtap이 있습니다. 태그가 지정되지 않은 트래픽을 VLAN 인터페이스(192.168.10.172에서)로 보내는 가상 머신이 있습니다. 인터페이스 에서 eno1스니핑된 트래픽은 시스템에서 올바르게 태그 지정됩니다.

# tcpdump -nvei eno1 vlan 10
tcpdump: listening on eno1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
13:38:26.204155 50:50:50:50:50:50 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 10, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.4 tell 192.168.10.172, length 28
13:38:27.204132 50:50:50:50:50:50 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 10, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.4 tell 192.168.10.172, length 28
13:38:28.222031 50:50:50:50:50:50 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 10, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.4 tell 192.168.10.172, length 28
13:38:29.220143 50:50:50:50:50:50 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 10, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.4 tell 192.168.10.172, length 28

호스트 자체의 트래픽에도 태그가 지정됩니다.

# tcpdump -nvei eno1 vlan 10
tcpdump: listening on eno1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:21:21.254534 aa:aa:aa:aa:aa:aa > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 10, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.199, length 28
14:21:22.278725 aa:aa:aa:aa:aa:aa > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 10, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.199, length 28
14:21:23.302507 aa:aa:aa:aa:aa:aa > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 46: vlan 10, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 tell 192.168.10.199, length 28

기본 VLAN(태그 없음) 및 기타 호스트의 트래픽을 기본 인터페이스에서 관찰할 수 있습니다(통신은 원활하게 작동함).

# tcpdump -nvei eno1 not vlan 10
tcpdump: listening on eno1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:21:12.669286 aa:aa:aa:aa:aa:aa > 00:00:5e:00:01:c9, ethertype IPv4 (0x0800), length 190: (tos 0x10, ttl 64, id 61852, offset 0, flags [DF], proto TCP (6), length 176)
    192.168.201.20.22 > 172.16.20.10.51758: Flags [P.], cksum 0x4a7a (incorrect -> 0x92f4), seq 967793068:967793192, ack 3024530972, win 501, options [nop,nop,TS val 3219014539 ecr 3285414951], length 124
14:21:12.682517 ab:ab:ab:ab:ab:ab > aa:aa:aa:aa:aa:aa, ethertype IPv4 (0x0800), length 66: (tos 0x10, ttl 63, id 31043, offset 0, flags [none], proto TCP (6), length 52)
    172.16.20.10.51758 > 192.168.201.20.22: Flags [.], cksum 0x2ef4 (correct), ack 124, win 501, options [nop,nop,TS val 3285414975 ecr 3219014539], length 0
14:21:12.720108 22:22:22:22:22:22 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.201.134 tell 192.168.201.102, length 46

이 구성은 다음을 통해 수동으로 적용되었습니다.

sudo ip link add link eno1 name eno1.10 type vlan id 10
sudo ip link set dev eno1.10 up
sudo ip addr add 192.168.10.199/24 dev eno1.10

또한 다른 테스트 중에서 netplan을 통과했습니다.

network:
  ethernets:
    eno1:
      addresses:
      - 192.168.201.20/24
      gateway4: 192.168.201.1
      nameservers:
        addresses:
        - 1.1.1.1
        - 8.8.8.8
      dhcp4: false
      dhcp6: false
  vlans:
    eno1.10:
      id: 10
      link: eno1
      dhcp4: false
      dhcp6: false
  version: 2

이 호스트에서 생성된 태그가 지정된 트래픽은 다른 호스트에 도달하지 않습니다. 또한 태그가 지정된 다른 호스트의 트래픽은 이 호스트에 도달하지 않습니다. 실제로 정확히 동일한 방식(잘못)으로 작동하는 두 번째 서버와 두 번째 스위치(모두 동일)가 있으므로 단일 하드웨어에 결함이 있다고 비난하는 것은 거의 불가능합니다.

이는 마이그레이션에 사용되는 KVM 호스트가 되지만 VM은 이 트렁크에서 제공하는 VLAN에서 통신할 수 있어야 합니다(다른 많은 호스트가 있으므로 이제 문제 해결을 위해 이 설정이 단순화되었습니다). 여기에 무엇이 빠졌는지에 대한 아이디어가 있나요?

답변1

케이블을 랙에 연결하기 위해 데이터 센터에서 q in q가 활성화되지 않은 추가 스위치를 사용했다는 점을 제외하면 문제가 없는 것으로 나타났습니다. 이로 인해 표시된 패킷이 전송 중에 손실됩니다.

관련 정보