同じプライベートネットワークで複数のqemuジョブを設定しようとしています。ホストシステムの外部からアクセスできないようにしたいが、互いにアクセスし、インターネットからリソースにアクセスできる必要があります。文脈上、これはスラッシュクーバーネティス設定になります。
私がしたこと:
- プライベートIPでブリッジインターフェイスを設定する
ip link add name br0 type bridge
ip addr add 10.24.0.1/24 dev br0
ip link set dev br0 up
qemu-bridge-helper
次の行を追加してアクセスを許可します。/etc/qemu/bridge.conf
allow br0
- ブリッジインターフェイスにバインドされているDHCPサーバーを起動します。
dnsmasq --interface=br0 --bind-interfaces --dhcp-range=10.24.0.2,10.24.0.254
- ゲストトラフィックが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