VPN(Virtual Private Network,虛擬私人網路)是專用網路的延伸,它可以通過共用Internet或公用網路連接類比點對點專用連線的方式,在本機電腦和遠端電腦之間發送資料。
它具有良好的保密性和不受幹擾性,使雙方能夠進行自由而安全的點對點連接。
Linux下常用的VPN服務有兩個,一個是pptp,另一個則是openvpn。前者更簡單一些,但是只有獨立伺服器和XEN VPS可以搭建;後者則沒有任何限制。前者搭建出來的VPN,不需要特殊的VPN用戶端,直接在Windows下建立VPN撥號連線即可;而後者需要安裝一個用戶端來進行撥號
網路實驗環境:
伺服器版本:CentOS 5.9
VPN伺服器:eth0=199.68.199.121
內網IP地址:192.168.1.100-200(通過NAT分配給使用者)
外網IP地址:199.68.199.121
一、檢查伺服器是否有必要的支援。
如果檢查結果沒有這些支援的話,是不能安裝pptp的。執行指令:
#modprobe ppp-compress-18 && echo ok
這條執行執行後,顯示“ok”則表明通過。不過接下來還需要做另一個檢查,輸入指令:
#cat /dev/net/tun
如果這條指令顯示結果為下面的文本,則表明通過:
cat: /dev/net/tun: File descriptor in bad state
上述兩條均通過,才能安裝pptp。否則就只能考慮openvpn,或者請你的服務商來解決這個問題。
Cent os 5.5核心版本在2.6.15以上,因此下面檢查可以忽略:
檢查PPP是否支援MPPE(這個要先裝了ppp再運行,不然是結果0)
用以下命令檢查PPP是否支援MPPE:
#strings ‘/usr/sbin/pppd’ |grep -i mppe | wc –lines
如果以上命令輸出為“0”則表示不支援;輸出為“30”或更大的數字就表示支援,MPPE(Microsoft Point to Point Encryption,微軟點對點加密)。
二、安裝ppp和iptables。
預設情況下,完整的CentOS是帶有這兩個組件的,但是精簡版的系統可能沒有。我們輸入下面的命令來確認,如果沒有則進行安裝,有的話系統不會做任何動作:
#yum install -y ppp iptables
三、安裝pptp。
這個軟體在yum源裡是沒有的,我們需要手動下載。我們先切換到tmp目錄:
#cd /tmp
然後執行下面的命令來下載pptp安裝包:
#wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm (32位系統使用)
#wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm (64位系統使用)
如果你的CentOS是32位的,則執行32位的那條指令;如果是64位的CentOS,則執行64位的那條指令。注意不要搞錯了,搞錯後面會報錯用戶端串連不上619或者800,並提示pptpd-logwtmp.so找不到。
接下來安裝pptp,同樣分32位和64位系統:
#rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm (32位系統使用)
#rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm (64位系統使用)
四、配置pptp。
首先我們要編輯/etc/pptpd.conf檔案:
#vim /etc/pptpd.conf
找到“locapip”和“remoteip”這兩個配置項,將前面的“;”注釋符去掉,更改為你期望的IP段值。localip表示伺服器的IP,remoteip表示分配給用戶端的IP地址,可以設定為區間。這裡我們使用pptp預設的配置:
localip 199.68.199.121
remoteip 192.168.1.100-200
注意,這裡的IP段設定,將直接影響後面的iptables規則添加命令。請注意匹配的正確性,如果你嫌麻煩,建議就用本文的配置,就可以一直複製命令和文本使用了。
接下來我們再編輯/etc/ppp/options.pptpd檔案,為VPN添加Google DNS:
#vim /etc/ppp/options.pptpd
在末尾添加下面兩行:
一般只需修改ms-dns,分配給VPN用戶端的DNS伺服器IP地址
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
idle 2592000 72個小時空閑斷開
ms-dns 8.8.8.8
五、設定pptp VPN帳號密碼。
我們需要編輯/etc/ppp/chap-secrets這個檔案:
#vim /etc/ppp/chap-secrets
在這個檔案裡面,按照“使用者名稱 pptpd 密碼 *”的形式編寫,一行一個帳號和密碼。比如添加使用者名稱為test,密碼為1234的使用者,則編輯如下內容:
test pptpd 1234 *(指定分配給test使用者的ip)
六、修改核心設定,使其支援轉寄。
編輯/etc/sysctl.conf檔案:
#vim /etc/sysctl.conf
將“net.ipv4.ip_forward”改為1,變成下面的形式:
net.ipv4.ip_forward=1
儲存退出,並執行下面的命令來生效它:
#sysctl -p
七、添加iptables轉寄規則。
經過前面的6個步驟,我們的VPN已經可以撥號了,但是還不能訪問任何網頁。最後一步就是添加iptables轉寄規則了,輸入下面的指令:
#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j SNAT –to 199.68.199.121
需要注意的是,這個指令中的“192.168.1.0/24”是根據之前的設定檔中的“remoteip”網段來改變的,比如你設定的 “10.0.0.1”網段,則應該改為“10.0.0.0/24”。此外還有一點需要注意的是eth0,如果你的外網網卡不是eth0,而是eth1(比如SoftLayer的伺服器就是這樣的情況,你可以用ifconfig命令來查看乙太網路口名稱),那麼請記得將eth0也更改為對應的網卡編號,不然是上不了網的!
然後我們輸入下面的指令讓iptables儲存我們剛才的轉寄規則,以便重啟系統後不需要再次添加:
#/etc/init.d/iptables save
然後我們重啟iptables:
#/etc/init.d/iptables restart
八、重啟pptp服務。
輸入下面的指令重啟pptp:
#/etc/init.d/pptpd restart
現在你已經可以串連自己的VPN並瀏覽網頁了。不過我們還需要做最後的一步。
九、設定開機自動運行服務。
我們最後一步是將pptp和iptables設定為開機自動運行,這樣就不需要每次重啟伺服器後手動啟動服務了。當然你不需要自動啟動服務的話可以忽略這一步。輸入指令:
#chkconfig pptpd on
#chkconfig iptables on
十、各種裝置裡面怎麼連我就不多說了
osx下就這樣子: