ローカルホスト(127.0.0.1)への接続をリモートマシン(例:10.0.3.10)の同じポートに転送するようにCentOS6.5ボックスを設定したいと思います。
以下のiptablesルールを試しましたが、接続しようとするとハングします。
iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 -p tcp --dport 8888 \
-j DNAT --to-destination=10.0.3.10:8888
リモートマシンでtcpdump
を実行すると、着信トラフィックがなかったことがわかります。私はいくつかのグーグル検索を行いましたが、特に有用なものは何も見つかりませんでした。私のsysctl.conf
ファイルにnet.ipv4.ip_forward = 1
が含まれていることも確認しました。
編集以下のコメントの1つに応じてロギングを追加しました。 127.0.0.1:8888に移動すると出力が生成されませんが、10.0.3.10に移動すると出力が生成されます。
# Generated by iptables-save v1.4.7 on Tue Jul 29 12:52:17 2014
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [11:1008]
:OUTPUT ACCEPT [11:1008]
:LOGGING - [0:0]
-A OUTPUT -p tcp -m tcp -d 10.0.3.10 --dport 8888 -j LOGGING
-A LOGGING -j LOG --log-prefix "IPTABLES: "
-A LOGGING -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 8888 -j DNAT --to-destination 10.0.3.10:8
888
COMMIT
# Completed on Tue Jul 29 12:52:17 2014
# Generated by iptables-save v1.4.7 on Tue Jul 29 12:52:17 2014
*filter
:INPUT ACCEPT [50:2776]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [49:4336]
COMMIT
# Completed on Tue Jul 29 12:52:17 2014
このマシンでiptablesを設定して希望どおりに実行する方法がわかりません。私は通常そのような場合SSHトンネリングを使用します。セットアップは簡単です(ここでは個人的な意見です!);-)しかし、ローカルホストにSSH接続が必要です(リモートからアクセスできる必要はありません!)。
この場合のコマンド構文は次のとおりです。
ssh -f -C -N -L [<bind address>:]<local port>:<remote Host name>:<remote service port> [-p <ssh port>] [<username>@]<remote Host outside name>
つまり、あなたにとってそれは次のことを意味します。
ssh -f -C -N -L 127.0.0.1:8888:10.0.3.10:8888 localhost
秘訣は、次の方法でアウトバウンドインターフェイスのローカルホスト/ローカルネットルート処理を有効にすることです。
sysctl -w net.ipv4.conf.all.route_localnet=1
次に、これは機能します:
iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.10
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE