感受VMware NAT对应用层协议的影响(配置guest机FTP server蛋疼实录)
不要问我为什么要在VMware下的guest机配置一个FTP server,但是我确实需要这样做。显然需要端口转发嘛,在virtual network settings里设置下21到21的转发。Done。
这时候问题来了,FTP的passive mode的端口怎么办?多扯几句关于passive/active的区别,这个p和a啊,指的是服务器的行为。在客户端连接到服务器21端口,建立命令连接后,传数据都是靠另外一条tcp连接的,但这一条TCP连接的建立,就比较复杂了。所谓passive,就是服务器(被动地)开放一个高端口监听,等待客户端连接;而active,则是客户端打开一个端口,请求服务器(主动)来连。显然后者听起来比较奇葩,哪有服务器发起连接的?要是客户端是NAT或者有防火墙怎么办?所以一般最好使用passive mode,对客户端环境不高。但反过来,passive mode对服务器网络环境要求就高了,不仅要允许21端口的入站连接,还要允许某一群高端口的入站连接。
于是呢,我就要配置VMware的入站连接的转发了。(这个过程会导致悲剧的结果,如果不想研究,请直接跳到结论)
(在DEBUG前,请关闭防火墙,以防干扰结果)
在guest机中,启动FTP server,设置监听端口21,passive mode的端口范围50000-50100
自然顺理成章地,在vmware NAT中转发50000-50100.但尼玛悲剧的是,它的转发只能一个端口一个端口设置(太不科学了)!忍着爆发的情绪,输了21个端口,即50000-50020,先这么着吧。同时设置passive mode时要求客户端连接的ip(显然是NAT的外网ip啦,要是内网IP人家还怎么连)。
然后我就用外网电脑一客户端连接之,命令连接显然没有问题,但在entered passive mode之后,服务器声称打开了【外网IP:50000】端口,但客户端收到的却是【外网IP:50541】端口,显然后者端口是个随机的,NAT没转发,怎么可能被FTP server收到!但试n遍都是同样的状态,就想到是不是NAT的问题?
于是在文章《VMware Workstation建立FTP服务器并使用PASV模式》中提到的常见问题中,有类似的情况,他提供的解决办法是不要使用默认的21到21的映射,你可以搞一个外网21到内网20021的映射呀,于是我就这样做了。嘿,果然端口号不被篡改了,直来直去爽歪歪!
但是处女座的我对现状依然不满(疑问):
为毛非要我21到20021的映射,凭什么21到21就乱搞我?为毛VMware的NAT这么sb,不支持端口段转发?(TP-Link路由都支持呢)明明能用了,为毛我还是不满??? 在我纠结之时,看到文章《FTP主动与被动之NAT》提到:
中国的ip地址资源太少,很多情况下ftp会话两端要经过层层NAT、网关、防火墙。 导致PORT PASV中的ip 信息不一定都是正确的。比如client的ip是192.168.0.107,其实它是通过NAT连接上网的,该NAT对外的internet地址是218.2.135.1,那么client 发送的PORT指令中携带的192,168,0,107,xx,yy 对于server是没有意义的。 所幸现在的NAT、防火墙一般都有FTP应用层感知能力,它能够截获ftp会话中的PORT PASSIVE, 自动将private的ip翻译成对外的正确的ip,并实时的在NAT上开放临时端口转发 。刚才的例子就会翻译成 218,2,135,1,xx,yy。 所以一般情况下,ftp还是能够正常工作的。
卧槽?NAT原来这么智能啊,你不主动发起连接,他都能帮你开转发啊。。。
想想之前遇到的端口被篡改事件,以及把映射端口变成20021就不影响的现象,应该和NAT有巨大关系。
结论
VMware的NAT是极其智能的,它可以感知应用层数据,帮你在傻瓜状态下实现passive mode。
触发条件:
NAT转发规则:21到21,表示你这个就是FTP服务。(只要任何一端端口换了,它就不管了,因此疑问1得以解释)
工作原理:
检测FTP应用层数据,当发出192,168,0,107,xx,yy时,它自动改成218,2,135,1, zz,ww,并建立外网zzww到内网xxyy的端口转发。
解决方法(正确的配置):
对于VMware,只需要配置21到21的端口转发对于guest中的FTP server,设置passive mode时要求客户端连接的ip为内网IP(或者选择default)不需要手工指定passive mode port range 此时服务器entered passive mode后,会通知客户端打开了一个【内网IP:某一端口】,NAT会将这句话自动改为【外网IP:另一端口】,并自动映射,从此皆大欢喜。因此往往涉及端口段的转发,VMware NAT是不需要的,因此没有提供这个功能(由此证明TP-Link是没有这么智能的?至此疑问2被解答)
(所以说我之前所有的设置都白费了,VMware提供了极为傻瓜的解决方案,而我知其一不知其二,硬是掺和进这一过程。所以要么21到21,完全让VMware解决;要么设置个20021非默认端口,自己一个一个配置转发passive mode range吧!)
对于疑问3,任何一点知识和经验都是由学习或实践积累而得,可以说我没时间阅读VMware的手册,就要抽出时间解决这些蛋疼问题。但蛋疼的就是自己的,花两个小时解决一个问题,而且弄清楚来龙去脉,岂不是很爽?
解决计算机问题完全靠滚雪球效应,知识越多(尤其是原理),解决得越快,很高兴自己走到了有信心解决一切问题的地步了,虽然耗时仍然很长……
(最后请记得把防火墙重新打开,并配置开放NAT可能开放的端口段,应该是50000以上,我这里是51000-52000)
- 07-30VMware 牵手360企业安全,透露了云安全的哪些信息?
- 07-30阿里云上VMware云解决方案开始邀请测试
- 07-30揭秘360黑客团队,让VMware修复致命漏洞
- 07-30戴尔考虑重新上市或者和VMware合并
- 07-30VMware为何要收购Kubernetes初创公司Heptio?
- 07-3019岁黑客破解Pornhub服务器
- 07-30VMware成为虚拟机的霸主
- 07-30VMware在华设立亚洲研究院
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复