> Linux服务器 > VPN >

阿里云ecs搭建pptp vpn

本文以centos6为例搭建

一、安装软件

yum install -y ppp pptpd

二、配置 pptpd

1. 编辑配置文件 vi /etc/pptpd.conf,将如下配置:

#localip 192.168.0.1
#remoteip 192.168.0.234-238

修改为:

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
# 以上设置的 IP 地址: localip 192.168.0.1 和 remoteip 192.168.0.2-200 分别是 vpn 的网关地址和 vpn 拨号获取地址段。可以根据需要进行调整

即将这两行第一个字符 # 去掉,取消注释,保存退出。

2.编辑 vi /etc/ppp/options.pptpd,将如下配置:

#ms-dns 10.0.0.1
#ms-dns 10.0.0.2

修改为:

ms-dns 223.5.5.5
ms-dns 223.6.6.6
# 223.5.5.5 和 223.6.6.6阿里云公共 DNS 服务地址,也可以按需配置为其它公共 DNS。

3. 设置使用 pptp 的用户名和密码命令:

vi /etc/ppp/chap-secrets

打开后只有两行,而且一个账号都没有,如下所示:

# Secrets for authentication using CHAP
# client server secret IP addresses

根据需要添加账号,每行一个。按照:“用户名 pptpd  密码 ip地址” 的格式输入,每一项之间用空格分开,例如:test pptpd 123456   (* 表示所有IP),保存并退出。

4. 设置 MTU 大小

