在 Linux 伺服器架設 PPTP/L2TP VPN 後,用戶端連線若出現 807 錯誤(通常為「網路連線中斷」或「無法建立隧道」),多半是防火牆 iptables 封鎖了 VPN 關鍵協定封包(GRE 協定、TCP 1723 埠)。本文說明如何檢查與調整規則順序以解決問題。
編輯 /etc/sysconfig/iptables(或對應的防火牆設定檔),確保以下兩條規則存在且位於任何 REJECT/DROP 規則之前:
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -p gre -j ACCEPT
--dport 1723:PPTP 控制通道。-p gre:GRE 協定(IP 協定號 47),用於封裝 PPP 資料封包。iptables 依序匹配規則,若 -A INPUT -j REJECT ... 出現在上述兩條規則前面,VPN 封包會被直接拒絕。需將 ACCEPT 規則移至 REJECT 規則上方。
調整範例(使用行號插入):
# 查看帶行號的規則
iptables -L INPUT --line-numbers
# 假設 REJECT 規則在第 5 行,在其前插入
iptables -I INPUT 5 -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -I INPUT 5 -p gre -j ACCEPT
sudo service iptables restart
# 或 systemd 系統
sudo systemctl restart iptables
用戶端重新撥號,807 錯誤應消失。若仍失敗,請檢查:
/etc/pptpd.conf / /etc/xl2tpd/xl2tpd.conf 設定正確。nf_conntrack_pptp、nf_conntrack_proto_gre 已載入(lsmod | grep -E 'pptp|gre')。
確保 tcp/1723 與 GRE 封包在防火牆 INPUT 鏈中優先被接受,即可解決多數 Linux VPN 807 連線錯誤。