NO IMAGE

ubuntu 16.04 下搭建 pptp vpn


引言

生活中,我們可能經常會碰到這三種情況:

(1)有一臺外網的機器(假設為A),和一臺內網的機器(假設為B),且該內網機器能夠從外網訪問到。我們想要從外網的機器A,藉助該內網機器B,訪問內網的其他資源。

(2)有多臺內網機器,且其中只有一臺可以訪問外網(假設為A),其他機器均只能在內網聯通(假設為B-Z)。我們想要從任意一臺不能訪問外網的機器(比如B),藉助可以訪問外網的機器A,訪問外網資源。

(3)科學上網,翻越GFW,這種情況類似於情況(2),A機器是能夠訪問國外網路的主機,B-Z機器是國內主機,B-Z可以通過A科學上網。其實情況(3)可以算是情況(2)的一種,畢竟我大天朝是個超大區域網= =。。

碰到這樣的情況,我們就可以使用vpn來實現,在情況(1)中,我們要在機器B上搭建vpn服務,在情況(2)和情況(3)中,則是在機器A上搭建vpn服務。其他機器通過vpn進行訪問即可。

博主遇到的情況屬於第二種。博主現役大三狗,學校宿舍寬頻每天夜裡12點斷網。學校的校園網是不斷網的,需要賬號登陸才能訪問外網,不登陸就只能訪問內網。然而賬號在宿舍區是登入不上去的。。。(我能怎麼辦,我也很絕望啊)

然而,我在大學生創新實驗室(我們學校給學生提供的用於科技競賽訓練的場所)由一臺機子,是可以登入賬號的。於是乎,突發奇想,用實驗室的機子搭一個vpn,再用寢室的機器通過內網連過來不就行了麼?!再接著,就有了這篇博文。。。記錄搭建方法以及我遇到的坑點。


搭建方法

1.安裝pptp以提供VPN服務

輸入Ctrl Alt T開啟一個終端,在裡面輸入

sudo apt-get install pptpd

很快就安裝好了。

2.對pptpd.conf中的配置資訊進行修改

在終端中輸入命令,使用vim開啟pptpd.conf:

sudo vim /etc/pptpd.conf 

如果不會使用vim,並且ubuntu主機上裝有圖形使用者介面,可以使用gedit進行編輯:

sudo gedit /etc/pptpd.conf 

如果主機上沒有安裝gedit,可以通過下面的命令進行安裝:

sudo apt-get install gedit

