2010/07/07

PoPToP - Ubuntu 下架設 PPTP VPN

概要

PoPToP 在 Ubuntu 下架設 PPTP VPN 伺服器。這樣就可以透過 VPN 來幹很多事情,例如在公司連到家裡的 VPN 來上 MSN, 掛 PTT 之類的。或者存取遠端的網路芳鄰拿檔案。

介紹

PPTP VPN 是許多 VPN 實現方法的其中一種,選擇它的原因是因為 Windows 已經內建 Client 端支援,可以直接進行 VPN 連線,不需安裝其他第三方軟體,最簡便。PPTP VPN 的連線過程中使用微軟 MPPE 128bit 加密。如果對安全性有非常大的需求 (例如 AES 256bit),建議使用其他解決方案,例如 OpenVPN

安裝方法

Ubuntu 套件 pptpd
$ sudo apt-get install pptpd

非常簡單。

設定步驟

設定檔部分

- /etc/pptpd.conf
這個檔案是設定 PoPToP 的伺服器設定。需要修改的在檔案最尾端的localip / remoteip設定。
localip 192.168.1.1
remoteip 192.168.1.234-238

localip 指的是伺服器端的 IP,可以用虛擬IP,一般來說也都是指定虛擬 IP。
remoteip 指的是使用者連線完成後所分到的IP位置。範例設定開放 234 ~ 238 共 5 個 IP 位置,可以給五個人同時使用,可視情況修改。

- /etc/ppp/chap-secrets
這個檔案主要是設定可登入的使用者帳號密碼。以下是範例:

# PPP CHAP secrets file.
# See pppd(1) for file format.

# Secrets for authentication using CHAP
# client        server  secret          IP addresses
username       pptpd   password        *

# For ppp patched with smbauth you use
# * pptpd &/etc/samba/smbpasswd *
需要留意的是 server 填的 pptpd,其實是在 /etc/ppp/pptpd-options 這個檔案內所定義的 name,預設就是 pptpd。
而 secret 是明碼密碼,好在這個檔案權限是 600,只有 root 可以讀寫。
IP addresses 可以限制使用者登入時使用的 IP 位置,* 號代表不限,如果想限制使用者在特定IP區域才可登入,則可修改此設定。

系統部份

- 開啟 IPv4 Forward
$ cat /proc/sys/net/ipv4/ip_forward
1

如果結果是 0,那你需要修改設定。開啟 /etc/sysctl.conf 檔案,找到這行刪除其註解字元#後存檔。
net.ipv4.ip_forward=1

重開機才有效果。若想立即見效,可以下這行指令:
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables 防火牆部份

iptables 還需要做一點設定,才能順利將要求跟回傳的封包順利轉換及傳送。尤其是我們剛才分配了虛擬IP,要如何將這些要求給轉換是一件很重要的事情。

在命令列輸入以下指令:
功能: 開放 PoPToP 監聽 TCP Port 1723 和 GRE 封包
$ iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
$ iptables -A INPUT -p gre -j ACCEPT

功能: IPv4 要求封包轉向及偽裝設定
$ iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
$ iptables -A FORWARD -d 192.168.1.0/24 -j ACCEPT
$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
192.168.1.0/24 是剛才我設定 remoteip 的網段,如果位置不同記得修改。eth0 是對外連線的網卡介面,如果你的機器對外的介面不是 eth0 請自行修改。

修改完請記得作相關的規則儲存,不然重開機後這些規則又消失了。Ubuntu 有 iptables-save / iptables-restore 等相關程式可以做到,不懂或忘記的可以看一下鳥哥的 Linux 教學有關於 iptables 防火牆規則的教學。

重新啟動 PoPToP

執行下列指令:
$ /etc/init.d/pptpd restart

檢查是否在背景運作,用 ps 程式來確認:
$ ps -ef|grep pptpd
root      1173     1  0 17:32 ?        00:00:00 /usr/sbin/pptpd
root      3829  2839  0 21:32 pts/0    00:00:00 grep pptpd

檢查是否監聽 Port 1723:
$ netstat -an|grep 1723
tcp        0      0 0.0.0.0:1723            0.0.0.0:*               LISTEN

使用端連線 (Windows XP 為例)



看個影片吧,雖然是英文版但大同小異,在控制台的網路連線新增 VPN 連線即可。設定完成後點兩下輸入之前設定的使用者帳號密碼,按連線就連上了,非常簡單。

而這也有微軟官方的文字教學:如何在 Windows XP Professional 中設定企業網路的 VPN 連線

疑難排解

如果遇到程式無法啟動,檢查一下 System Log (/var/log/syslog),看 Log 裡寫什麼,可能是設定檔寫錯了。

如果啟動了,卻無法連線,一步步檢查到底是哪邊出問題:Diagnosing Forwarding on pptpd

按照步驟一步步檢查出到底是哪個網路設定出問題,再來排解。

參考資料

- Howto setup PPTP server (VPN) on Ubuntu 7.10 - SWiK
- 在Ubuntu中配置可供Windows主机访问的VPN服务器_面朝大海,春暖花开
- Diagnosing Forwarding on pptpd
- PPTP VPN 實作 « Jamyy's Weblog

沒有留言:

張貼留言