尽我所能,我现在无法得到这个工作2天。 你的举动,互联网。
我希望iptables透明地转发(localhost)192.168.1.40:2222到192.168.2.22:22,我不想让192.168.2.0/24有权访问192.168.1.0/24
我有一个宽带业务类电缆连接到我的办公室,可以采取任何端口的stream量。 它的function是相当有限的,所以多年来我已经NAT了一个更好的netgear wifi路由器(桥接到上游调制解调器是不可能的)。 从第一个电缆调制解调器我转发所有端口到networking路由器,从那里我转发到其他一切(媒体服务器,邮件服务器,VPN服务器等)
今天,我把虚拟机放在一个新的vmware NATnetworking上。 我希望它完全与主networking隔离,并且我希望透明地从主networking上的主机转发到它的vmware NAT'ednetworking。 拓扑结构:
192.168.0.0/24 +-----+ +-------+ +--------------+ +----------------------+ | WAN |<->| Modem |<->| Netgear wifi |<->| Debian Linux 7 | +-----+ +-------+ | Router | | Server Running | +--------------+ | VMWARE Workstation | 192.168.1.0/24 +----------------------+ eth0: 192.168.1.40 vmnet99: 192.168.2.1 \\_+--------------+ \_| Guest | | Linux VM | | 192.168.2.22 | +--------------+ -Public IP- 173.175.202.93:2222 | -Modem- 192.168.0.1:2222 | -Router- 192.168.1.1:2222 <=========== Flow of traffic | -Host Server/iptables- 192.168.1.40:2222 | -Virtual Machine- 192.168.2.22:22
当我在主要主机上键入nc localhost 2222时,我想让guest虚拟机响应一个ssh提示符。 那是我需要的,所以它的行为是这样的:
+-----+ +-------------------+ +--------------------+ | WAN |<->| PUB IP, Port 2222 |<->| VM 192.168.2.22:22 | +-----+ +-------------------+ +--------------------+
我已经尝试使用VMware主机上的防火墙规则以及许多其他类似forms的iptables规则来完成此操作。 不pipe我尝试什么,它都不起作用:
:PREROUTING ACCEPT [30:4605] :INPUT ACCEPT [18:3693] :OUTPUT ACCEPT [330:21304] :POSTROUTING ACCEPT [342:22216] -A PREROUTING -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.2.22:22 -A POSTROUTING -p tcp -m tcp -j MASQUERADE COMMIT # Completed on Tue Dec 17 12:33:29 2013 # Generated by iptables-save v1.4.14 on Tue Dec 17 12:33:29 2013 *filter :INPUT ACCEPT [3188:201562] :FORWARD ACCEPT [6:582] :OUTPUT ACCEPT [4390:6225036] -A FORWARD -d 192.168.2.22/32 -o vmnet99 -p tcp -m tcp --dport 22 -j ACCEPT COMMIT # Completed on Tue Dec 17 12:33:29 2013
我需要做什么才能让192.168.1.40透明地来回转发192.168.2.22?
更新:你可以在这里下载wireshark捕获文件: http : //www.atrixnet.com/wireshark_capture_2013-12-17-14-04-09.pcapng.gz (当捕获运行时,我运行这个命令: $ ping -c1 192.168.2.22 ; sleep 1 ; nc localhost 2222 )
正如@MadHatter在评论中指出的那样,iptables转发和NAT不能从内部进行testing。 您必须遵循数据包从外部起点发出的path。
换句话说,如果您尝试从IP表执行转发的服务器尝试激活端口redirect,您的testing将失败。 你不能在本地做! 通过SSH连接到networking外部的服务器,并尝试重新进入您要转发的端口上的networking。
如果你的iptables规则是正确的,就像你在这里看到的一样,你会发现端口转发完美。
提示 :如果您正在运行基于Debian的Linux发行版,请安装iptables-persistent软件包以保持您的iptables在重新启动之间持续调整。