VPN 簡介
VPN (Virtual Private Network) 虛擬私人網路,簡單的說就是透過 Internet 建立一條 Point-to-point Protocol 連線,利用這個 PPP 與不在同一個網段的網路建立連線。再講白一點就是透過 Internet 加入私有網路,在企業典型的 Intranet 架構中,也常遇到跨地區私有網路共享的問題,因此也常用這個方法解決網路資料傳輸與安全問題(因為 VPN 可以加密)。由於 VPN 直接透過 Internet 建立連線,可省下遷專線的龐大費用,算是很超值的作法,而且標準的 PPTP 比那種需要安裝軟體的 VPN 好用太多了。
CentOS 安裝 VPN Server (pptpd)
網路上有很多教學,但是都缺東缺西,今天介紹的設定方式經過實驗後可以在 Windows XP, Mac OS, Windows 7 順利連線,當然加密也是沒問題的。
今天教學用 CentOS 6.3 安裝 pptpd 套件,很可惜 CentOS 內建的官方套件沒有包進來,所以我們只好自行下載 RPM File,網址與載點如下:
載點:ftp://ftp.pbone.net/mirror/rpms.arrfab.net/centos/5/i386/pptpd-1.3.3-1.i386.rpm
下載與安裝 pptpd
[root@server ~]# yum install libc.so.6 libwrap.so.0 [root@server ~]# wget ftp://ftp.pbone.net/mirror/rpms.arrfab.net/centos/5/i386/pptpd-1.3.3-1.i386.rpm [root@server ~]# rpm -ivh pptpd-1.3.3-1.i386.rpm
安裝好以後要修改以下設定檔,編輯 /etc/ppp/options
[root@server ~]# vim /etc/pptpd.conf
加入以下設定
# 設定檔位置 option /etc/ppp/options.pptpd # 開啟 debug (會寫到 /var/log/message) 測試完記得關閉 debug # 連線數 connections 20 # ppp 主機的 IP 不一定要與目前的 Server ip 相同,主要是告訴給 Client 作為 Default Route localip 192.168.16.253 # Client 連上後會分配的 IP Range remoteip 192.168.16.160-180
再來編輯 /etc/ppp/options
[root@server ~]# vim /etc/ppp/options
加入以下參數,大部分都看不懂,所以也沒辦法說明囉.......-_-
asyncmap 0 auth crtscts lock hide-password modem proxyarp lcp-echo-interval 30 lcp-echo-failure 4 noipx
最後編輯 /etc/ppp/options.pptpd
[root@server ~]# vim /etc/ppp/options.pptpd
加入以下設定
name pptpd # 與連線加密相關的設定 refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 proxyarp nodefaultroute nobsdcomp # 設定要分派的 DNS Server ms-dns 168.95.1.1 ms-dns 139.175.10.20 # 指定 logfile logfile /var/log/pptpd.log # 設定閒置幾秒後自動斷線 idle 7200
建立帳號密碼,修改 /etc/ppp/chap-secrets
[root@server ~]# vim /etc/ppp/chap-secrets
這個檔案與 pppoe 是共用的,用明文建立感覺很不安全!一行一行加入你要使用的帳號密碼,這些帳號在系統中可以不存在沒關係。
####### system-config-network will overwrite this part!!! (begin) ########## ####### system-config-network will overwrite this part!!! (end) ############ "username" pptpd "password" *
開啟 Forward,主要是為了能夠進行 NAT,如果你不需要 NAT 也可以不要開,在大陸或國外會蠻好用的。
[root@server ~]# vim /etc/sysctl.conf [root@server ~]# service network reload
如上,修改「net.ipv4.ip_forward = 1」讓開機後自動啟用 Forward。
最後啟動 pptp 並且設定 pptpd 開機自動啟用
[root@server ~]# chkconfig --level 345 pptpd on [root@server ~]# service pptpd start
順利啟動後就可以測試連線了,連線的過程中可以觀看 /var/log/message 與 /var/log/pptpd.log (剛有設定到) 來進行除錯,當有 VPN Client 連上後使用 ifconfig 可以看到建立的 PPP 連線。
如果只是下達 service pptpd stop 並不會將 PPP 斷線,若是要關閉 VPN Server 同時斷線那麼請輸入以下命令:
[root@server ~]# service pptpd restart-kill
VPN 防火牆與 NAT 設定
由於我習慣防火牆都是使用白名單策略,因此需要加入以下 Rules:
# 開啟 forward 這樣才能將 VPN 網段與私有網段進行封包路由傳遞 echo "1" > /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/ip_dynaddr # 開啟 VPN 連線 iptables -A INPUT -p tcp --dport 1723 -j ACCEPT iptables -A OUTPUT -p tcp --sport 1723 -j ACCEPT iptables -A INPUT -p gre -j ACCEPT iptables -A OUTPUT -p gre -j ACCEPT # 開啟 NAT iptables -A FORWARD -i ppp+ -j ACCEPT iptables -A FORWARD -o ppp+ -j ACCEPT iptables -A POSTROUTING -t nat -o ppp+ -j MASQUERADE
Windows XP 建立 VPN 連線的方法
Windows 雖然很簡單,還是介紹一下,請照著以下方式設定即可:
開啟「控制台」中的「網路連線」並點擊「新增連線精靈」,如下:
按下「下一步」
選擇「連線到我工作的地方的網路」(有點饒舌)點選「下一步」
選擇「虛擬私人網路連線」點選「下一步」
輸入一個名稱,點選「下一步」
選擇要連線的 Internet,點選「下一步」
輸入伺服器位置 (不一定要 IP 也可以用 Hostname),點選「下一步」
選擇是否建立捷徑,點選「完成」
啟動後輸入帳號密碼直接「連線」即可
連不上或連上後有問題記得查閱 log
結論
以前我的 VPN Server 都是透過 Router 實作,買台便宜的 ASUS 520GU 刷 Dual Tomato 就可以擁有很多好用的功能。前陣子有礙 Router CPU 與 記憶體不夠用,這台功能強大的 NAT 已經被換掉,從此過著沒有 VPN 可以用的生活,最近真的需要用到了,只好自己安裝與架設。
有別於低階硬體 + RouteOS 架設出來的 VPN,用 PC 速度更快連線數也多,更不怕加密拖累了 Router,目前試用的感覺還不錯,有需要的朋友們可以試看看。