如何使用CentOS 7实例配置PPTP VPN服务端到客户端的连接

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何使用CentOS 7实例配置PPTP VPN服务端到客户端的连接。

背景信息

点对点隧道协议(PPTP)是建立在PPP(Point to Point)点对点协议上的VPN隧道技术。当远程用户要访问公司专用网时,可采用PPTP网络接入方式,用户先拨号到PPTP Server建立PPP连接,然后通过PPTP协商建立一条用户到服务器的“隧道”,接着通过PPP协议的NCP协商,为用户分配一个网段内IP,用户可以使用分配到的IP进行局域网内的通信。从而为远程接入虚拟专用网提供一条在公共网络上创建安全连接的途径。

警告

本文档仅用于示例和操作指引,请您根据实际需要操作。使用PPTP服务存在安全隐患,您需要考虑由此产生的影响及问题。更多信息,请参见查看详情

配置CentOS PPTP服务端

远程登录作为PPTP服务端的ECS实例,按照以下操作步骤配置CentOS的PPTP服务端。如何远程登录ECS实例,请参见连接方式概述

前提条件

  • 创建一台ECS实例,关于如何创建ECS实例,请参见使用向导创建实例

    本文示例步骤中,使用了以下配置的ECS实例。实际操作时,建议您保持操作系统版本的一致性,以避免因操作系统版本差异而导致的命令执行错误。

    • 实例规格:ecs.c6.large

    • 操作系统:公共镜像 CentOS 7.2

    • 网络类型:专有网络VPC

    • IP地址:分配公网IP地址

  • 在安全组中,添加PPTP VPN所需放行的端口为TCP协议的1723端口。具体操作,请参见ECS实例内安装VPN之后如何配置安全组

配置PPTP服务

  1. 安装PPTP服务端。

    请在PPTP服务端ECS实例中运行以下命令以安装PPTP服务端。

    yum install -y ppp pptpd
  2. 配置pptpd文件。

    用于为指定PPTP服务端配置分配给客户端的IP地址范围,确保每个连接的设备都能获得一个唯一的IP地址。

    1. 执行vim /etc/pptpd.conf命令,添加以下配置:

      localip 192.168.0.1
      remoteip 192.168.0.230-238
      说明
      • localip是指客户端要连接的VPN服务端的地址,一般建议填写服务端私网IP。请根据实际情况调整localip。

      • remoteip是指分配给PPTP客户端的IP地址范围。请确保该范围内没有其他设备正在使用这些IP地址,以避免发生IP冲突。请根据实际情况调整remoteip。

    2. 添加配置信息后,文件内容如下图所示:

      image

  3. 配置DNS。

    添加DNS服务器是为了让通过PPTP连接的客户端能够正确解析域名,实现网络访问。

    1. 执行vim /etc/ppp/options.pptpd命令,添加以下配置:

      ms-dns 223.5.5.5
      ms-dns 223.6.6.6
      说明

      IP地址223.5.5.5和223.6.6.6是阿里云的公共DNS服务器地址,您可以根据需要调整为其它公共DNS服务地址。

    2. 添加配置信息后,文件内容如下图所示:

      image

  4. 创建用户。

    创建的用户用于连接PPTP服务端时的身份验证,确保只有授权用户可以通过拨号或网络连接访问系统。

    1. 执行vim /etc/ppp/chap-secrets命令,添加pptpd的用户名和密码。根据需要添加账号,按照用户名 pptpd 密码 IP地址格式输入,确保每一项之间用空格隔开,并且每行仅添加一个用户账号。

      说明

      示例:test pptpd 123456 ,其中“*”表示所有IP。

      test pptpd 123456 *
    2. 添加配置信息后,文件内容如下图所示:image

  5. 修改最大传输单元MTU。

    设置MTU是为了优化网络性能,减少分包,提高数据传输效率

    1. 执行vim /etc/ppp/ip-up命令,设置最大传输单元MTU。

      ifconfig ppp0 mtu 1472
    2. 添加配置信息后,文件内容如下图所示:image

  6. 启动PPTP服务。

    执行以下命令启动PPTP服务,并设置开机自动启动。

    systemctl start pptpd
    systemctl enable pptpd.service

开启路由转发

允许系统进行IP转发。

  1. 执行以下命令启用转发。

    echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
  2. 添加配置信息后,文件内容如下图所示:image

  3. 执行sysctl -p命令,使修改后的参数生效。

配置iptables防火墙

通过使用iptables防火墙,您可以设置规则来控制出入系统的网络流量。例如,可以让多台计算机共享一个公共IP地址访问互联网。

  1. 关闭防火墙。

    systemctl stop firewalld
    systemctl mask firewalld
  2. 安装iptables服务。

    yum install -y iptables-services
    
  3. 启动iptables服务,并设置iptables服务开机自启动。

    systemctl start iptables
    systemctl enable iptables
  4. 添加允许PPTP连接规则。

    # 允许新的TCP连接请求通过1723端口进入本机
    iptables -I INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT 
    
    # 允许GRE协议(IP协议号47)
    iptables -I INPUT -p gre -j ACCEPT
    
  5. 添加iptables转发规则,实现源地址伪装。其中192.168.0.0/24 为分配给客户端的IP地址所在网段。

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
  6. 添加NAT转发规则,将来自网段数据包的源IP地址转换为指定的公网IP地址。其中192.168.0.0/24 为分配给客户端的IP地址所在网段,XXX.XXX.XXX.XXX为PPTP服务端ECS实例公网IP。

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source XXX.XXX.XXX.XXX
  7. 保存配置。

    service iptables save
  8. 重启iptables服务。

    systemctl restart iptables

