web-dev-qa-db-ja.com

NATと2つのブリッジ

2つのネットワークカード(インターネット用のeth0、ローカルネットワーク用のeth1)を備えたDebian Squeezeサーバー(仮想サーバーのルーターおよびホストとして)があります。 KVMをインストールしたので、br0(eth0、vnet0)とbr1(eth1、vnet1)を作成しました。今、このサーバーでローカルネットワークアクセスを設定する必要がありますが、機能していません:(ローカルネットワークからインターネットにアクセスするにはどうすればよいですか(br1でトラフィックが来る)?LANでのインターネットアクセス以外はすべて正常に機能します。

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

ブリッジを使用しない場合、そのような構成は機能しています(eth0はbr0ではありません)。

2
Bruce

うーん、iptablesにログインするように設定しましたが、br1からbr0へのトラフィックがありました。次に、br0でtcpdumpを確認したところ、ローカルネットワークからのすべてのパケットはローカルIPアドレスでした。もう一度iptablesをチェックし、同じiptablesコマンドを追加しました。

iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

そして今それは働いていました...多分私は前にいくつかの他の間違いをしました...

0
Bruce

MASQUERADEターゲットは、出力インターフェイスに設定されたIPを使用してトラフィックをソース変換するため、少し「魔法」です。

パラメータにパブリックIPアドレスを指定してSNATターゲットを使用できます。

iptables -t nat -A POSTROUTING -o br0 --to-source W.X.Y.Z -j SNAT

MASQUERADEターゲットを使用したい場合(たとえば、パブリックIPが変更された場合)、パブリックアドレスが設定されているインターフェイスにルールを配置する必要があります。eth0:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
2
jon_d