Centos下PPTP环境部署记录

转自:http://www.cnblogs.com/kevingrace/p/6329722.html?utm_source=itdadao&utm_medium=referral


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/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)安装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扩展属性配置文件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的信息:

4
5
6
7
8
9
# 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。

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
永久解决措施:
[root@bastion-IDC ~]# cat /etc/ppp/ip-up

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 . local ] && local "$@"
exit 0

从上面配置文件中得知pptp启动脚本中支持ip-up.local名字的脚本。
所以可以编写自动配置mtu值的脚本,启服务时会自动运行该脚本即可解决该问题。

6
# 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)城域网或骨干网丢包。(这个无解,中国总国际出口是低于当前网民所需的,所以等垄断企业扩容吧)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux下开机自启: 在/etc/init.d目录下新建文件elasticsearch 并敲入shell脚本: 注意, 前两行必须填写,且要注释掉。 第一行为shell前行代码,目的告诉系统使用shell。 第二行分别代表运行级别、启动优先权、关闭优先权,且后面添加开机服务会用到。 shell脚本
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 2、赋予脚本可执行权限假设/usr/local/script/autostart.sh是你的脚本路径,给予执行权限 chmod +x /usr
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。 查询当前目录总大小可以使用d
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一但shell关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题 安装Supervisor&#160;1 yum install python-setuptools
设置时区(CentOS 7) 先执行命令timedatectl status|grep &#39;Time zone&#39;查看当前时区,如果不是时区(Asia/Shanghai),则需要先设置为中国时区,否则时区不同会存在时差。 #已经是Asia/Shanghai,则无需设置 [root@xia
vim&#160;/etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=&quot;static&quot; ONBOOT=yes IPADDR=192.168.8.106 NETMASK=255.255.252.0 GATEWAY=192.168.
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc 二、下载并解压安装包 [root@localhost local
第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm On CentOS/RHEL 7: $
/// &lt;summary&gt; /// 取小写文件名后缀 /// &lt;/summary&gt; /// &lt;param name=&quot;name&quot;&gt;文件名&lt;/param&gt; /// &lt;returns&gt;返回小写后缀,不带“.”&lt;/ret
which nohup .bash_profile中并source加载 如果没有就安装吧 yum provides */nohup nohup npm run start &amp; nohup ./kibana &amp;
1.1 MySQL安装 1.1.1 下载wget命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 1.1.3 安装My
重启 reboot shutdown -r now init 6 关闭 init 0 shutdown -h now shutdown -h 20:25 #8点25关机查看内存 free CPU利用率 top 日期 date 设置时间 date 033017002015 #月日时间年 日历 cal
1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 :
1 下载并安装MySQL官方的&#160;Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面的命令就直接下载了安装用的Yum Repository,大概
CentOS6.x CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。 一、相关命令 通过initctl help可以查看相关命令 [root@localhost ~]# initctl help Job commands: start Start job. sto
1、使用命令:df -lk 找到已满磁盘 2、使用命令:du --max-depth=1 -h 查找大文件,删除
ifconfig:查看网卡信息 网卡配置文件位置: /etc/sysconfig/network-scripts/文件夹 nmtui:配置网卡 netstat -tlunp:查看端口信息 端口信息存储位置: /etc/services文件 route:查看路由信息 wget:下载网路文件,例如 wg
ps -ef:查看所有进程,&#160;ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 kill 640,强制杀:kill -9 640 man:查看帮助,例如 man ps 查看
useradd:添加用户 useradd abc,默认添加一个abc组 vipw:查看系统中用户 groupadd:添加组groupadd ccna vigr:查看系统中的组 gpasswd:将用户abc添加到ccna组 gpasswd -a abc ccna groups abc:查看用户abc属