谷歌搜索

1)驗證PPP******
用cat命令檢查是否開啓ppp,一般服務器都是開啓的,除了特殊的VPS主機之外。
[root@bastion-IDC ~]# cat /dev/ppp
cat: /dev/ppp: No such device or address

cat出現上面結果,則說明ppp是開啓的,可以正常的配置pptp了。

2)安裝PPP***********
[root@bastion-IDC ~]# yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
[root@bastion-IDC ~]# yum -y install ppp iptables
iptables一般情況默認都是系統裝好後就已經有了,安裝iptables是爲了做NAT,讓PPTP客戶端能夠通過PPTP服務器上外網。

3)

1----

安裝PPTP(這裏選擇rpm包安裝,也可以選擇源碼包安裝)
下載地址:https://pan.baidu.com/s/1dFIGpyx
提取密碼:cefm
[root@bastion-IDC ~]# rpm -ivh pptpd-1.3.4-2.el6.x86_64.rpm

2-----(我用的方式)***********

wget http://files.cnblogs.com/files/wangbin/CentOS7-pptp-host1plus.sh
chmod +x ./CentOS7-pptp-host1plus.sh
./CentOS7-pptp-host1plus.sh

vpn 客戶端登陸賬號密碼成功之後返回---

到此已經完成可配置客戶端 

 

若不用2需繼續走下面的

4)配置pptp
/etc/pptpd.conf是pptpd的基本配置文件;
[root@bastion-IDC ~]# vim /etc/pptpd.conf 
.......
option /etc/ppp/options.pptpd    //指定pptpd擴展屬性配置文件options.pptpd 的位置 
logwtmp
debug               //開啓調試模式,有關 pptpd 的信息和錯誤都會記錄在 /var/logs/message 中,方便排錯和調試
stimeout 30      //設置客戶端連接 pptpd server 時的最長連接等待時間(連接超時時間),30 秒
localip 192.168.1.5       //pptp服務器端IP,可以設置爲服務器上綁定的任意一個IP地址(比如這裏設置內網ip)
remoteip 192.168.100.101-150       //客戶端成功連接VPN後獲取的IP地址範圍(可以和pptp服務器在同一內網段內,但是建議不要設置和PPTP服務器內網一樣的網段)

[root@bastion-IDC ~]# vim /etc/ppp/options.pptpd 
......
name pptpd      //pptpd server 的名稱(這個很重要,在下面添加VPN賬戶配置裏會用到)
debug        //開啓調試模式,相關信息同樣記錄在/var/logs/message中
ms-dns 8.8.8.8      //修改成爲VPN用戶分配的dns地址
ms-dns 8.8.4.4

5)添加vpn的帳號和密碼

1

2

3

4

[root@bastion-IDC ~]# vim /etc/ppp/chap-secrets

# Secrets for authentication using CHAP

# client    server  secret          IP addresses

xqsj pptpd xqsj@123 *

解釋:
一行添加一個賬號,每個帳號需要添加的4個字段,分別爲:用戶名、服務、密碼、分配的ip地址(如果IP爲*,則表示隨機分配,分配範圍採用pptp.conf中的設置)

6)開啓系統的ip路由轉發功能
[root@bastion-IDC ~]# echo 1 > /proc/sys/net/ipv4/ip_forward         //臨時開啓,重啓服務器後失效
[root@bastion-IDC ~]# vim /etc/sysctl.conf             //永久開啓
.....
net.ipv4.ip_forward = 1
[root@bastion-IDC ~]# sysctl -p

7)啓動服務
[root@bastion-IDC ~]# /etc/init.d/pptpd start
Starting pptpd: [ OK ]
[root@bastion-IDC ~]# lsof -i:1723          //PPTP服務默認端口是1723
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pptpd 19714 root 6u IPv4 33130051 0t0 TCP *:pptp (LISTEN)

將服務配置爲開機自動啓動
[root@bastion-IDC ~]# chkconfig pptpd on

