web-dev-qa-db-ja.com

特定のIPへのiptablesdnatマッピング

私は2台のマシンでプライベートネットを構築しました。どちらにも2つのネットワークインターフェイスがあります。これがネットワーク情報です。

machine1:

eth0 10.0.0.11 (private net)
eth1 10.82.80.208 (Campus Network ip)

machine2:

eth0 10.0.0.21 (private net)
eth2 10.82.80.207 (Campus Network ip)

Iptables dnatでキャンパスネットIPアドレスを使用する代わりに、キャンパスネットワークの自分のマシン(10.82.80.206)で10.0.0.11にアクセスしたいと思います。たとえば、パケットの宛先を10.0.0.11から10.82.80.208に変更したいとします。

次のようなiptablesコマンドを使用しようとしています。

iptables -t nat -A PREROUTING -i eth0 -p tcp  -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208
iptables -t nat -A PREROUTING -i eth0 -p icmp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208
iptables -t nat -A PREROUTING -i eth0 -p udp  -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208

しかし、ホストがまだ到達できない10.0.0.11にpingを実行しようとすると、役に立たないようです。マシンのポケットの宛先を10.0.0.11から10.82.80.208に変更するにはどうすればよいですか?

1
user260787

あなたが犯している最初の間違いは、ローカルで生成されたパケットを操作するためにPREROUTINGチェーンを使用することです。自分のマシンで生成されたパケットは、PREROUTINGを通過することはなく、OUTPUTチェーンとPOSTROUTINGチェーンのみを通過します。 OUTPUTチェーンでローカルに生成されたパケットに対してNATを実行する必要があるため、ルールは次のようになります。

iptables -t nat -A OUTPUT -i eth0 -p tcp  -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208
iptables -t nat -A OUTPUT -i eth0 -p icmp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208
iptables -t nat -A OUTPUT -i eth0 -p udp  -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208

PREROUTINGは、マシン(10.82.80.206)がキャンパスネットワーク上の他のマシンの10.0.0.11/21へのゲートウェイとして機能している場合にのみ使用してください。

2
Jakov Sosic