iptablesとブリッジを含むローカルネットワーク内のTCPトンネル

iptablesとブリッジを含むローカルネットワーク内のTCPトンネル

同じように動作するように外部および内部転送ルールを設定したいと思います。 「内部部分」に関する簡単な質問は次のとおりです。

私が持っているなら

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

関連情報