2021年06月16日 返回>>
Centos系統(tǒng)下PPTP代理環(huán)境部署記錄
PPTP(點(diǎn)到點(diǎn)隧道協(xié)議)是一種用于讓遠(yuǎn)程用戶撥號連接到本地的ISP,通過因特網(wǎng)安全遠(yuǎn)程訪問公司資源的新型技術(shù)。它能將PPP(點(diǎn)到點(diǎn)協(xié)議)幀封裝成IP數(shù)據(jù)包,以便能夠在基于IP的互聯(lián)網(wǎng)上進(jìn)行傳輸。PPTP使用TCP(傳輸控制協(xié)議)連接的創(chuàng)建,維護(hù),與終止隧道,并使用GRE(通用路由封裝)將PPP幀封裝成隧道數(shù)據(jù)。被封裝后的PPP幀的有效載荷可以被加密或者壓縮或者同時(shí)被加密與壓縮。
常見的PPTP都是在路由器上配置的,不過linux下也可以實(shí)現(xiàn)PPTP服務(wù)器的功能。別的也不多說了,下面直接記錄下Centos下部署PPTP的VPN環(huán)境過程:
1)驗(yàn)證PPP 用cat命令檢查是否開啟ppp,一般服務(wù)器都是開啟的,除了特殊的VPS主機(jī)之外。 [root@bastion-IDC ~]# cat /dev/ppp cat: /dev/ppp: No such device or address cat出現(xiàn)上面結(jié)果,則說明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一般情況默認(rèn)都是系統(tǒng)裝好后就已經(jīng)有了,安裝iptables是為了做NAT,讓PPTP客戶端能夠通過PPTP服務(wù)器上外網(wǎng)。
3)安裝PPTP(這里選擇rpm包安裝,也可以選擇源碼包安裝) 下載地址:https://pan.baidu.com/s/1dFIGpyx 提取密碼:cefm [root@bastion-IDC ~]# rpm -ivh pptpd-1.3.4-2.el6.x86_64.rpm
4)配置pptp /etc/pptpd.conf是pptpd的基本配置文件; [root@bastion-IDC ~]# vim /etc/pptpd.conf ....... option /etc/ppp/options.pptpd //指定pptpd擴(kuò)展屬性配置文件options.pptpd 的位置 logwtmp debug //開啟調(diào)試模式,有關(guān) pptpd 的信息和錯(cuò)誤都會(huì)記錄在 /var/logs/message 中,方便排錯(cuò)和調(diào)試 stimeout 30 //設(shè)置客戶端連接 pptpd server 時(shí)的最長連接等待時(shí)間(連接超時(shí)時(shí)間),30 秒 localip 192.168.1.5 //pptp服務(wù)器端IP,可以設(shè)置為服務(wù)器上綁定的任意一個(gè)IP地址(比如這里設(shè)置內(nèi)網(wǎng)ip) remoteip 192.168.100.101-150 //客戶端成功連接VPN后獲取的IP地址范圍(可以和pptp服務(wù)器在同一內(nèi)網(wǎng)段內(nèi),但是建議不要設(shè)置和PPTP服務(wù)器內(nèi)網(wǎng)一樣的網(wǎng)段) [root@bastion-IDC ~]# vim /etc/ppp/options.pptpd ...... name pptpd //pptpd server 的名稱(這個(gè)很重要,在下面添加VPN賬戶配置里會(huì)用到) debug //開啟調(diào)試模式,相關(guān)信息同樣記錄在/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 * 解釋: 一行添加一個(gè)賬號,每個(gè)帳號需要添加的4個(gè)字段,分別為:用戶名、服務(wù)、密碼、分配的ip地址(如果IP為*,則表示隨機(jī)分配,分配范圍采用pptp.conf中的設(shè)置)
6)開啟系統(tǒng)的ip路由轉(zhuǎn)發(fā)功能 [root@bastion-IDC ~]# echo 1 > /proc/sys/net/ipv4/ip_forward //臨時(shí)開啟,重啟服務(wù)器后失效 [root@bastion-IDC ~]# vim /etc/sysctl.conf //永久開啟 ..... net.ipv4.ip_forward = 1 [root@bastion-IDC ~]# sysctl -p
7)啟動(dòng)服務(wù) [root@bastion-IDC ~]# /etc/init.d/pptpd start Starting pptpd: [ OK ] [root@bastion-IDC ~]# lsof -i:1723 //PPTP服務(wù)默認(rèn)端口是1723 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME pptpd 19714 root 6u IPv4 33130051 0t0 TCP *:pptp (LISTEN) 將服務(wù)配置為開機(jī)自動(dòng)啟動(dòng) [root@bastion-IDC ~]# chkconfig pptpd on
8)配置iptables轉(zhuǎn)發(fā) [root@bastion-IDC ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 133.110.186.55 //確??蛻魴C(jī)連上VPN后能正常上網(wǎng) [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這個(gè)段的ip地址(即pptpd.conf配置的remoteip地址段)可以通過133.110.186.55這個(gè)公網(wǎng)IP訪問外網(wǎng)。 其中133.110.186.55是pptp部署機(jī)的公網(wǎng)ip地址,否則撥上來的VPN用戶只能訪問內(nèi)網(wǎng)。 開通pptp服務(wù)端口1723訪問
9)接著就可以在客戶端新建VPN(加密方式為默認(rèn))連接來測試了。(下面是win10下的操作記錄) 查看客戶端連接成功后的ip信息,是否正常上網(wǎng)等 一定要勾選上“在遠(yuǎn)程網(wǎng)絡(luò)上使用默認(rèn)網(wǎng)關(guān)”的選項(xiàng),確保成功連接VPN后能正常上網(wǎng),并且出口ip是PPTP服務(wù)器的外網(wǎng)ip(還有關(guān)閉客戶機(jī)的防火墻)
------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------
VPN環(huán)境部署好,并待客戶機(jī)遠(yuǎn)程連接成功后,PPTP服務(wù)器上會(huì)有虛擬網(wǎng)卡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日志,發(fā)現(xiàn)如果有下面報(bào)錯(cuò): [root@bastion-IDC ~]# tail -f /var/log/messages ...... kernel: ppp: compressor dropped pkt 原因是因?yàn)?/span>pptp不兼容windows的客戶端造成的。
Windows客戶端mtu值為1400以上,Linux pptp服務(wù)器默認(rèn)mtu為1396。
解決辦法:嘗試手動(dòng)配置mtu值 [root@bastion-IDC ~]# ifconfig ppp0 mtu 1400 改完后,發(fā)現(xiàn)確實(shí)解決了上面報(bào)錯(cuò),但只是暫時(shí)性的,重啟后依然會(huì)恢復(fù)到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啟動(dòng)腳本中支持ip-up.local名字的腳本。 所以可以編寫自動(dòng)配置mtu值的腳本,啟服務(wù)時(shí)會(huì)自動(dòng)運(yùn)行該腳本即可解決該問題。 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,最后給權(quán)限 [root@bastion-IDC ~]# chmod 755 /etc/ppp/ip-up.local
發(fā)現(xiàn)一個(gè)現(xiàn)象: 按照上面的部署,在客戶端連接VPN成功后,可以正常上網(wǎng),分配到的內(nèi)網(wǎng)ip地址也正常。 但是連接后的出口ip并不是PPTP服務(wù)器的公網(wǎng)ip。 解決辦法: 是因?yàn)樵谇懊?/span>/etc/pptpd.conf文件里配置的localip填寫的是PPTP本機(jī)的內(nèi)網(wǎng)ip,這樣客戶機(jī)成功連接后能正常上網(wǎng),但出口ip不變! 只需要將這個(gè)localip改成PPTP的外網(wǎng)ip地址,那么客戶機(jī)成功連接后的出口ip就會(huì)變成PPTP服務(wù)器外網(wǎng)ip了。
Linux下在PPTP服務(wù)器上查看VPN在線用戶數(shù): [root@bastion-IDC ~]# ifconfig | grep ppp 查看哪些用戶在線:
[root@bastion-IDC ~]# last | grep still | grep ppp 有一個(gè)問題: 如果上面將/etc/pptpd.conf文件中的remoteip設(shè)置成和PPTP服務(wù)器內(nèi)網(wǎng)在同一網(wǎng)段, 比如:PPTP服務(wù)器內(nèi)網(wǎng)ip為192.168.1.5,外網(wǎng)ip為133.110.186.55,設(shè)置如下: [root@bastion-IDC ~]# vim /etc/pptpd.conf ..... localip 133.110.186.55 remoteip 192.168.100.101-150 防火墻規(guī)則如上設(shè)置: 配置iptables轉(zhuǎn)發(fā) [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 如上設(shè)置后,客戶端連接VPN后,本機(jī)ip就能變成PPTP服務(wù)器端ip,并且正常上網(wǎng)。 只是客戶機(jī)連接VPN后,不能ping通PPTP服務(wù)端同網(wǎng)段的內(nèi)網(wǎng)ip(除非localip 配置成PPTP服務(wù)器內(nèi)網(wǎng)ip)
------------------------------------------------------------------------------------------------------------------------ ----------------------------------------------------------
接著順便說下mac下連接pptp的操作記錄: 依次選擇"系統(tǒng)偏好設(shè)置"->"網(wǎng)絡(luò)"->打開左下角的"+",添加VPN網(wǎng)絡(luò),選擇vpn的種類(PPTP),然后填寫vpn的連接信息:vpn地址和用戶名。服務(wù)名稱:可以隨意添,缺省為VPN(PPTP) 選擇鑒定設(shè)置,輸入VPN帳戶密碼 注意一點(diǎn):點(diǎn)擊"高級"->"通過VPN連接發(fā)送所有通信",這個(gè)選項(xiàng)一定要打勾!這樣,vpn連接成功后,mac本地的外網(wǎng)ip才會(huì)變成vpn服務(wù)器的外網(wǎng)ip。 最后,選擇應(yīng)用,正常連接就ok!
-------------------------------------------------------------------------------- 遇到的問題----------------------------------------------------------------------------------------
mac連接PPTP的VPN是正常的,但是連接成功后不多久就不了網(wǎng)。 這種現(xiàn)象通常在連線3-5分鐘時(shí)出現(xiàn),斷開VPN連接后重新連接,就會(huì)恢復(fù)正常,3-5分鐘后再次掉線。(L2TP的vpn連接后貌似沒有這種現(xiàn)象) 解決辦法: mac是wifi鏈接的,打開網(wǎng)絡(luò)偏好設(shè)置,選中wifi,點(diǎn)擊[高級],進(jìn)入[硬件]選項(xiàng)卡,配置改為手動(dòng),MTU將默認(rèn)的1500改為1280(或1450),MTU也就是Maximum Transmission Unit。 出現(xiàn)這個(gè)問題的原因是所使用的網(wǎng)絡(luò)不標(biāo)準(zhǔn),不支持MTU協(xié)商,導(dǎo)致系統(tǒng)一開始就是用了最大的MTU,也就是默認(rèn)的1500。VPN服務(wù)器那邊不買賬,就給斷開了。 中國運(yùn)營商的很多劣質(zhì)網(wǎng)絡(luò)有幾個(gè)常見問題: 1)不支持MTU自動(dòng)協(xié)商,網(wǎng)關(guān)上的MTU又不標(biāo)準(zhǔn)。(這個(gè)是唯一一種可以自己解決的,只要手動(dòng)改MTU即可,如上) 2)出口是動(dòng)態(tài)的,一會(huì)兒切換一次,一切換,公網(wǎng)IP就變了,連接必?cái)?。(部分地區(qū)可以投訴,讓運(yùn)營商給你這個(gè)賬號固定出口的) 3)多層 NAT,然后中間某一層的網(wǎng)關(guān)在調(diào)整。一般常見于非電信聯(lián)通的小運(yùn)營商,企業(yè)網(wǎng)絡(luò),二三線城市的電信聯(lián)通網(wǎng)絡(luò)。 4)城域網(wǎng)或骨干網(wǎng)丟包。(這個(gè)無解,中國總國際出口是低于當(dāng)前網(wǎng)民所需的,所以等壟斷企業(yè)擴(kuò)容吧)
聯(lián)系人:朱
電話:18570559852
QQ:813700068
工作時(shí)間 9:00-24:00