PPTP是一个比较简单的VPN构建方式,但是很难找到比较全的说明文档。因此,记录一篇说明文档,详细记录架设VPN服务器以及总结一些其他比较容易遇到的问题。
安装PPTP
基本上安装pptp是比较简单的了,比如在我的CentOS6.4 x64上,只需要两个命令:
rpm -i http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm yum -y install pptpd
如果是Ubuntu的话,更加简单了:
apt-get install pptpd
配置IP地址
基本上程序的安装是全自动完成的了,下面需要进行一些简单的配置,编辑/etc/pptpd.conf ,在最后加入IP地址配置:
localip 10.0.0.1 remoteip 10.0.0.100-200
上面的IP地址是可以随便填的,ABC三类的内网地址都可以,主要兼顾其他地方的IP配置,不要出现IP冲突就可以了,后面的remoteip,默认从第一个10.0.0.100开始分配给客户,localip表示分配给服务器的内部网关地址。
配置客户端DNS
要配置客户端的dns,首先要确定配置文件,查看/etc/pptpd.conf中指定的option文件,如果没有指定,那就默认是/etc/ppp/pptpd-options,下面是我的默认配置文件,因此要修改/etc/ppp/pptpd-options.pptpd
在配置文件中加上:
ms-dns 202.96.128.86 ms-dns 202.96.128.166
这里配置成客户端所在地的DNS就好了。
配置VPN账号
然后是创建VPN的账号,账号保存在/etc/ppp/chap-secrets,我们打开编辑这个文件,按下面的格式加入自己的账号以及密码,依次为:账号,协议,密码,ip地址。
这里的ip地址如果明文表示静态分配,如果填*就表示动态分配。
启动服务
配置完毕,可以启动服务并且加入启动项了
service pptpd restart chkconfig pptpd on
配置系统转发
现在的VPN服务可以连上,但是不能通过VPN服务器进行转发,也就是不能够上网或者访问其他服务器等,需要开启系统转发和NAT。编辑系统配置文件/etc/sysctl.conf,设置如下值为1
net.ipv4.ip_forward = 1
如果未来ipv6普及了,估计应该就是改ipv6了,修改完毕之后要马上生效,使用命令
sysctl -p
配置防火墙转发
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 或 iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to 115.115.115.115
其中第一种比较简单,自动伪装ip,第二种的10.0.0.0/24指的是VPN虚拟内网,而115.115.115.115代表外网地址,进行NAT。如果VPN服务器是用来代理上网的,仅有上面的配置会出现访问网站缓慢的情况,需要手动修改一下转发包的mss
iptables -A FORWARD -p tcp --syn -s 10.0.0.0/24 -j TCPMSS --set-mss 1356
这样就不会出现打不开网页的问题了,最后可以保存一下防火墙。
iptables-save
常见的问题
619错误
体现在日志就是
LCP: timeout sending Config-Requests
很多人在拨VPN的时候卡在验证用户名和密码,然后会出现619的错误,这种错误90%以上是由于客户端到服务器的网络中有设备不支持GRE协议或NAT-T造成的,最常见的是由于客户端的路由器等不支持造成的,在更换以后立马能拨上VPN。而这种错误在服务端的日志也有体现。例如
下面是双方加解密不一致的:
LCP terminated by peer (^O^XH-^@<M-Mt^@^@^@^@)
还有其他问题可去这里排查:
http://pptpclient.sourceforge.net/howto-diagnosis.phtml
pptp需要用到的端口
pptp使用到的端口只有一个,那就是1723,网上有很多误人子弟的文章还说要开47端口,真是坑爹,因为GRE协议号是47,并不代表需要开47端口,因此如果是要映射端口的话,1723就完全够了,不要信网上的某些教程,如果使用了iptable来作为防火墙,需要加入规则
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT iptables -A INPUT -p 47 -j ACCEPT
如果是在内网中,需要网关转发,那么网关需要如下配置:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1723 -j DNAT --to SERVER_IP iptables -t nat -A PREROUTING -i eth0 -p 47 -j DNAT --to SERVER_IP
如需详细文档,可参考:
http://poptop.sourceforge.net/dox/
你可能喜欢
看官方手册最稳妥
PPTP的服务端日志放在哪里啊?
公司的网络上班时间进行行为管理,只留http
好容易hack了一个无线网,信号太弱,win搜不到信号,
只能用kali系统蹭到,结果总是连不到家里的vpn,
不知道蹭到的这个是不是也没有NAT-T协议。
在/var/log/messages
非常好,按网上其他教程设置了不是上不了网就是非常慢,原来少了:iptables -A FORWARD -p tcp –syn -s 10.0.0.0/24 -j TCPMSS –set-mss 1356
,非常感谢。
有帮助就好
大大,刚想问你问题,结果发现时自己打错了,确实是漏了这个导致网页上不了,只可以上QQ
iptables -A FORWARD -p tcp –syn -s 10.0.0.0/24 -j TCPMSS –set-mss 1356
果断把之前所有收藏的网页删掉,都不正确,还是大大厉害,赞一个哈
过奖过奖
请问我配制好后老是掉线是什么问题呢。
一二个人用的时候掉线还好。超过三个人后一分钟之内就掉线了。
检查是否网关路由设备支持有问题。
请问我配好以后老是告诉我端口已经关闭,我看了一下服务器上的1723端口pptpd已经在监听了,EC2的防火墙设置也已经设置了,但就是死活告诉我端口关闭….求救…
gfw?
排查过了,不是gfw,就是学校的出口防火墙挡了….
那估计没法
你试下以下两种方法之一:
1. 路由器的dmz设置,把你本机ip公开到公网;
2. 如果有设置pptp穿透的话,设置开启穿透;
祝你好运!
nat转发设置了,sysctl设置了但是就是上不去网,可以连接,但是转发不到外网
建议清空防火墙再配置规则。
不知道博主有没有试过docker的pptp,我这边用了遇到问题 就是连接不上
docker的应该没这么麻烦,一条命令全搞定。
在centos6上配置了pptp vpn正常使用,然后装了Apache 和php做站点,站点能够访问,vpn连不上了,请问是哪里需要更改吗?
应该是无冲突的
现在pptp vpn和php nginx能同时运行了,但是客户端连接vpn的时候填服务器ip可以连上,填域名连不上,域名已经能够解析到ip了,怎么样能够填域名就能连接vpn呢?
这个应该是一样的没影响,估计是你dns解析配置问题。
快被 LCP: timeout sending Config-Requests 折磨死了,用公司的、家里的、联通4G的都得到同一个日志:
LCP: timeout sending Config-Requests
Feb 18 19:51:18 host-X-X-X-X pppd[2585]: Connection terminated.
Feb 18 19:51:18 host-X-X-X-X pppd[2585]: Modem hangup
Feb 18 19:51:18 host-X-X-X-X pppd[2585]: Exit.
Feb 18 19:51:18 host-X-X-X-X pptpd[2584]: GRE: read(fd=6,buffer=611860,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Feb 18 19:51:18 host–X-X-X-X pptpd[2584]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)
X-X-X-X是VPS地址
很难理解联通4G也会“不支持GRE协议或NAT-T”…
搜了一晚上,解除加密、long,都搞不定。
敢问VPN设置里还有什么地方可以调整的?
检查vps的控制台vpn相关支持协议是否打开
加上iptables -A INPUT -p 47 -j ACCEPT
谢谢答复。我是外行,如何检查,可否明示?
在Conoha搭建VPN之前,已经按下面这个帖子的要求检查了搭建环境,没有问题:http://www.dabu.info/centos6-4-structures-pptp-vpn.html
此外,这个VPS,我已搭建了SS,使用起来也没问题。
p.s.如不嫌弃,我可以就此事另行支付咨询费或酬金,请告知收款账号(通过邮件也行)。
你防火墙是否添加了我说的那条规则?
刚从Conoha客服那里得知,他们不支持PPTP 😥
你可以使用其他vpn协议
用博主的方法vpn搭建一次成功,给博主点赞。我的博客里也想引用博主的内容,可以不! 😈
卧槽,身上金光一闪,可以用啊,注明出处就好
大大,请问下那些配置文件只用加那么多吗?
我看网上一些教程似乎有不少东西,但好像默认就在文件里,我打开只有:
00:00 ############################################################################### # $Id: pptpd.conf,v 1.11 2011/05/19 00:02:50 quozl Exp $
#
# Sample Poptop configuration file /etc/pptpd.conf
#
# Changes are effective when pptpd is restarted. ############################################################################### # TAG: ppp # Path to the pppd program, default ‘/usr/sbin/pppd’ on Linux # #ppp /usr/sbin/pppd # TAG: option # Specifies the location of the PPP options file.
# By default PPP looks in ‘/etc/ppp/options’
# option /etc/ppp/options.pptpd
# TAG: debug
# Turns on (more) debugging to syslog
#
#debug
这些,是不是真的只用加上配置的本地和客户端服务器?
还有,请问下文件中#代表什么?
前面带#的都是注释
博主救命!!
/var/log/message:
Apr 14 16:50:48 localhost pptp[23420]: anon log[main:pptp.c:333]: The synchronous pptp option is NOT activated
Apr 14 16:50:48 localhost pptp[23427]: anon log[ctrlp_rep:pptp_ctrl.c:254]: Sent control packet type is 1 ‘Start-Control-Connection-Request’
Apr 14 16:50:48 localhost pptp[23427]: anon log[ctrlp_disp:pptp_ctrl.c:754]: Received Start Control Connection Reply
Apr 14 16:50:48 localhost pptp[23427]: anon log[ctrlp_disp:pptp_ctrl.c:788]: Client connection established.
Apr 14 16:50:49 localhost pptp[23427]: anon log[ctrlp_rep:pptp_ctrl.c:254]: Sent control packet type is 7 ‘Outgoing-Call-Request’
Apr 14 16:50:49 localhost pptp[23427]: anon log[ctrlp_disp:pptp_ctrl.c:873]: Received Outgoing Call Reply.
Apr 14 16:50:49 localhost pptp[23427]: anon log[ctrlp_disp:pptp_ctrl.c:912]: Outgoing call established (call ID 0, peer’s call ID 25088).
Apr 14 16:51:19 localhost pppd[23419]: LCP: timeout sending Config-Requests
Apr 14 16:51:19 localhost pppd[23419]: Connection terminated.
卡在这里了,不知道怎么解决 😥 😥
系统是centos7,小白一个 要哭了。
往是路由器分出来的:
[[email protected] ~]$ ifconfig
br0: flags=4099 mtu 1500
inet 10.0.0.30 netmask 255.255.255.0 broadcast 10.0.0.255
ether 6e:41:9b:46:c6:2c txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp3s0: flags=4163 mtu 1500
inet 192.168.1.104 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::325a:3aff:fe01:390c prefixlen 64 scopeid 0x20
ether 30:5a:3a:01:39:0c txqueuelen 1000 (Ethernet)
RX packets 989194 bytes 1109907518 (1.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 674890 bytes 80689225 (76.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Local Loopback)
RX packets 1593 bytes 251926 (246.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1593 bytes 251926 (246.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099 mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:ff:c5:dd txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vpn 是云梯的vpn,前一阵因为打开网页慢,配置了dnsmasq,从那以后vpn就连不上了
你恢复设置看看
GRE: read(fd=6,buffer=611860,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
这个是VPN可以连接但是用户会不定时掉线 不知道是什么问题,大神求解答
可能是被墙或运营商干扰了
太厉害了,连接之后老是上不了外网,现在可以了,感谢最后一条命令,牛逼
🙄

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