在開啟的內容裡面找到這兩行,並取消掉註釋(PS1:取消註釋就是刪除行首的#,下同)(PS2:直接找不好找的話,可以使用文字編輯器的查詢功能):

localip  192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

分別為建立vpn時的主機ip和連線vpn的其他主機使用的ip段,可以自行修改。

注意,這裡的ip並不是指外網ip或者當前區域網ip,而是指建立VPN(虛擬專用網路)會分配的ip地址。一般這個可以不用修改。

3.修改chap-secrets以分配vpn賬號

連線pptp vpn是需要使用賬號登陸的,這個賬號由我們自己配置。

首先,開啟/etc/ppp/chap-secrets

sudo vim /etc/ppp/chap-secrets 

sudo gedit /etc/ppp/chap-secrets 

開啟之後,我們在文件末尾新增新的賬號,格式如下:

使用者名稱 pptpd 密碼 *

如:

zhangsan  pptpd  123456  *

末尾的*表示可以使用任意IP連入,如果你要設定指定IP才能連線到vpn,可以將*替換成對應的IP。

如果要新增多個賬號,只需要換行,然後按照格式繼續輸入即可。

4.設定vpn的ms-dns

接下來,我們要配置vpn使用的dns,這裡,我就碰到了一個大坑,後面說。

首先,我們開啟/etc/ppp/pptpd-options

sudo vim /etc/ppp/pptpd-options 
或
sudo gedit /etc/ppp/pptpd-options 

在開啟的文件中找到ms-dns,並取消掉註釋,並在後面填上適當的dns。

一般來說,內網藉助vpn訪問外網,只需要在這裡填上外網的dns就可以了,比如谷歌的dns8.8.8.88.8.4.4(情況(3)這樣配置ms-dns就可以了,可以直接到下一步了):

ms-dns 8.8.8.8
ms-dns 8.8.4.4

我遇到的坑點就在這裡,我填上谷歌的dns是無法訪問外網的。崩潰啊,卡了我好久。各種查詢資料,以及對學校的校園網的架構進行分析後,發現原因可能如下:

實驗室的那臺主機並不是直接訪問外網,它仍是校園網的各級子網的一部分,它的網路請求是要查詢校園網這個區域網內的dns,經過校園網路由發出去的。

於是,我就去找了校園網的dns主機地址,並填入到ms-dns後面,測試一下,問題解決了= =

跟我相同情況的同學,可以去找一下自己學校的dns伺服器的地址,並進行更改。

5.開啟核心IP轉發

在終端裡輸入:

sudo vim /etc/sysctl.conf
或
sudo gedit /etc/sysctl.conf
(後面就不就gedit的例子了,大家應該都知道是怎麼回事了,不會用vim就用gedit替代就行了)

在開啟的文件中找到

#net.ipv4.ip_forward=1

取消掉註釋(即刪除行首的#)。
儲存之後,在終端中輸入命令使我們的修改生效:

sudo sysctl -p

6.配置iptables

首先,如果沒有安裝iptables,要先進行安裝,安裝過的可以跳過:

sudo apt-get install iptables

接下來,清除iptables裡舊的規則(這裡針對之前裝過pptp,但是沒配置好的同學。如果是從我這個教程開始的,並且新裝的iptables,這一步可以跳過)。

sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X

然後,允許gre協議以及1723埠、47埠:

sudo iptables -A INPUT -p gre -j ACCEPT 
sudo iptables -A INPUT -p tcp --dport 1723 -j ACCEPT 
sudo iptables -A INPUT -p tcp --dport 47 -j ACCEPT 

下一步,開啟NAT轉發:

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eno1 -j MASQUERADE

注意,上面的eno1是我連線網路的網絡卡的名稱,不同機器這個可能是不一樣的。如果不清楚是哪一塊網絡卡聯網以及網絡卡的名稱,可以在終端輸入ifconfig來檢視。

7.重啟服務,使我們的配置生效

在終端中輸入以下指令重啟服務:

sudo service pptpd restart

這個時候,其他機器使用我們之前配置的賬號密碼,已經可以連線上VPN,並通過VPN來訪問外網了。

8.vpn代理上網慢解決方案

在步驟7完成後,vpn已經可以使用了,但是卻可能碰到通過vpn上網網速奇慢的情況,我搭建完就是這樣的。碰到這種情況,解決方案如下:

開啟終端,輸入以下命令

sudo -I FORWARD -p tcp --syn -i ppp  -j TCPMSS --set-mss 1356

重啟vpn服務:

sudo service pptpd restart

相關原理戳這裡,參考自CentOS下pptp搭建vpn代理上網很慢的解決辦法


結束語

至此,ubuntu上的pptp vpn服務搭建完成。

搭建過程中,碰到了很多坑點,但大部分都很輕鬆就解決了。只有dns那個坑點,把我卡了很久很久,各種找資料、猜原因,才解決掉。經過此事,算是對vpn的原理和校園網的架構有了更深的認識,在寢室也可以保持不斷網了,算是有所收穫。要學的東西還是很多啊。

其實,vpn我一年前就搭起來了,只是拖到了現在才想寫一篇部落格,2333。。。


參考資料

[1] Ubuntu14.04下搭建VPN服務
[2] CentOS下pptp搭建vpn代理上網很慢的解決辦法