Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

解決 vsftpd 連線失敗「No route to host」:iptables 開放 21/20 連接埠與被動模式完整設定

編輯:關於伺服器

錯誤現象

FTP 用戶端連線 vsftpd 顯示:No route to host,但本機 ftp localhost 正常,排除 vsftpd 服務本身問題。

根本原因

Linux 防火牆 (iptables) 未開放 FTP 命令連接埠 21 及資料連接埠 20 (主動模式) / 被動模式連接埠範圍,導致連線封包被丟棄。

檢查現有規則

iptables -L -n -v

若 OUTPUT/INPUT 鏈無針對 21/20/被動埠的 ACCEPT 規則,或預設政策為 DROP/REJECT,即為原因。

解決方案:修改 /etc/sysconfig/iptables 持久化規則

  1. 編輯防火牆設定檔:
    vi /etc/sysconfig/iptables
  2. 在 *filter 區塊中,COMMIT 之前新增規則 (建議放在現有 ACCEPT 規則之後):
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
# 被動模式連接埠範圍 (需與 vsftpd.conf pasv_min_port/pasv_max_port 一致)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 60000:60100 -j ACCEPT
  1. 儲存離開 (:wq),重啟防火牆:
    service iptables restart (CentOS 6) 或 systemctl restart iptables (CentOS 7)。

vsftpd.conf 關鍵被動模式設定 (必須配合防火牆)

pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100
pasv_address=<伺服器公網IP>  # 如在 NAT 後需指定公網 IP
port_enable=YES
connect_from_port_20=YES

驗證步驟

  1. 本機測試:ftp localhost → 登入成功。
  2. 遠端測試:FileZilla / WinSCP / 命令列 ftp <伺服器IP> → 連線成功、列出目錄、上傳下載正常。
  3. 檢查 iptables 計數器:iptables -L -n -v 觀察新增規則封包/位元組計數遞增。

雲端/安全組額外設定

若伺服器在 AWS/Azure/阿里雲/騰訊雲等平台,亦需在安全組/網路 ACL 開放相同連接埠 (21, 20, 60000-60100),否則封包在進入作業系統前即被攔截。

常見誤區

  • 僅開放 21 連接埠:主動模式資料連線用 20,被動模式用高位連接埠範圍,僅開 21 會導致「連線成功但 LIST/上傳/下載掛住」。
  • 未設定 pasv_address:NAT 環境下伺服器回傳內網 IP 給用戶端,用戶端無法連線資料通道。
  • SELinux 阻擋:CentOS/RHEL 需執行 setsebool -P ftpd_full_access=1 或設定正確布林值。
Copyright © Windows教程網 All Rights Reserved