哈... 是的, 我相信你已有答案了.
不知其他讀者是否能夠理解?
為了方便, 我這裡簡單歸納一下好了:
在 active mode 下:
client NAT 需設 DNAT(或 modules) 而 server NAT 不需要.
這是因為 ftp-data connection 是從 server 到 client 端的.
server NAT 會有 outgoing 的 NAT masquerading record, 因此回來的封包只需作 De-Masquerading 就好了.
但 client 端會將之視為 NEW connection , 若沒有 DNAT 設定或 modules 幫忙, 則封包不會抵達 client 端.
假如用 DNAT 規則的話, 則需"事先"要配置好, 這不方便, 也容易產生安全上的漏洞.
若換成 modules(conntrack & nat), 則可"動態"的建立連線.
但問題是: module 如何得知要怎麼建呢?
原理是要讀取 ftp command-channel 的 PORT 命令就行...
若 ftp command-channel 用標準的 21 , 那 modules 只要監看 port 21 的封包就抓得到了.
但問題是, 如果 command-channel 不是標準的 21 呢?
那也簡單, 在載入 modules 時指定不就行了?!
好了, 換成 passive mode 又如何?
server NAT 需設 DNAT(或 modules) 而 client NAT 不需要.
這是因為 ftp-data connection 是從 client 到 server 端的.
client NAT 會有 outgoing 的 NAT masquerading record, 因此回來的封包只需作 De-Masquerading 就好了.
但 server 端會將之視為 NEW connection , 若沒有 DNAT 設定或 modules 幫忙, 則封包不會抵達 server 端.
(剩下的, 還要我說嗎?.... ^_^ )