私は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に変更するにはどうすればよいですか?
あなたが犯している最初の間違いは、ローカルで生成されたパケットを操作するために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へのゲートウェイとして機能している場合にのみ使用してください。