nftablesでqemu / kvmを使用しますか? (ファイアウォールなし!)

nftablesでqemu / kvmを使用しますか? (ファイアウォールなし!)

libvirt/qemu/kvm を使用すると、ゲストコンピュータで使用する 1 つ以上のブリッジを定義できます。 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ホストで2つの新しい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>

関連情報