8)配置iptables轉發
*************[root@bastion-IDC ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 133.110.186.55   //確保客戶機連上VPN後能正常上網
************[root@bastion-IDC ~]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT
[root@bastion-IDC ~]# /etc/init.d/iptables save 
[root@bastion-IDC ~]# /etc/init.d/iptables restart
上面命令表示:
讓192.168.100.0這個段的ip地址(即pptpd.conf配置的remoteip地址段)可以通過133.110.186.55這個公網IP訪問外網。
其中133.110.186.55是pptp部署機的公網ip地址,否則撥上來的VPN用戶只能訪問內網。
開通pptp服務端口1723訪問

9)接着就可以在客戶端新建VPN(加密方式爲默認)連接來測試了。(下面是win10下的操作記錄)

 

 

 

至此我的電腦已經可以使用谷歌搜索了——————————*********************************

查看客戶端連接成功後的ip信息,是否正常上網等

一定要勾選上“在遠程網絡上使用默認網關”的選項,確保成功連接VPN後能正常上網,並且出口ip是PPTP服務器的外網ip(還有關閉客戶機的防火牆)

-------------------------------------------------------------------------------------------------------
VPN環境部署好,並待客戶機遠程連接成功後,PPTP服務器上會有虛擬網卡PPP0的信息:

1

2

3

4

5

6

7

8

9

[root@bastion-IDC ~]# ifconfig

........

ppp0      Link encap:Point-to-Point Protocol 

          inet addr:192.168.1.5  P-t-P:192.168.100.101  Mask:255.255.255.255

          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1396  Metric:1

          RX packets:213 errors:0 dropped:0 overruns:0 frame:0

          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:3

          RX bytes:25943 (25.3 KiB)  TX bytes:902 (902.0 b)

查看/var/log/messages日誌,發現如果有下面報錯:
[root@bastion-IDC ~]# tail -f /var/log/messages
......
kernel: ppp: compressor dropped pkt

原因是因爲pptp不兼容windows的客戶端造成的。Windows客戶端mtu值爲1400以上,Linux pptp服務器默認mtu爲1396。

解決辦法:嘗試手動配置mtu值
[root@bastion-IDC ~]# ifconfig ppp0 mtu 1400
改完後,發現確實解決了上面報錯,但只是暫時性的,重啓後依然會恢復到1396。

1

2

3

4

5

6

7

8

9

[root@bastion-IDC ~]# ifconfig

........

ppp0      Link encap:Point-to-Point Protocol 

          inet addr:192.168.1.5  P-t-P:192.168.1.101  Mask:255.255.255.255

          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1400  Metric:1

          RX packets:213 errors:0 dropped:0 overruns:0 frame:0

          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:3

          RX bytes:25943 (25.3 KiB)  TX bytes:902 (902.0 b)

永久解決措施:
[root@bastion-IDC ~]# cat /etc/ppp/ip-up

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/bin/bash

# This file should not be modified -- make local changes to

# /etc/ppp/ip-up.local instead

 

PATH=/sbin:/usr/sbin:/bin:/usr/bin

export PATH

 

LOGDEVICE=$6

REALDEVICE=$1

 

[ -f /etc/sysconfig/network-scripts/ifcfg-${LOGDEVICE} ] && /etc/sysconfig/network-scripts/ifup-post --realdevice ${REALDEVICE} ifcfg-${LOGDEVICE}

 

/etc/ppp/ip-up.ipv6to4 ${LOGDEVICE}

 

