本文为您介绍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。
-
-
添加配置信息后,文件内容如下所示:
# (Recommended) #localip 192.168.0.1 #remoteip 192.168.0.234-238,192.168.0.245 localip 192.168.0.1 remoteip 192.168.0.234-238
-
-
配置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服务地址。
-
添加配置信息后,文件内容如下所示:
# specifies the secondary DNS address. #ms-dns 10.0.0.1 #ms-dns 10.0.0.2 ms-dns 223.5.5.5 ms-dns 223.6.6.6
-
-
创建用户。创建的用户用于连接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"命令执行成功后,输出中
net.ipv4.ip_forward = 1表示 IP 转发已启用。root@iZZ:~# sudo sysctl -p vm.swappiness = 0 kernel.sysrq = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.ip_forward = 1
配置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