如何使用iptables将本地主机stream量转发到远程主机?

我想设置我的CentOS 6.5盒子来把连接转到本地主机(127.0.0.1)到远程机器上的同一个端口(例如10.0.3.10)。

我已经尝试了下面的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 ,我可以看到没有传入的stream量。 我做了一些谷歌search,但没有发现任何特别有用的东西。 我也确认我的sysctl.conf文件包含net.ipv4.ip_forward = 1

编辑我已经添加了日志logging以回应下面的评论之一。 当我去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 

我不知道如何在这台机器上configurationiptables来做你想要的。 我通常在这种情况下使用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 

诀窍包括启用出站接口的localhost / localnet路由处理:

 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