同じように動作するように外部および内部転送ルールを設定したいと思います。 「内部部分」に関する簡単な質問は次のとおりです。
私が持っているなら
compA - eth0 192.168.0.1
compB - br0 192.168.0.2
+eth0
compC - eth0 192.168.0.3 ...running appache on port80 with simple "it works" page
AからCにポート80を転送するためにcompBにtcpトンネルを設定できますか?
ブリッジがない場合(compB - eth0 192.168.0.2)、十分なコマンドは次のとおりです。
compB# iptables -t nat -A PREROUTING -d 192.168.0.2 -p tcp --dport 80 -j DNAT --to-destination 192.168.0 3
compB# iptables -t nat -A POSTROUTING -d 192.168.0.3 -p tcp --dport 80 -j MASQUERADE
ただし、次のコマンドを使用してBRIDGEを追加した後:
compB# brctl addbr br0; brctl addif br0 eth0
compB# ip addr del 192.168.0.2/24 dev eth0
compB# ip addr add 192.168.0.2/24 dev br0
compB# ip route del default; ip route add default 192.168.0.2/24 dev br0
compB# ip link set dev br0 on
compAのパケットはcompCに到着しなくなりました。テスト:
compA# echo -en "GET / HTTP/1.0\r\n\r\n" | nc 192.168.0.2 80
...compCのルートhttpページを返す必要があります(ブリッジなしでうまく機能します)。
修正する:
解決策1:
echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
iptablesブリッジングフックを無効にした後、状況は正常に戻りました。しかし、私はまだ標準のブリッジ構成で動作する「iptablesコマンドの組み合わせ」ソリューションを探しています。
解決策2:
ip link set dev br0 promisc on
また、動作しますが、グローバルパフォーマンスに影響を与えます。
解決策3:
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-dport 143 -j redirect --redirect-target DROP
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target DROP
ebtables -t broute -A BROUTING -p ipv4 --ip-proto tcp --ip-sport 80 -j redirect --redirect-target DROP
答え1
簡単な方法は次のとおりです。
iptables -A PREROUTING -d my.public.ip.address/32 -p tcp -m tcp --dport 587 -j DNAT --to-destination a.different.ip.address:587
a.different.ip.address
ルーティングテーブルが正しく設定されている限り、すべてのインターフェイスでこれが可能です。
フルループを実行するには、以下も必要です。
iptables -A POSTROUTING -s a.different.ip.address/24 -j SNAT --to-source my.public.ip.address