nftables와 함께 qemu/kvm을 사용하시나요? (방화벽 없음!)

nftables와 함께 qemu/kvm을 사용하시나요? (방화벽 없음!)

libvirt/qemu/kvm을 사용하면 게스트 컴퓨터에서 사용할 하나 이상의 브리지를 정의할 수 있습니다. libvirt 머신은 일반적으로 호출되는 브리지 생성 virbr0( virbr0-nic일부 문제를 해결하기 위해)을 처리해야 하며 일반적으로 방화벽 규칙 삽입(통과)도 처리하여 iptables연결을 보장해야 합니다(게스트 간의 트래픽 전달, 허용, 때로는 아웃바운드/거부). 인바운드 트래픽 전체 virbr0).

이제 로 마이그레이션하고 있으므로 / 및 에 nftables대한 과거 경험을 능가하는 모든 사용 사례에 추가된 유연성과 강력한 구문이 마음에 듭니다 . IPv4 및 IPv6 단독이 아닌 전체 제품군과 관련된 특정 규칙을 표현할 수 있다는 사실은 그 자체로 가치가 있습니다.iptablesip6tablesipsetinet

아아, libvirt는 공식적으로만 지원합니다.iptables 또는 firewalld.

이제 내 문제는 다음과 같습니다.이 상황을 처리하는 표준적인 방법이 있습니까? 그것은 무엇입니까?

다음은 제가 고려한 몇 가지 시나리오입니다(모두 누락됨 firewalld).

  1. libvirt가 호출할 장치(등)을 찾을 수 있도록 시스템을 사용 nftables하세요.update-alternativesiptables
  2. 브리지 생성을 libvirt에서 libvirt로 이동 netplan하고 다른 방법을 사용하여 필요한 규칙을 동적으로 삽입합니다.
  3. 사용 nftables하되 계속 iptables활동하세요 -내가 아는 한 이것은 아마도 최악의 아이디어일 것이다., 일부 극단적인 경우 또는 일반적으로 충돌이 발생하기 때문입니다.

답변1

내 접근 방식은 다음과 같습니다. 표준인지는 확실하지 않지만 꽤 높은 표준이지만 현재 도구와 잘 작동하는 것 같습니다. Fedora 34 호스트에서 두 개의 새로운 Qemu/KVM Windows 10 게스트에 대한 인터넷 액세스 문제를 발견한 후 이 접근 방식을 취했습니다. DHCP는 게스트 W10 인터페이스와 iptables일부 임의의 vm 관리자(VMM에 표시된 누락)에서 작동하지 않는 것 같습니다. )) 오류 메시지(지금은 기억나지 않습니다!)

호스트: Fedora 34 5.13.12-200.fc34.x86_64 a) nftables게스트 인터넷 액세스를 위해 (마이그레이션) 및 snat를 사용 firewalld하고 iptables이미 비활성 상태입니다. b) iproute2를 사용하여 부팅 시 IP 주소로 브리지 인터페이스 생성

게스트: a) Windows 10 Qemu/KVM 이미지 모두에 대해 VMM을 사용하여 호스트에 생성된 브리지 인터페이스를 지정합니다. b) 게스트의 Windows 10 설정에서 Windows 10 인터페이스에 고정 IP 주소를 사용합니다.

브리지 인터페이스는 시작 시 생성됩니다. Windows 10이 시작되면 터널 인터페이스가 생성되고 브리지에 연결됩니다.

브리지에 대한 일부 관련 호스트 구성 조각

  1. iproute2 문
/usr/sbin/ip link add name virbr1 type bridge
/usr/sbin/ip link set virbr1 up
/usr/sbin/ip address add dev virbr1 192.168.123.1/24 broadcast 192.168.123.255
  1. nft snat
table nat {
      chain nat {
              type nat hook postrouting priority 100;
              policy accept;
              ip saddr 192.168.123.0/24 counter snat to *myipaddr*;
      }
}

VMM 보기의 브리지에 대한 XML 세부정보입니다.

<interface type="bridge">
  <mac address="52:54:00:xx:xx:xx"/>
  <source bridge="virbr1"/>
  <target dev="vnet0"/>
  <model type="e1000e"/>
  <alias name="net0"/>
  <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
</interface>

관련 정보