解決通過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 要做的事情!