PPTP配置VPN服務器

2016.12.8 初次發佈博客

2016.12.9 增加了關於TCP數據包MSS參數值的解釋和參考內容


一. 安裝PPTP

pptp是(Point to Point Tunneling Protocol),即點對點隧道協議。該協議是在ppp協議的基礎上開發的一種新的增強型安全協議,支持多協議虛擬專用網(VPN),可以通過密碼驗證協議(PAP)、可擴展認證協議(EAP)等方法增強安全性。pptpd是指運行在服務器上提供上述協議服務的軟件。

首先我們需要安裝pptpd,centos服務器用以下命令:

# yum install pptpd

Ubuntu服務器使用以下命令:

# sudo apt-get install pptpd

本文檔使用ubuntu服務器,pptp協議和pptpd版本如下:

二. 配置pptpd

2.1 配置IP地址

編輯/etc/pptpd.conf,首先我們配置IP地址,找到以下內容並將註釋符#去掉,這裏採用默認設置:

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

localip爲pptp虛擬的局域網中服務器的本機IP,remoteip爲客戶機連上後分配的IP地址範圍,這裏我們設置了6個可分配的IP地址。

上面的IP地址是可以隨便填的,ABC三類的內網地址都可以,主要兼顧其他地方的IP配置,不要出現IP衝突就可以了。

2.2 配置客戶端DNS

要配置客戶端的dns,首先要確定配置文件,查看/etc/pptpd.conf中指定的option文件,如果沒有指定,那就默認是/etc/ppp/pptpd-options。

這裏指定好了配置文件尾pptpd-options,因此修改/etc/ppp/pptpd-options,找到ms-dns並修改爲自己需要配置的DNS服務器地址:

2.3 配置VPN賬號

接下來創建VPN賬號,賬號保存在/etc/ppp/chap-secrets,我們打開編輯這個文件,按下面的格式加入自己的賬號以及密碼,依次爲:賬號,協議,密碼,IP地址:

這裏IP填*表示動態分配,任何使用對應賬號的IP都可以連上;如果填上IP則表示指定IP才能使用該賬號登錄,IP之間用逗號或空格隔開。

2.4 配置系統轉發

完成上述配置後VPN服務可以連上,但是不能通過VPN實現轉發,也就是不能上網或者訪問其他服務器,只能侷限在局域網內,需要開啓系統轉發和NAT。首先開啓系統轉發,編輯配置文件/etc/sysctl.conf,設置如下:

下面的設置是IPV6,如果有需要也可以開啓。重新加載sysctl.conf:

2.5 配置防火牆轉發

# sudo iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –o eth0 –j SNAT –to 192.168.1.206

這裏是進行了SNAT轉發配置,將內網IP的數據包通過eth0轉發出去。其中,192.168.0.0/24位VPN虛擬內網,也就是之前配置的remoteip,而192.168.1.206代表外網地址,可以通過ifconfig命令查詢。

如果VNP服務器是用來代理上網的,僅有上面的配置會出現訪問網站緩慢的情況,需要手動修改一下轉發包的mss:

# sudo iptables –A FORWARD –p tcp –syn –s 192.168.0.0/24 –j TCPMSS –set-mss 1356

最後可以保存一下防火牆:

# sudo iptables-save

三. 啓動pptpd服務

# sudo service pptpd restart
# sudo service pppd-dns restart

可以通過tail /var/log/syslog命令來查看啓動日誌看是否有錯誤:

正常的啓動應該和上述截圖差不多。

四. 測試pptp服務

4.1 單個客戶機測試

這裏用的win10做測試,其他系統請自行尋找對應方法。首先打開網絡設置,選擇VPN,添加新的VPN連接:

連接名稱任填,VPN類型必須選擇PPTP,服務器地址爲架設PPTP服務的服務器IP地址,而不是上述設置的localip,登錄賬戶和密碼同之前的設置。保存後登錄信息後連接VPN,是否成功可以在服務器端輸入ifconfig查看:

可以看到出現了一張ppp0的虛擬網卡,連接方式爲點對點協議,說明PPTP成功連接。然後打開cmd輸入ipconfig /all查看:

然後再看能不能正常上網,一般來說是沒有什麼問題的,如果存在不能正常上網的問題,可以ping一下各個ip看是哪裏不通或者trace一下地址看看數據是從哪條路由出去的。

4.2 多個客戶機測試

我們選擇了另外一臺電腦通過PPTP創建VPN連接到服務器,連接方法同上。服務器端用ifconfig查看:

我們在客戶機2上查看ipconfig /all:

我們讓兩臺電腦互ping,看看是否能夠連通:

正常來說客戶機2也是可以上網的。

四. 關於TCP數據包的MSS值

關於爲什麼要修改MSS參數值,首先我們需要明確兩個概念:

  • MTU: Maxitum Transmission Unit 最大傳輸單元

  • MSS: Maxitum Segment Size 最大分段大小

MSS是TCP數據包每次能夠傳輸的最大數據分段。爲了達到 最佳的傳輸效能TCP協議在建立連接的時候需要協商雙方的MSS值,這個值TCP協議在實現的時候往往用MTU代替。減去IP數據包包頭大小和TCP數據段包頭大小後的值就確定連接的最大MSS值。在PPTP連接配置了SNAT轉發後,TCP連接時除了上述需要的包頭外還需要加上由虛擬內網轉發到網卡eth0這條路徑的包頭信息。在這種情況下,如果按照之前的MSS來傳輸數據,TCP數據包大小就會大於MTU值,這時候就會造成在傳輸過程中的數據丟失或者需要對TCP多次分段重組,算上在服務器端的時間和客戶機端的時間,整體看上去網頁打開就會顯得比較慢,甚至還可能出現只能打開標題名無法顯示網頁內容的情況,但是有些網頁的訪問卻是正常的,因爲服務器有對MSS進行了限制。

這也就是爲什麼我們需要在這裏修改從192.168.0.0/24網段出來的數據包的MSS值的原因。

五. 參考內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章