这是一篇保姆式的在centos中搭建PPTP VPN Server的教程。

VPN简介

VPN,即:虚拟私人网络(Virtual Private Network,缩写为VPN)是一种常用于连接中、大型企业或团体与团体间的私人网络的通讯方法。虚拟私人网络的讯息透过公用的网络架构(例如:互联网)来传送内部网的网络讯息。它利用已加密的通道协议(Tunneling Protocol)来达到保密、发送端认证、消息准确性等私人消息安全效果。这种技术可以用不安全的网络(例如:互联网)来发送可靠、安全的消息。需要注意的是,加密消息与否是可以控制的。没有加密的虚拟专用网消息依然有被窃取的危险。

VPN的实质就是利用加密技术在公用网上面封装出一个数据通讯隧道只有一张物理网卡也可以做VPN服务器
Intranet VPN

根据不同的划分标准,VPN可以按几个标准进行分类划分:

按VPN的协议分类

VPN的隧道协议主要主要有三种:PPTPL2TPIPSec,其中PPTPL2TP协议工作在OSI模型的第二层,又称为二层隧道协议;IPSec是第三层隧道协议。

按VPN的应用分类

  1. Access VPN(远程接入VPN):客户端到网关,使用公网作为骨干网在设备之间传输VPN数据流量;
  2. Intranet VPN(内联网VPN):网关到网关,通过公司的网络架构连接来自同公司的资源;
  3. Extranet VPN(外联网VPN):与合作伙伴企业网构成Extranet,将一个公司与另一个公司的资源进行连接。

搭建pptp server

安装和配置pptpd

  1. 检查系统是否支持ppp
cat dev/ppp

检查系统是否支持ppp
如果出现以上“No such file or directory”提示则说明ppp是开启的,可以正常架设pptp服务。

  1. 安装pptp
yum -y install pptpd

安装pptp成功

配置网络

  1. 配置IP
cp /etc/pptpd.conf /etc/pptpd.conf.bak
vi /etc/pptpd.conf

去掉localipremoteip前的注释:

localip 192.168.1.1 #自定义设置本地IP范围
remoteip 192.168.1.234-238 #自定义分配给客户端的网段和地址池

去掉localip和remoteip前的注释

  1. 配置DNS
cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
vi /etc/ppp/options.pptpd

搜索ms-dns,去掉搜索到的两行ms-dns前面的#,并修改为下面的字段: 配置DNS

  1. 设置最大传输单元MTU
在命令符[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local “$@”下方添加 ifconfig ppp0 mtu 1472
vi /etc/ppp/ip-up

设置最大传输单元MTU

  1. 内核参数设置
    使用以下命令检查路由转发是否已启用:
sysctl net.ipv4.ip_forward

检查路由转发是否已启用
如果输出是 net.ipv4.ip_forward = 1 ,则表示路由转发已成功启用。

如果未启用,请尝试执行一下命令:

cp /etc/sysctl.conf /etc/sysctl.conf.bak
vi /etc/sysctl.conf
#在文件中修改以下行
net.ipv4.ip_forward = 1

内核参数设置

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

#存文件后,运行以下命令使配置立即生效
sysctl -p
  1. 配置防火墙

允许1723端口gre协议通过。

创建用户账号

cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
vi /etc/ppp/chap-secrets

添加用户信息,一行只添加一个用户账号。按照用户名 pptpd 密码 IP地址格式输入,每一项用空格/TAB隔开。输入:wq命令保存退出。
格式如下:

# 格式: 用户名 服务名 密码 分配的IP(可以留空)
vpnuser pptpd password *

添加用户信息

安装和配置iptables

  1. 安装iptables服务
yum install iptables-services
#执行以下命令,设置iptables服务开机自启动
systemctl enable iptables
  1. 添加iptables转发规则
#添加iptables转发规则
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
#添加NAT转发规则,其中XXX.XXX.XXX.XXX为您的实例公网IP地址
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -j SNAT --to-source XXX.XXX.XXX.XXX

-t nat: 选择nat表。这是一个用于处理网络地址转换(NAT)的表,它通常用于修改数据包的源地址或目标地址。
-A POSTROUTING: 将规则追加到POSTROUTING链中。POSTROUTING链用于处理出站的数据包,在数据包离开网络接口(接口:假定为eth0)之前进行处理。
-s 192.168.1.0/24: 选择源地址为192.168.1.0/24子网的所有数据包。这个子网通常表示内网中的所有设备,IP地址范围为192.168.0.1到192.168.0.254。
-j MASQUERADE: 将这些数据包的源地址伪装成网络接口eth0的外部IP地址。MASQUERADE是一种特殊的目标动作,它会动态使用eth0接口的IP地址进行NAT操作。这在动态IP场景下(例如使用DSL拨号)特别有用。

这条命令实现了从内网(192.168.1.0/24)出站到外网的数据包的地址伪装。具体来说,任何从192.168.1.0/24子网发送到外网的数据包,都会在离开eth0接口时,其源IP地址被替换为eth0接口的外部IP地址。这样做的目的是让内网设备通过VPN连接访问外部网络时,外部网络看到的是VPN服务器的外部IP地址,而不是内网设备的私有IP地址。

执行如下命令,保存设置:

service iptables save

保存iptables设置

重启iptables服务,确保设置生效。

systemctl restart iptables

启动PPTP服务并设置其为开机自启

systemctl start pptpd
systemctl enable pptpd

#重启服务
systemctl restart pptpd

检查PPTP服务是否开启:

ps -ef |grep pptpd

检查PPTP服务是否开启

查看PPTP监听的端口:

ss -nutlp |grep pptpd  #打开的端口是1723

查看PPTP监听的端口

测试:用windows 10连接vpn server

  1. 点击 开始->设置->网络和internet->VPN:
    windows自带的vpn client

  2. 点击 添加VPN连接 ,输入vpn server的信息
    在windows10中输入vpn信息

  3. 点击 连接 后,一般情况下在5-10秒内可以连接上。: 连接vpn server 连接vpn server成功

注意:如果连接失败,则需要对VPN连接做一下设置后再连接。

  • 设置vpn网卡安全:需要加密,允许使用CHAP等协议: 允许使用这些协议

设置为 需要加密 可以防止客户端报错:不能验证服务器的身份

  • 取消:在远程网络上使用默认网关:
    取消:在远程网络上使用默认网关
  1. 验证连接情况 在客户端,可以查看本机IP地址:
ipconfig /all

查看本机IP地址

在vpn server端,可以查看是否有client连接:

tail -40 /var/log/messages

查看server端日志

在实际使用的过程中,windows客户端可能有多个网络连接,可以通过设置路由表:使得在访问某些ip地址时使用vpn。

#命令格式如下
route -p add <目标网络IP> mask <子网掩码> <网关IP> if <接口编号>
#例如:
route -p add <目标网络IP> mask 255.255.255.255 192.168.1.1 if 66

执行上述命令后,在windows访问 <目标网络IP> 这个地址时,将通过VPN。
-p : 永久保存,即这个路由在系统重启后会丢失。

通过 route print 命令,可以查看到已有的路由表,并且能够看到网络接口编号:

route print

查看vpn虚拟网卡编号

路由表


🪐祝好运🪐

参考