同じプライベートネットワーク上にいくつかのqemuクエストを設定しようとしています。ホストの外部からアクセスできないようにしたいのですが、インターネットから相互にアクセスしたり、リソースにアクセスしたりできるようにする必要があります。コンテキストでは、これはスラッシュkubernetesのセットアップになります。
私がしたこと:
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
dnsmasq --interface=br0 --bind-interfaces --dhcp-range=10.24.0.2,10.24.0.254
sysctl -w net.bridge.bridge-nf-call-iptables=0
この時点で、次のことができます。
私ができないことは、ホスト以外のものにアクセスすることです。インターネットリソース。
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ゲストからのインターネットアクセスを許可するために何を変更できますか?
間違ったルールを修正すると機能するはずです。
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