本文为您介绍ECS的Ubuntu系统中如何配置VPN。
前提条件
本文内容适用于Ubuntu 18.04、Ubuntu 20.04及Ubuntu 22.04。
本文以在操作系统版本为Ubuntu 18.04的ECS实例中搭建VPN为例。关于如何创建ECS实例,请参见自定义购买实例。
实例的安全组入方向规则已放行1723端口和GRE协议,访问来源为VPN客户端的公网IP。具体操作,请参见管理安全组规则。
配置VPN服务端
远程登录作为PPTP服务端的ECS实例,按照以下操作步骤配置Ubuntu的PPTP服务端。如何远程登录ECS实例,请参见连接实例(Linux)。
配置PPTP服务
执行如下命令,安装pptpd。
sudo apt-get update sudo apt-get -y install pptpd
配置pptpd文件。 用于为指定PPTP服务端配置分配给客户端的IP地址范围,确保每个连接的设备都能获得一个唯一的IP地址。
执行
sudo vim /etc/pptpd.conf
命令,添加以下配置:localip 192.168.0.1 remoteip 192.168.0.234-238
说明localip是指客户端要连接的VPN服务端的地址,一般建议填写服务端私网IP。请根据实际情况调整localip。
remoteip是指分配给PPTP客户端的IP地址范围。请确保该范围内没有其他设备正在使用这些IP地址,以避免发生IP冲突。请根据实际情况调整remoteip。
添加配置信息后,文件内容如下图所示:
配置DNS。
执行
sudo vim /etc/ppp/pptpd-options
命令,添加以下配置:ms-dns 223.5.5.5 ms-dns 223.6.6.6
说明IP地址223.5.5.5和223.6.6.6是阿里云的公共DNS服务器地址,您可以根据需要调整为其它公共DNS服务地址。
添加配置信息后,文件内容如下图所示:
创建用户。创建的用户用于连接PPTP服务端时的身份验证,确保只有授权用户可以通过拨号或网络连接访问系统。
执行
sudo vim /etc/ppp/chap-secrets
命令,添加pptpd的用户名和密码。根据需要添加账号,按照用户名 pptpd 密码 IP地址
格式输入,确保每一项之间用空格隔开,并且每行仅添加一个用户账号。说明示例:test pptpd 123456 ,其中“*”表示所有IP。
test pptpd 123456 *
添加配置信息后,文件内容如下图所示:
开启路由转发
执行以下命令启用转发。
sudo echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
执行如下命令,加载系统参数。
sudo sysctl -p "/etc/sysctl.conf"
配置iptables防火墙转发规则
由于在Ubuntu中,直接执行iptables
规则会在ECS重启后丢失,因为默认情况下这些规则是临时的。这里使用iptables-persistent
包来保存iptables
规则,并在系统启动时自动加载。
运行以下命令安装
iptables-persistent
。sudo apt-get install iptables-persistent -y
安装过程中会询问是否保存当前的规则,选择
yes
即可。添加iptables规则。
sudo iptables -A INPUT -p gre -j ACCEPT sudo iptables -A INPUT -p tcp --dport 1723 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 47 -j ACCEPT sudo iptables -t nat -A POSTROUTING -s 192.168.0.234/29 -o eth0 -j SNAT --to-source XXX.XXX.XXX.XXX
说明其中
192.168.0.234/29
指的是VPN客户端的私有IP地址范围,请根据实际情况修改;XXX.XXX.XXX.XXX为您的ECS实例公网IP。保存iptables规则。
sudo netfilter-persistent save
(可选)查看iptables规则。
# 查看详细规则 sudo iptables -L -v # 查看 nat 表的规则 sudo iptables -t nat -L -v
重启PPTP服务
sudo /etc/init.d/pptpd restart
sudo systemctl enable pptpd.service
VPN客户端配置
执行如下命令,安装PPTP客户端软件。
sudo apt-get update sudo apt-get -y install pptp-linux
执行如下命令,初始化一个名为test的VPN连接通道。
sudo pptpsetup --create test --server [$IP] --username [$User] --password [$Password] --encrypt --start
连接成功之后会提示如下内容:
Using interface ppp0 Connect: ppp0 <--> /dev/pts/1 CHAP authentication succeeded MPPE 128-bit stateless compression enabled local IP address 192.168.0.234 remote IP address 192.168.0.1