1. $ vi /etc/ppp/ip-up
2. .....
3. [ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@" 
4. # 这行后面增加如下内容:
5. ifconfig ppp0 mtu 1472

修改内核设置以支持数据转发

1. 编辑配置文件 vi /etc/sysctl.conf

将 net.ipv4.ip_forward=0 改成 net.ipv4.ip_forward=1

保存并退出。然后执行以下命令使修改后的参数生效

sysctl -p

2. 添加 iptables 转发规则

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

添加好转发规则后,使用如下命令保存设置并重启防火墙

/etc/init.d/iptables save  
/etc/init.d/iptables restart

服务配置

  1. /etc/init.d/pptpd restart

2. 设置 pptp 和 iptables 自启动:

chkconfig pptpd on 
chkconfig iptables on

 至此,PPTP VPN 服务端安装结束。在本地计算机"网络和共享中心",设置新的连接或网络,即可访问 VPN。

注意:阿里云安全组的配置,放行1723和gre端口,只放行1723是无法连接的,另外我的服务器iptables默认是accept的,如果是deny,需要自己添加规则

允许GRE(Generic Route Encapsulation)协议,PPTP使用GRE协议封装PPP数据包,然后封装成IP报文
放行1723端口的PPTP服务
放行状态为RELATED,ESTABLISHED的入站数据包(正常提供服务的机器上防火墙应该都已经配置了这一项)
放行VPN虚拟网络设备所在的192.168.0.0/24网段与服务器网卡eth0之间的数据包转发
为从VPN网段192.168.0.0/24转往网卡eth0的出站数据包做NAT

iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -i eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
上述的IP段192.168.0.1/24可能需要修改成/etc/pptp.conf中你配置的localip和remoteip所在地IP段。

创建日志记录文件:(默认是没有日志记录):

pptp的配置目录位于/etc/ppp/,该目录下的ip-up和ip-down可以用来记录登录与登出信息,这两个文件不一定存在,如果不存在的话直接创建就好。

1. 建立日志目录

mkdir /var/log/pptpdlog

2. 记录登录信息

在ip-up中写入以下代码

#!/bin/sh  
  
LOG_DIR="/var/log/pptpdlog"  
curDay=`date +"%Y%m%d"`  
logFile="${LOG_DIR}/pptpd${curDay}.log"  
  
echo "##################################" >> $logFile  
echo "Now User $PEERNAME is connected!!!" >> $logFile  
echo "##################################" >> $logFile  
echo "time: `date -d today +%F_%T`" >> $logFile  
echo "clientIP: $6" >> $logFile  
echo "username: $PEERNAME" >> $logFile  
echo "device: $1" >> $logFile  
echo "vpnIP: $4" >> $logFile  
echo "assignIP: $5" >> $logFile  

具体操作配置如图

3. 记录登出信息

在ip-down里写入以下代码

#!/bin/sh  
  
LOG_DIR="/var/log/pptpdlog"  
curDay=`date +"%Y%m%d"`  
logFile="${LOG_DIR}/pptpd${curDay}.log"  
  
echo "#####################################" >> $logFile  
echo "Now User $PEERNAME is disconnected!!!" >> $logFile  
echo "#####################################" >> $logFile  
echo "time: `date -d today +%F_%T`" >> $logFile  
echo "clientIP: $6" >> $logFile  
echo "username: $PEERNAME" >> $logFile  
echo "device: $1" >> $logFile  
echo "vpnIP: $4" >> $logFile  
echo "assignIP: $5" >> $logFile  
echo "connect time: $CONNECT_TIME s" >> $logFile  
echo "bytes sent: $BYTES_SENT B" >> $logFile  
echo "bytes rcvd: $BYTES_RCVD B" >> $logFile  
sum_bytes=$(($BYTES_SENT+$BYTES_RCVD))  
sum=`echo "scale=2;$sum_bytes/1024/1024"|bc`  
echo "bytes sum: $sum MB" >> $logFile  
ave=`echo "scale=2;$sum_bytes/1024/$CONNECT_TIME"|bc`  
echo "average speed: $ave KB/s" >> $logFile

4. 添加执行权限

写好之后务必确保ip-up和ip-down具有可执行权限,尤其是这两个文件本来不存在,自己后来再创建时,这两个文件会被视为纯文本,不会被执行

chmod 755 /etc/ppp/ip-*

之后就可以到/var/log/pptpdlog/下按照日期查看登录信息了

CentOS PPTP VPN客户端配置

1. 安装软件包

  1. yum install -y ppp pptp pptp-setup

2. 连接 VPN 服务端

pptpsetup --create test --server IP--username 用户名 --password 密码 --encrypt --start
# IP、用户名、密码替换为VPN服务端实际配置的值

 

连接成功后,提示已经被分配了 192.168.0.234 的客户端地址,执行 ifconfig 可以看到一块 ppp0 的网卡:

3. 增加默认路由

  1. ip route replace default dev ppp0

增加路由后查看已经可以访问外网。

常见问题

1. PPTP VPN搭建后,测试可以连接,并且网站域名可以 ping 通,但浏览器无法打开网页。

此问题一般是由于 MTU 设置不正确导致的。

可以在配置 VPN 的 Centos 服务器中执行 ifconfig  ppp0  mtu 1472 进行调整。

注:上述方式设置是临时生效,如果需要长期生效,需要修改 /etc/ppp/ip-up文件,增加如下内容:

$ vi /etc/ppp/ip-up
......
[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@" 
# 这行后面增加
ifconfig ppp0 mtu 1472

配置后再测试已经正常:

2. 客户端成功连接上 VPN 后,获取到的地址错误:获取到的地址不是 VPN 服务端分配的地址,而是 ECS 的内网网卡地址,如图:

如果出现这种情况,假设配置的 VPN 客户端配置名称是 testvpn,可以参照如下步骤尝试处理:

1. 如下图所示,在 ppp 客户端配置文件 /etc/ppp/peers/testvpn 中手工添加 noipdefault 参数。

2. 使用如下指令重启客户端,重新连接后通常即可获取到正确的地址。

poff testvpn
pon testvpn

说明 :该参数在重启客户端的时候,可能会被服务端传递过来的参数覆盖掉,如果该参数被覆盖则需要检查下服务端的配置。

3.windows客户端无法连接时,一定要查看是不是用的pptp协议的

注:本文参考自:https://help.aliyun.com/knowledge_detail/41345.html



(责任编辑:IT)