解决通过nat的ftp无法列表问题

发表于:2007-07-04来源:作者:点击数: 标签:
登陆 linux 的ftp 服务器 没问题,只是登陆 windows 的有问题,当列表时无法列出. 解决通过nat的ftp无法列表问题: 登陆linux的ftp服务器没问题,只是登陆 windows 的有问题,当列表时无法列出. modprobe ip_nat_ftp 时出现: modprobe: Too deep recursion in modu
登陆linux的ftp服务器没问题,只是登陆windows的有问题,当列表时无法列出.

解决通过nat的ftp无法列表问题:
登陆linux的ftp服务器没问题,只是登陆windows的有问题,当列表时无法列出.

modprobe ip_nat_ftp 时出现:

modprobe: Too deep recursion in module dependencies!
modprobe: Circular dependency? ip_nat_proto_udp ip_conntrack ip_nat_core ip_nat_helper ip_nat_ftp
已经放弃
用insmod ip_nat_ftp 后就解决问题.


之后找了些资料.他们是这样讨论的:

加载模块:
modprobe ip_tables
insmod ip_conntrack
insmod ip_conntrack_ftp
insmod ip_nat_ftp

关于有状态功能,重点在于后三个模块:
ip_conntrack模块能够使防火墙具有连接跟踪能力。(通过输入 "cat /proc/net/ip_conntrack" 可以查看您的机器参与的活动网络连接。)

加载这个模块后,基本上所有有状态的返回包都能识别,例:telnet,http,QQ,mail,ping,dns等。

实际上,加载了ip_conntrack模块,ftp已经能够登陆,并能使用象pwd,cd等命令,但当使用ls命令显示文件内容时,就会timeout。原因在于

显示文件列表的包防火墙无法识别,就会进入默认策略----禁止,此时就需要加载ip_conntrack_ftp模块。

ip_conntrack_ftp模块使防火墙能够识别FTP某类特殊的返回包。

如果防火墙上对所有出去的返回包作了伪装,就需要加载ip_nat_ftp模块。
ip_nat_ftp模块在出去的包作了伪装以后,必须加载,否则防火墙无法知道返回的包该转发到哪里。


http://www.chinaunix.net/jh/4/517901.html
 網中人 回复于:2005-03-29 15:22:36
在做試驗之前, 可先用所學的基礎來論證一下, 將更有助理解.

首先要理解前面 platinum 兄貼的說明, 也就是關於 ftp 的兩種連線模式.
然後再來區分出 port command 的內容是在 ftp packet 內的, 而不是記錄在 tcp/ip header 內.
當我們的 firewall/nat 在沒有 modules 幫忙的情況下,
只會檢查及修改 tcp/ip header 的內容而不會去理會 ftp packet 的內容.
如此, 在 ftp active mode 下,
當來自 ftp server port 20 的 NEW packet 到達 firewall/nat 時, 
由於沒有連線記錄也沒預先開好的規則讓 packet 通過, 那這時 ftp-data channel 就會斷掉.
若有 ip_conntack_ftp module 的幫忙, firewall 還會對所有 port 21 相關的 tcp packet 展開查看裡面的 ftp packet.
如發現有 port command, 那可事先為這個 RELATED 連線開通規則, 讓 ftp-data packet 穿過 firewall .

然而 conntrack module 只是監控連線, 不會對 packet 做任何的修改.
這在 direct-routing 環境下的 firewall 就夠用了.
但是在 nat 環境下呢?
先讓我們看看 ftp packet 裡的 port command 所使用的 address : 
是使用 nat 之後的外部地址還是 nat 之前的內部地址呢?
假如沒有 ip_ftp_nat module 的幫忙, 那肯定是使用 nat 之前的內部地址.
這樣, 請問另一端的 server/client 的 ftp-data packet 要送到哪裡去?
呵, 當然是送到內部地址去啦. 但, 這在 internet 上是行不通的. 或根本就送錯地方而遭 reset !
okay, 如此, 怎才能讓另一端的 packet 送回這端的外部地址? 且還能改回到正確的內部地址去呢?
答案呼之欲出---就是 ip_nat_ftp 要做的事情!
 

原文转自:http://www.ltesting.net