使用PPTP配置Linux上的VPN服务器

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
options.pptpd
在配置文件中加上:

ms-dns 202.96.128.86
ms-dns 202.96.128.166

这里配置成客户端所在地的DNS就好了。

配置VPN账号
然后是创建VPN的账号,账号保存在/etc/ppp/chap-secrets,我们打开编辑这个文件,按下面的格式加入自己的账号以及密码,依次为:账号,协议,密码,ip地址。

chap-secret

这里的ip地址如果明文表示静态分配,如果填*就表示动态分配。

启动服务
配置完毕,可以启动服务并且加入启动项了

service pptpd restart
chkconfig pptpd on

查看一下服务器是否在1723上面监听了pptp status

 配置系统转发
现在的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配置Linux上的VPN服务器
本文链接:https://www.nigesb.com/setup-your-own-vpn-with-pptp.html
订阅本站:http://www.nigesb.com/feed
转载请注明来源,如果喜欢本站可以Feed订阅本站。

发表评论?

38 条评论。

  1. 看官方手册最稳妥

  2. PPTP的服务端日志放在哪里啊?
    公司的网络上班时间进行行为管理,只留http
    好容易hack了一个无线网,信号太弱,win搜不到信号,
    只能用kali系统蹭到,结果总是连不到家里的vpn,
    不知道蹭到的这个是不是也没有NAT-T协议。

  3. 非常好,按网上其他教程设置了不是上不了网就是非常慢,原来少了:iptables -A FORWARD -p tcp –syn -s 10.0.0.0/24 -j TCPMSS –set-mss 1356
    ,非常感谢。

  4. 大大,刚想问你问题,结果发现时自己打错了,确实是漏了这个导致网页上不了,只可以上QQ
    iptables -A FORWARD -p tcp –syn -s 10.0.0.0/24 -j TCPMSS –set-mss 1356
    果断把之前所有收藏的网页删掉,都不正确,还是大大厉害,赞一个哈

  5. 请问我配制好后老是掉线是什么问题呢。
    一二个人用的时候掉线还好。超过三个人后一分钟之内就掉线了。

  6. 请问我配好以后老是告诉我端口已经关闭,我看了一下服务器上的1723端口pptpd已经在监听了,EC2的防火墙设置也已经设置了,但就是死活告诉我端口关闭….求救…

  7. nat转发设置了,sysctl设置了但是就是上不去网,可以连接,但是转发不到外网

  8. 不知道博主有没有试过docker的pptp,我这边用了遇到问题 就是连接不上

  9. 在centos6上配置了pptp vpn正常使用,然后装了Apache 和php做站点,站点能够访问,vpn连不上了,请问是哪里需要更改吗?

  10. 快被 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.如不嫌弃,我可以就此事另行支付咨询费或酬金,请告知收款账号(通过邮件也行)。

  11. 刚从Conoha客服那里得知,他们不支持PPTP 😥

  12. 用博主的方法vpn搭建一次成功,给博主点赞。我的博客里也想引用博主的内容,可以不! 😈

  13. 大大,请问下那些配置文件只用加那么多吗?
    我看网上一些教程似乎有不少东西,但好像默认就在文件里,我打开只有:
    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

    这些,是不是真的只用加上配置的本地和客户端服务器?

  14. 博主救命!!
    /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,小白一个 要哭了。

    往是路由器分出来的:
    [wonbin@localhost ~]$ 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就连不上了

  15. 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可以连接但是用户会不定时掉线 不知道是什么问题,大神求解答

  16. 太厉害了,连接之后老是上不了外网,现在可以了,感谢最后一条命令,牛逼
    iptables -A FORWARD -p tcp –syn -s 10.0.0.0/24 -j TCPMSS –set-mss 1356 :mrgreen: 🙄 :mrgreen: :mrgreen: :mrgreen: :mrgreen:

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>