PPTP (Point-to-Point Tunneling Protocol) 雖安全性不如 OpenVPN/WireGuard,但**原生支援 Windows/macOS/iOS/Android 無需安裝客戶端**,適合快速臨時遠端存取內網、繞過地理限制。本文以 Ubuntu 20.04/22.04 為例,完整記錄從安裝到生產可用的全流程。
Client (任意裝置) --PPTP (TCP 1723 + GRE 47)--> Ubuntu Server (pptpd)
|
|-- 內網資源 (192.168.x.x)
|-- 公網出口 (eth0, NAT)
apt-get update
apt-get install -y pptpd
vim /etc/pptpd.conf
# 取消註解並修改
localip 10.0.0.1 # VPN 伺服器虛擬 IP (勿與實體網段衝突)
remoteip 10.0.0.100-200 # 客戶端獲取 IP 範圍 (DHCP 池)
vim /etc/ppp/chap-secrets
# 格式:用戶名 服務器 密碼 IP地址
# * 表示允許任意 IP 登入
user1 pptpd StrongPass123 *
user2 pptpd AnotherPass456 *
# 也可限制特定 IP:user1 pptpd Pass 10.0.0.105
權限:chmod 600 /etc/ppp/chap-secrets (僅 root 可讀寫)。
vim /etc/ppp/pptpd-options
# 找到 ms-dns 取消註解,建議使用公開 DNS 避免內網 DNS 汙染
ms-dns 8.8.8.8
ms-dns 8.8.4.4
# 或內網 DNS:ms-dns 192.168.1.1
vim /etc/sysctl.conf
# 取消註解
net.ipv4.ip_forward=1
# 立即生效
sysctl -p
# 假設外網介面為 eth0,VPN 網段 10.0.0.0/24
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
# 允許 VPN 客戶端存取內網 (若內網為 192.168.1.0/24)
iptables -A FORWARD -s 10.0.0.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -d 10.0.0.0/24 -s 192.168.1.0/24 -j ACCEPT
# 允許 GRE 協議 (PPTP 必須)
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
# 允許 PPTP 控制埠
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
apt-get install -y iptables-persistent
# 安裝過程會詢問是否儲存當前規則,選 Yes
# 或手動儲存
netfilter-persistent save
# 規則存於 /etc/iptables/rules.v4 (v6)
systemctl restart pptpd
systemctl enable pptpd
systemctl status pptpd
# 檢查埠口
ss -lntp | grep 1723
# 檢查介面
ip addr show ppp0 (客戶端連線後出現)
| 平台 | 設定重點 |
|---|---|
| Windows 10/11 | 設定 → 網路和網際網路 → VPN → 新增 → 提供者「Windows 內建」→ 類型 PPTP → 伺服器 IP/域名、帳號、密碼 → 記住登入資訊 → 連線 |
| macOS | 系統偏好設定 → 網路 → + → 介面 VPN / VPN 類型 PPTP → 伺服器位址、帳號、密碼 → 進階 → 勾選「透過 VPN 連線傳送所有流量」 |
| iOS/iPadOS | 設定 → 一般 → VPN 與裝置管理 → VPN → 新增 VPN 設定 → 類型 PPTP |
| Android | 設定 → 網路和網際網路 → VPN → + → 類型 PPTP |
| Linux (NetworkManager) | nm-connection-editor → + → PPTP → 閘道、用戶、密碼 → 進階 → 勾選「使用點對點加密 (MPPE)」 |
| 現象 | 原因/解決 |
|---|---|
| 連得上但無法上網/訪問內網 | NAT 規則缺失、IP 轉發未開啟、防火牆阻擋 FORWARD 鏈 |
| 連線後立即斷線 (LCP terminated) | MTU 過大、GRE 被阻擋、ISP 封鎖 PPTP |
| Windows 錯誤 809/806 | 防火牆阻擋 GRE/1723、路由器需開啟 PPTP 穿透/ALG |
| 客戶端獲取 IP 衝突 | remoteip 範圍與內網衝突 → 改用 10.x.x.x / 172.16.x.x 私有網段 |
apt install wireguard 幾分鐘搞定。PPTP VPN 在 Ubuntu 上**十分鐘可上線**,滿足「臨時遠端存取內網、非敏感流量繞過地理限制」等輕量需求。但生產環境長期使用,**請務必改用 WireGuard 或 OpenVPN**,並配合雙因子認證 (2FA)、證書認證、最小權限網段劃分,構建真正安全的遠端存取架構。