[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@"

 

exit 0

從上面配置文件中得知pptp啓動腳本中支持ip-up.local名字的腳本。
所以可以編寫自動配置mtu值的腳本,啓服務時會自動運行該腳本即可解決該問題。

1

2

3

4

5

6

[root@bastion-IDC ~]# cat /etc/ppp/ip-up.local

#!/bin/sh

CURRENT_MTU="`ifconfig $1 | grep -Po '(?<=MTU:)([0-9]+)'`"

FIXED_MTU="`expr $CURRENT_MTU + 4`"

ifconfig $1 mtu $FIXED_MTU

echo "Increased MTU for $1 to $FIXED_MTU (from $CURRENT_MTU) to fix MPPE Microsoft Point-to-Point bug #330973"

將腳本放置在/etc/ppp/目錄中,命名爲ip-up.local,最後給權限
[root@bastion-IDC ~]# chmod 755 /etc/ppp/ip-up.local

---------------------------------------------------------------------------------------------------------------------
發現一個現象:
按照上面的部署,在客戶端連接VPN成功後,可以正常上網,分配到的內網ip地址也正常。
但是連接後的出口ip並不是PPTP服務器的公網ip。

解決辦法:
是因爲在前面/etc/pptpd.conf文件裏配置的localip填寫的是PPTP本機的內網ip,這樣客戶機成功連接後能正常上網,但出口ip不變!
只需要將這個localip改成PPTP的外網ip地址,那麼客戶機成功連接後的出口ip就會變成PPTP服務器外網ip了。

--------------------------------------------------------------------------------------------------------------------
Linux下在PPTP服務器上查看VPN在線用戶數:
[root@bastion-IDC ~]# ifconfig | grep ppp

查看哪些用戶在線:
[root@bastion-IDC ~]# last | grep still | grep ppp

--------------------------------------------------------------------------------------------------------------------
有一個問題:
如果上面將/etc/pptpd.conf文件中的remoteip設置成和PPTP服務器內網在同一網段,
比如:PPTP服務器內網ip爲192.168.1.5,外網ip爲133.110.186.55,設置如下:
[root@bastion-IDC ~]# vim /etc/pptpd.conf 
.....
localip 133.110.186.55 
remoteip 192.168.100.101-150

防火牆規則如上設置:
配置iptables轉發
[root@bastion-IDC ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 133.110.186.55
[root@bastion-IDC ~]# iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT
[root@bastion-IDC ~]# /etc/init.d/iptables save 
[root@bastion-IDC ~]# /etc/init.d/iptables restart

如上設置後,客戶端連接VPN後,本機ip就能變成PPTP服務器端ip,並且正常上網。
只是客戶機連接VPN後,不能ping通PPTP服務端同網段的內網ip(除非localip 配置成PPTP服務器內網ip)

------------------------------------------------------------------------------------------------------------------------
接着順便說下mac下連接pptp的操作記錄:
依次選擇"系統偏好設置"->"網絡"->打開左下角的"+",添加VPN網絡,選擇vpn的種類(PPTP),然後填寫vpn的連接信息:vpn地址和用戶名。服務名稱:可以隨意添,缺省爲VPN(PPTP)

選擇鑑定設置,輸入VPN帳戶密碼

注意一點:點擊"高級"->"通過VPN連接發送所有通信",這個選項一定要打勾!這樣,vpn連接成功後,mac本地的外網ip纔會變成vpn服務器的外網ip。

最後,選擇應用,正常連接就ok!

----------------------------------遇到的問題--------------------------------
mac連接PPTP的VPN是正常的,但是連接成功後不多久就不了網。
這種現象通常在連線3-5分鐘時出現,斷開VPN連接後重新連接,就會恢復正常,3-5分鐘後再次掉線。(L2TP的vpn連接後貌似沒有這種現象)

解決辦法:
mac是wifi鏈接的,打開網絡偏好設置,選中wifi,點擊[高級],進入[硬件]選項卡,配置改爲手動,MTU將默認的1500改爲1280(或1450),MTU也就是Maximum Transmission Unit。
出現這個問題的原因是所使用的網絡不標準,不支持MTU協商,導致系統一開始就是用了最大的MTU,也就是默認的1500。VPN服務器那邊不買賬,就給斷開了。

中國運營商的很多劣質網絡有幾個常見問題:
1)不支持MTU自動協商,網關上的MTU又不標準。(這個是唯一一種可以自己解決的,只要手動改MTU即可,如上)
2)出口是動態的,一會兒切換一次,一切換,公網IP就變了,連接必斷。(部分地區可以投訴,讓運營商給你這個賬號固定出口的)
3)多層 NAT,然後中間某一層的網關在調整。一般常見於非電信聯通的小運營商,企業網絡,二三線城市的電信聯通網絡。
4)城域網或骨幹網丟包。(這個無解,中國總國際出口是低於當前網民所需的,所以等壟斷企業擴容吧)

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