單網(wǎng)卡Ubuntu服務(wù)器打造 PPTP Server

實(shí)驗(yàn)室的內(nèi)部網(wǎng)絡(luò)中有不少非常有用的資源,例如科研用的文獻(xiàn)資料,個(gè)人的實(shí)驗(yàn)數(shù)據(jù)等等,這些內(nèi)容一旦離開實(shí)驗(yàn)室就不那么容易訪問到了。解決這個(gè)問題最好的辦法就是 VPN。在 Ubuntu 上搭建 VPN 服務(wù)器的方法非常多,比較著名的有 PPTP, L2TP/IPSec 和 OpenVPN。這三種方式中后兩者的安全性比較好,但配置較麻煩。其中 OpenVPN 在 Windows/Mac 平臺(tái)上還需要額外的客戶端。而 L2TP/IPSec 方式雖然比較好,但我配置后,雖然 Windows 和 Linux 用戶沒有問題,但 Mac/iPhone 卻始終無(wú)法連上,所以暫時(shí)刪掉了,日后搞清楚是什么問題再換到這種方式。
只剩下 PPTP 了。事實(shí)上 PPTP 是這三者中配置最容易的方式,而且由于 Windows/Mac 系統(tǒng)中都內(nèi)建相應(yīng)的客戶端,使用起來(lái)非常方便。下面我就簡(jiǎn)單寫寫我的安裝過(guò)程,希望對(duì)需要的朋友有用。當(dāng)然如果您有什么高見,也歡迎您提出。
首先,我所有的操作都是在之前文章中介紹的 Ubuntu 8.04 Server 系統(tǒng)中操作的,如果您的系統(tǒng)和我的不一樣,請(qǐng)參考之前的兩篇文章。我的服務(wù)器環(huán)境是單網(wǎng)卡 eth0。
在 Ubuntu 中建立 pptp server 需要的軟件包為 pptpd,用 apt-get 即可安裝:
sudo apt-get pptpd pptpd
系統(tǒng)會(huì)自動(dòng)解決依賴關(guān)系,安裝好后,需要進(jìn)行一番設(shè)置。首先編輯 /etc/pptpd.conf
sudo nano /etc/pptpd.conf
去掉文件最末端的 localip 和 remoteip 兩個(gè)參數(shù)的注釋,并進(jìn)行相應(yīng)修改。這里,localip 是 VPN 連通后服務(wù)器的 ip 地址,而 remoteip 則是客戶端的可分配 ip 地址。下面是我的配置:
localip 10.100.0.1 remoteip 10.100.0.2-10
編輯好這個(gè)文件后,我們需要編輯 /etc/ppp/pptpd-options 文件,還是用 nano 編輯,命令這里就不寫了。這里絕大多數(shù)參數(shù)只需維持原來(lái)的默認(rèn)值即可,我們只需要改變其中的 ms-dns 選項(xiàng),為 VPN 客戶端指派 DNS 服務(wù)器地址:
ms-dns 202.113.16.10 ms-dns 208.67.222.222
修改 /etc/ppp/chap-secrets 文件,這里面存放著 VPN 的用戶名和密碼,根據(jù)你的實(shí)際情況填寫即可。如文件中注釋所示,第一列是用戶名,第二列是服務(wù)器名(默認(rèn)寫 pptpd 即可,如果在 pptpd-options 文件中更改過(guò)的話,注意這里保持一致),第三列是密碼,第四列是 IP 限制(不做限制寫 * 即可)。這里我就不貼我的配置了
全部搞定后,我們需要重啟 pptpd 服務(wù)使新配置生效:
sudo /etc/init.d/pptpd restart
找一臺(tái) Windows 電腦,新建個(gè) VPN 鏈接,地址填服務(wù)器的 IP(或域名),用戶名密碼填剛才設(shè)置好的,域那項(xiàng)空著(如果你在 pptpd-options 中設(shè)置了,這里就保持一致),點(diǎn)連接就可以了。正常情況下您應(yīng)該能夠建立與服務(wù)器的 VPN 鏈接了。
建立連接之后,您會(huì)發(fā)現(xiàn)除了可以訪問服務(wù)器的資源,其余內(nèi)外和互聯(lián)網(wǎng)的內(nèi)容均無(wú)法訪問。如果需要訪問這些內(nèi)容的話,我們還需要進(jìn)一步設(shè)置:
首先,開啟 ipv4 forward。方法是,修改 /etc/sysctl.conf,找到類似下面的行并取消它們的注釋:
net.ipv4.ip_forward=1
然后使新配置生效:
sudo sysctl -p
有些時(shí)候,經(jīng)過(guò)這樣設(shè)置,客戶端機(jī)器就可以上網(wǎng)了(我在虛擬機(jī)上這樣操作后就可以了)。但我在實(shí)驗(yàn)室的服務(wù)器上這樣操作后仍然無(wú)法訪問網(wǎng)絡(luò),這樣我們就需要建立一個(gè) NAT。這里我們使用強(qiáng)大的 iptables 來(lái)建立 NAT。首先,先安裝 iptables:
sudo apt-get intall iptables
裝好后,我們向 nat 表中加入一條規(guī)則:
sudo iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
這樣操作后,客戶端機(jī)器應(yīng)該就可以上網(wǎng)了。
但是,只是這樣,iptables 的規(guī)則會(huì)在下次重啟時(shí)被清除,所以我們還需要把它保存下來(lái),方法是使用 iptables-save 命令:
sudo iptables-save > /etc/iptables-rules
然后修改 /etc/network/interfaces 文件,找到 eth0 那一節(jié),在對(duì) eth0 的設(shè)置最末尾加上下面這句:
pre-up iptables-restore < /etc/iptables-rules
這樣當(dāng)網(wǎng)卡 eth0 被加載的時(shí)候就會(huì)自動(dòng)載入我們預(yù)先用 iptables-save 保存下的配置。
到此,一個(gè) VPN Server/Gateway 基本就算架設(shè)完畢。當(dāng)然,也許你按照我的方法做了,還是無(wú)法成功,那么下面總結(jié)一些我碰到的問題和解決方案:
無(wú)法建立 VPN 連接
安裝好 pptpd 并設(shè)置后,客戶端還是無(wú)法建立到服務(wù)器的連接。造成的原因可能有以下幾種:
服務(wù)器端的防火墻設(shè)置:PPTP 服務(wù)需要使用 1723(tcp) 端口和 gre 協(xié)議,因此請(qǐng)確保您的防火墻設(shè)置允許這兩者通行。
如果服務(wù)器在路由器后面,請(qǐng)確保路由器上做好相應(yīng)的設(shè)置和端口轉(zhuǎn)發(fā)。
如果服務(wù)器在路由器后面,那么請(qǐng)確保你的服務(wù)器支持 VPN Passthrough。
如果客戶端在路由器后面,那么客戶端所使用的路由器也必須支持 VPN Passthrough。其實(shí)市面上稍微好點(diǎn)的路由器都是支持 VPN Passthrough 的,當(dāng)然也不排除那些最最最便宜的便宜貨確實(shí)不支持。當(dāng)然,如果你的路由器可以刷 DD-Wrt 的話就刷上吧,DD-Wrt 是支持的。
能建立鏈接,但“幾乎”無(wú)法訪問互聯(lián)網(wǎng)
這里我使用“幾乎”這個(gè)詞,是因?yàn)椴⒉皇峭耆荒茉L問互聯(lián)網(wǎng)。癥狀為,打開 Google 搜索沒問題,但其它網(wǎng)站均無(wú)法打開;SSH 可用,但 scp 不行;ftp 能握手,但傳不了文件。我就遇到了這種情況,仔細(xì) Google 后發(fā)現(xiàn)原來(lái)是 MTU 的問題,用 ping 探測(cè)了一下果然是包過(guò)大了。知道問題就好辦了,我們可以通過(guò) iptables 來(lái)修正這一問題。具體原理就不講了,需要的自己 Google。這里只說(shuō)解決方案,在 filter 表中添加下面的規(guī)則:
sudo iptables -A FORWARD -s 10.100.0.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1200
上面規(guī)則中的 1200 可以根據(jù)你的實(shí)際情況修改,為了保證最好的網(wǎng)絡(luò)性能,這個(gè)值應(yīng)該不斷修改,直至能保證網(wǎng)絡(luò)正常使用情況下的最大值。
好了,至此,一臺(tái)單網(wǎng)卡 pptp-server 就算完成了。
相關(guān)文章
Ubuntu Server使用ant批量打包apk環(huán)境搭建
服務(wù)器是UbuntuServer,如果沒有圖像界面,所有只能搭建一個(gè)命令行環(huán)境,直接執(zhí)行ant腳本打包,找了一下資料,根據(jù)自己的環(huán)境配置搭建過(guò)程與大家分享2013-09-16Ubuntu Server Rsync服務(wù)端與Windows cwRsync客戶端實(shí)現(xiàn)數(shù)據(jù)同步配置教
cwRsync客戶端每天凌晨3:00鐘自動(dòng)同步Rsync服務(wù)端/home/mysql_data目錄中的數(shù)據(jù)到D:\mysql_data目錄2013-06-29- iptables 是一個(gè)安裝在Ubuntu Server上的默認(rèn)防火墻。在正常的ubuntu安裝過(guò)程中,iptables是被安裝上了的,但是它默認(rèn)允許所有的流量(不管防火墻是否是無(wú)效的)2012-05-29
Ubuntu Server下配置UTF-8中文/英文環(huán)境的方法
有需要給Ubuntu Server裝中文環(huán)境的往這看,該加sudo的自己加去,俺是root2012-04-18Ubuntu服務(wù)器上SSH Server 的安裝和設(shè)置
昨天的文章里,我記錄了搭建一個(gè)小型 Ubuntu 服務(wù)器的過(guò)程,相信如果各位按照我寫的做了,您的 Ubuntu Server 已經(jīng)可以跑起來(lái)了。2011-03-17- 對(duì)于想要在外部訪問內(nèi)部的網(wǎng)絡(luò),除了在防火墻上開啟相應(yīng)服務(wù)器所對(duì)應(yīng)的端口,最好的方法應(yīng)該是建立Server,使得用戶可以在外網(wǎng)任何一臺(tái)計(jì)算機(jī)上撥入到內(nèi)網(wǎng)中進(jìn)行操作2011-03-17
Ubuntu Server最佳方案(Ubuntu,Linux,Server) 冷罡華pdf掃描版
本書是第一本全面介紹Ubuntu Linux Server的中文書籍,是作者10多年實(shí)戰(zhàn)經(jīng)驗(yàn)的結(jié)晶;從構(gòu)思到出版,花費(fèi)作者近3年時(shí)間。無(wú)論您是初學(xué)者還是Linux高手,都能從中獲益。2011-01-20- 環(huán)境:Ubuntu8.04 1.安裝build工具 sudo aptitude install build-essential linux-headers-$(uname -r) 2.安裝readline zlib libncurses5 apt-get install zlib1g-dev2009-06-25
Ubuntu 通過(guò)無(wú)線網(wǎng)絡(luò)安裝Ubuntu Server啟動(dòng)系統(tǒng)后連接無(wú)線網(wǎng)絡(luò)的方法
最近有朋友說(shuō)Ubuntu系統(tǒng)有個(gè)不人性化的地方,安裝過(guò)程中選擇無(wú)線網(wǎng)卡,即使用無(wú)線網(wǎng)絡(luò)安裝,系統(tǒng)安裝完成重啟后并不會(huì)自動(dòng)啟動(dòng)無(wú)線網(wǎng)卡并連接安裝時(shí)選擇的Wi-Fi網(wǎng)絡(luò)。下面2016-10-31