centos系统搭建pptp代理简易教程
Centos系统下PPTP代理环境部署记录PPTP(点到点隧道协议)是一种用于让远程用户拨号连接到本地的ISP,通过因特网安全远程访问公司资源的新型技术。它能将PPP(点到点协议)帧封装成IP数据包,以便能够在基于IP的互联网上进行传输。PPTP使用TCP(传输控制协议)连接的创建,维护,与终止隧道,并使用GRE(通用路由封装)将PPP帧封装成隧道数据。被封装后的PPP帧的有效载荷可以被加密或者压缩或者同时被加密与压缩。常见的PPTP都是在路由器上配置的,不过linux下也可以实现PPTP服务器的功能。别的也不多说了,下面直接记录下Centos下部署PPTP的VPN环境过程: 1)验证PPP 用cat命令检查是否开启ppp,一般服务器都是开启的,除了特殊的VPS主机之外。 [root@bastion-IDC~]#cat/dev/pppcat:/dev/ppp:Nosuchdeviceoraddresscat出现上面结果,则说明ppp是开启的,可以正常的配置pptp了。 2)安装PPP[root@bastion-IDC~]#yum-yinstallgccgcc-c++autoconflibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develzlibzlib-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-devele2fsprogse2fsprogs-develkrb5krb5-devellibidnlibidn-developensslopenssl-developenldapopenldap-develnss_ldapopenldap-clientsopenldap-servers[root@bastion-IDC~]#yum-yinstallpppiptablesiptables一般情况默认都是系统装好后就已经有了,安装iptables是为了做NAT,让PPTP客户端能够通过PPTP服务器上外网。3)安装PPTP(这里选择rpm包安装,也可以选择源码包安装)下载地址:https://pan.baidu.com/s/1dFIGpyx 提取密码:cefm[root@bastion-IDC~]#rpm-ivhpptpd-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扩展属性配置文件options.pptpd 的位置 logwtmpdebug//开启调试模式,有关 pptpd 的信息和错误都会记录在 /var/logs/message 中,方便排错和调试 stimeout30//设置客户端连接 pptpdserver 时的最长连接等待时间(连接超时时间),30 秒 localip192.168.1.5//pptp服务器端IP,可以设置为服务器上绑定的任意一个IP地址(比如这里设置内网ip) remoteip192.168.100.101-150//客户端成功连接VPN后获取的IP地址范围(可以和pptp服务器在同一内网段内,但是建议不要设置和PPTP服务器内网一样的网段) [root@bastion-IDC~]#vim/etc/ppp/options.pptpd......namepptpd//pptpdserver 的名称(这个很重要,在下面添加VPN账户配置里会用到) debug//开启调试模式,相关信息同样记录在/var/logs/message中 ms-dns8.8.8.8//修改成为VPN用户分配的dns地址 ms-dns8.8.4.4 5)添加vpn的帐号和密码 1234[root@bastion-IDC~]#vim/etc/ppp/chap-secrets#SecretsforauthenticationusingCHAP#clientserversecretIPaddressesxqsjpptpdxqsj@123* 解释:一行添加一个账号,每个帐号需要添加的4个字段,分别为:用户名、服务、密码、分配的ip地址(如果IP为*,则表示随机分配,分配范围采用pptp.conf中的设置) 6)开启系统的ip路由转发功能 [root@bastion-IDC~]#echo1>/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/pptpdstartStartingpptpd:[OK][root@bastion-IDC~]#lsof-i:1723//PPTP服务默认端口是1723COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEpptpd19714root6uIPv4331300510t0TCP*:pptp(LISTEN) 将服务配置为开机自动启动 [root@bastion-IDC~]#chkconfigpptpdon 8)配置iptables转发 [root@bastion-IDC~]#iptables-tnat-APOSTROUTING-s192.168.100.0/24-jSNAT--to-source133.110.186.55//确保客户机连上VPN后能正常上网 [root@bastion-IDC~]#iptables-tfilter-AINPUT-ptcp-mstate--stateNEW-mtcp--dport1723-jACCEPT[root@bastion-IDC~]#/etc/init.d/iptablessave[root@bastion-IDC~]#/etc/init.d/iptablesrestart 上面命令表示:让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的信息: 123456789[root@bastion-IDC~]#ifconfig........ppp0Linkencap:Point-to-PointProtocolinetaddr:192.168.1.5P-t-P:192.168.100.101Mask:255.255.255.255UPPOINTOPOINTRUNNINGNOARPMULTICASTMTU:1396Metric:1RXpackets:213errors:0dropped:0overruns:0frame:0TXpackets:20errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:3RXbytes:25943(25.3KiB)TXbytes:902(902.0b) 查看/var/log/messages日志,发现如果有下面报错: [root@bastion-IDC~]#tail-f/var/log/messages......kernel:ppp:compressordroppedpkt 原因是因为pptp不兼容windows的客户端造成的。Windows客户端mtu值为1400以上,Linuxpptp服务器默认mtu为1396。 解决办法:尝试手动配置mtu值 [root@bastion-IDC~]#ifconfigppp0mtu1400 改完后,发现确实解决了上面报错,但只是暂时性的,重启后依然会恢复到1396。 123456789[root@bastion-IDC~]#ifconfig........ppp0Linkencap:Point-to-PointProtocolinetaddr:192.168.1.5P-t-P:192.168.1.101Mask:255.255.255.255UPPOINTOPOINTRUNNINGNOARPMULTICASTMTU:1400Metric:1RXpackets:213errors:0dropped:0overruns:0frame:0TXpackets:20errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:3RXbytes:25943(25.3KiB)TXbytes:902(902.0b) ------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------永久解决措施: [root@bastion-IDC~]#cat/etc/ppp/ip-up1234567891011121314151617#!/bin/bash#Thisfileshouldnotbemodified--makelocalchangesto#/etc/ppp/ip-up.localinsteadPATH=/sbin:/usr/sbin:/bin:/usr/binexportPATHLOGDEVICE=$6REALDEVICE=$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"$@"exit0 从上面配置文件中得知pptp启动脚本中支持ip-up.local名字的脚本。所以可以编写自动配置mtu值的脚本,启服务时会自动运行该脚本即可解决该问题。 123456[root@bastion-IDC~]#cat/etc/ppp/ip-up.local#!/bin/shCURRENT_MTU="`ifconfig$1|grep-Po'(?<=MTU:)([0-9]+)'`"FIXED_MTU="`expr$CURRENT_MTU+4`"ifconfig$1mtu$FIXED_MTUecho"IncreasedMTUfor$1to$FIXED_MTU(from$CURRENT_MTU)tofixMPPEMicrosoftPoint-to-Pointbug#330973" 将脚本放置在/etc/ppp/目录中,命名为ip-up.local,最后给权限 [root@bastion-IDC~]#chmod755/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|grepppp 查看哪些用户在线:[root@bastion-IDC~]#last|grepstill|grepppp 有一个问题:如果上面将/etc/pptpd.conf文件中的remoteip设置成和PPTP服务器内网在同一网段,比如:PPTP服务器内网ip为192.168.1.5,外网ip为133.110.186.55,设置如下: [root@bastion-IDC~]#vim/etc/pptpd.conf.....localip133.110.186.55remoteip192.168.100.101-150 防火墙规则如上设置:配置iptables转发 [root@bastion-IDC~]#iptables-tnat-APOSTROUTING-s192.168.100.0/24-jSNAT--to-source133.110.186.55[root@bastion-IDC~]#iptables-tfilter-AINPUT-ptcp-mstate--stateNEW-mtcp--dport1723-jACCEPT[root@bastion-IDC~]#/etc/init.d/iptablessave[root@bastion-IDC~]#/etc/init.d/iptablesrestart 如上设置后,客户端连接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也就是MaximumTransmissionUnit。出现这个问题的原因是所使用的网络不标准,不支持MTU协商,导致系统一开始就是用了最大的MTU,也就是默认的1500。VPN服务器那边不买账,就给断开了。中国运营商的很多劣质网络有几个常见问题: 1)不支持MTU自动协商,网关上的MTU又不标准。(这个是唯一一种可以自己解决的,只要手动改MTU即可,如上) 2)出口是动态的,一会儿切换一次,一切换,公网IP就变了,连接必断。(部分地区可以投诉,让运营商给你这个账号固定出口的) 3)多层 NAT,然后中间某一层的网关在调整。一般常见于非电信联通的小运营商,企业网络,二三线城市的电信联通网络。 4)城域网或骨干网丢包。(这个无解,中国总国际出口是低于当前网民所需的,所以等垄断企业扩容吧)
相关标签