ブリッジネットワークの背後にあるqemuゲストからインターネットホストにアクセスする

ブリッジネットワークの背後にあるqemuゲストからインターネットホストにアクセスする

同じプライベートネットワークで複数のqemuジョブを設定しようとしています。ホストシステムの外部からアクセスできないようにしたいが、互いにアクセスし、インターネットからリソースにアクセスできる必要があります。文脈上、これはスラッシュクーバーネティス設定になります。

私がしたこと:

  1. プライベートIPでブリッジインターフェイスを設定する
ip link add name br0 type bridge
ip addr add 10.24.0.1/24 dev br0
ip link set dev br0 up
  1. qemu-bridge-helper次の行を追加してアクセスを許可します。/etc/qemu/bridge.conf
allow br0
  1. ブリッジインターフェイスにバインドされているDHCPサーバーを起動します。
dnsmasq --interface=br0 --bind-interfaces --dhcp-range=10.24.0.2,10.24.0.254
  1. ゲストトラフィックがiptablesをスキップすることを許可する
sysctl -w net.bridge.bridge-nf-call-iptables=0

この時点で、次のことができます。

  • ホストからゲストにアクセスする(ping/ssh)
  • ゲストから別のゲストにアクセス(ping / ssh)します。
  • ゲストからホストにアクセスする(ping/ssh)
  • ゲストからホストの他のIPをpingします。
  • ゲストでホスト名検索を実行する

私ができないのは、インターネットリソースなどのホスト外のすべてにアクセスすることです。

Dockerをインストールしましたが、Dockerネットワークが正常に動作します。たとえば、docker run -t alpine ping google.com完璧に動作します。

ネットワークがパケットを転送できるようにする必要があると思いますが、どうすればよいかわかり10.24.0.0ません。頑張りました

iptables -I FORWARD -i br0 -j ACCEPT
iptables -I FORWARD -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o '!br0' --source 10.24.0.0/24 -j MASQUERADE

しかし、これは役に立ちません。

明確に説明するには、IP転送を有効にしてください。

$ cat /proc/sys/net/ipv4/ip_forward
1

QEMUゲストがインターネットにアクセスできるようにするには、何を変更する必要がありますか?

ベストアンサー1

誤ったルールを修正すると、次のように動作します。

iptables -t nat -A POSTROUTING -o '!br0' --source 10.24.0.0/24 -j MASQUERADE
                               ^^^^^^^^^

(名前付きインタフェースがないため一致しません!br0

入力する:

iptables -t nat -A POSTROUTING ! -o br0 --source 10.24.0.0/24 -j MASQUERADE

iptablesが否定的と見なされないことを示すために(より単純な)仮想インターフェイスを使用する簡単なテスト'!br0'

ip link add '!test' type dummy
ip address add dev '!test' 10.11.12.1/24
ip link set '!test' up
iptables -I OUTPUT -o '!test'

これでこのインターフェースを介してpingを試すことができます。たとえば、インターフェイスを使用するときはカウンタが増加し、使用しないときは増加しないことがping 10.11.12.2わかります。iptables-save -c |grep test

# iptables-save -c|grep test
[1:84] -A OUTPUT -o !test

おすすめ記事