xiaowuhello
【转载】解决通过nat的ftp无法列表问题

登陆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 要做的事情!