萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Ubuntu 搭建 PPTP VPN 伺服器完整教學:pptpd 安裝、CHAP 密碼、DNS、NAT 轉發、iptables 持久化

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)

步驟 1:安裝 pptpd


apt-get update
apt-get install -y pptpd

步驟 2:配置 pptpd.conf (IP 池)


vim /etc/pptpd.conf
# 取消註解並修改
localip 10.0.0.1          # VPN 伺服器虛擬 IP (勿與實體網段衝突)
remoteip 10.0.0.100-200   # 客戶端獲取 IP 範圍 (DHCP 池)

步驟 3:建立 CHAP 認證帳號 (/etc/ppp/chap-secrets)


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 可讀寫)。

步驟 4:指定 DNS 解析 (/etc/ppp/pptpd-options)


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

步驟 5:開啟核心 IP 轉發


vim /etc/sysctl.conf
# 取消註解
net.ipv4.ip_forward=1
# 立即生效
sysctl -p

步驟 6:配置 NAT (iptables) 讓 VPN 客戶端能上網/訪問內網


# 假設外網介面為 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

步驟 7:持久化 iptables 規則 (重開機不失效)


apt-get install -y iptables-persistent
# 安裝過程會詢問是否儲存當前規則,選 Yes
# 或手動儲存
netfilter-persistent save
# 規則存於 /etc/iptables/rules.v4 (v6)

步驟 8:重啟服務並驗證


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 私有網段

安全性警示與替代方案

  • **PPTP 已知弱點**:MS-CHAPv2 可被暴力破解、GRE 明文傳輸、無前向保密。**不建議用於高敏感資料傳輸**。
  • **強烈推薦替代方案**:
    • WireGuard:現代、極簡、高效能、原生內核模組,apt install wireguard 幾分鐘搞定。
    • OpenVPN:成熟、TLS 加密、支援 TCP/UDP、穿透防火牆強。
    • Tailscale / ZeroTier:零配置 Mesh VPN,適合團隊協作。

結語

PPTP VPN 在 Ubuntu 上**十分鐘可上線**,滿足「臨時遠端存取內網、非敏感流量繞過地理限制」等輕量需求。但生產環境長期使用,**請務必改用 WireGuard 或 OpenVPN**,並配合雙因子認證 (2FA)、證書認證、最小權限網段劃分,構建真正安全的遠端存取架構。

copyright © 萬盛學電腦網 all rights reserved