配置PPTP客户端

CentOS

前提条件

创建一台ECS实例,关于如何创建ECS实例,请参见使用向导创建实例。示例步骤中,使用了以下配置的ECS实例。实际操作时,建议您保持操作系统版本的一致性,以避免因操作系统版本差异而导致的命令执行错误。

  • 实例规格:ecs.c6.large

  • 操作系统:公共镜像 CentOS 7.2

  • 网络类型:专有网络VPC

  • IP地址:分配公网IP地址

操作步骤

  1. 远程登录ECS实例,如何远程登录ECS实例,请参见连接方式概述

  2. 请在PPTP客户端ECS实例中执行如下命令,安装PPTP软件包。

    yum install -y ppp pptp pptp-setup
  3. 执行如下命令, 连接PPTP服务端。

    pptpsetup --create test --server [$IP] --username [$User] --password [$Password] --encrypt --start
    说明
    • [$IP]为PPTP服务端ECS实例的公网IP地址。

    • [$User]为PPTP服务端中创建的用户的用户名,如何获取用户名,请参见创建用户

    • [$Password]为PPTP服务端中创建的用户的密码,如何获取密码,请参见创建用户

    如下图所示,表示已成功连接PPTP服务端。

  4. 当系统提示已经被分配了192.168.0.234的客户端地址时,执行如下命令,可以看到ppp0网卡。

    ifconfig | grep -A 10 ppp

    如下图所示,表示命令执行成功。

Windows

前提条件

创建一台ECS实例,关于如何创建ECS实例,请参见使用向导创建实例。示例步骤中,使用了以下配置的ECS实例。实际操作时,建议您保持操作系统版本的一致性,以避免因操作系统版本差异而导致的命令执行错误。

  • 实例规格:ecs.c6.large

  • 操作系统:公共镜像 Windows Server 2022

  • 网络类型:专有网络VPC

  • IP地址:分配公网IP地址

操作步骤

  1. 远程登ECS实例,如何远程登录ECS实例,请参见连接方式概述

  2. 开始 > 设置 > 网络和 Internet > VPN中单击添加 VPN 连接

    image

  3. 添加 VPN 连接界面添加如下信息并保存。

    VPN 提供商Windows(内置)

    连接名称:自定义VPN连接名称,例如pptp。

    服务器名称或地址:填入VPN服务器的公网IP或者域名

    VPN 类型:选择点对点隧道协议(PPTP)

    登录信息的类型:选择用户名和密码。

    用户名(可选):填入PPTP服务端中创建的用户的用户名。

    密码:填入PPTP服务端中创建的用户的密码。

    image

  4. 网络和 Internet > 网络和共享中心 > 更改适配器设置中找到刚创建的VPN连接。

    image

  5. 右键单击该VPN连接,选择属性 > 网络,选择Internet 协议版本 4(TCP/IPv4),单击属性image

  6. 在弹出窗口中,单击高级,在IP 设置页签取消选中在远程网络上使用默认网关,然后单击确定保存设置。

    重要

    若未取消选中,拨号连接建立后,将会更改本地的默认网关设置,从而导致本地无法正常访问互联网。

    image

  7. 开始 > 设置 > 网络和 Internet > VPN中连接VPN,连接成功后将显示已连接。

    image

常见问题

浏览器无法打开网页

搭建PPTP VPN后,测试可以连接,可以PING通网站域名,但浏览器无法打开网页。一般是MTU设置不正确导致的。请参考以下方案解决问题。

  • 方案一

    1. 登录连接配置VPN的CentOS服务器。

    2. 输入执行ifconfig ppp0 mtu 1472命令。

    3. 通过浏览器测试是否能打开网页。当出现类似如下返回信息时,表示问题已经解决。

      说明

      此方案可以临时生效,如果您需要长期生效的方案,请完成方案二。

  • 方案二

    1. 登录连接配置VPN的CentOS服务器。

    2. 输入执行vi /etc/ppp/ip-up命令,进入/etc/ppp/ip-up文件。

    3. /etc/ppp/ip-up文件中添加ifconfig ppp0 mtu 1472 命令。

      回显如下图所示,表示命令添加成功。image

    4. 通过浏览器测试是否能打开网页。

      当出现类似如下返回信息时,表示问题已经解决。

获取到错误的IP地址

客户端成功连接VPN后,获取到错误的地址。获取的地址不是VPN服务端分配的地址,而是云服务器ECS实例的内网网卡地址。如果出现这种情况,假设配置的VPN客户端配置名称是testvpn,可以参照如下步骤尝试处理。

操作步骤

  1. 登录连接配置VPN的CentOS服务器。

  2. 输入执行vi /etc/ppp/peers/testvpn命令,进入ppp客户端/etc/ppp/peers/testvpn配置文件中。在如下图位置上添加noipdefault参数。

  3. 执行如下命令重启客户端。重新连接后通常可获取到正确的IP地址。

    poff testvpn
    pon testvpn
    说明

    重启客户端时,noipdefault参数可能会被服务端传递过来的参数覆盖。如果noipdefault参数被覆盖,您需要检查服务端的配置。