菜鸟科技网

linuxvps搭建vpn,Linux VPS如何快速搭建VPN?

在Linux VPS上搭建VPN服务是许多用户为了保护隐私、访问限制内容或实现远程办公的需求而选择的方案,以下将以常见的OpenVPN协议为例,详细介绍在CentOS系统上的搭建步骤,包括环境准备、服务端配置、客户端证书生成及安全优化等内容。

linuxvps搭建vpn,Linux VPS如何快速搭建VPN?-图1
(图片来源网络,侵删)

环境准备

首先需要一台纯净的Linux VPS,推荐使用CentOS 7/8或Ubuntu 20.04 LTS系统,登录VPS后,更新系统并安装必要的依赖包,以CentOS为例,执行以下命令:

sudo yum update -y
sudo yum install -y epel-release wget tar openssl openssl-devel lzo lzo-devel

然后下载并安装OpenVPN及其依赖组件Easy-RSA:

wget https://swupdate.openvpn.net/community/releases/openvpn-2.5.8.tar.gz
tar -xvzf openvpn-2.5.8.tar.gz
cd openvpn-2.5.8
./configure && make && make install

接着安装Easy-RSA用于管理证书:

wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
tar -xvzf EasyRSA-3.0.8.tgz -C /etc/openvpn/
ln -s /etc/openvpn/EasyRSA-3.0.8 /etc/openvpn/easy-rsa

生成证书与密钥

证书是VPN安全的核心,需依次生成CA证书、服务器证书及客户端证书,首先初始化PKI环境:

linuxvps搭建vpn,Linux VPS如何快速搭建VPN?-图2
(图片来源网络,侵删)
cd /etc/openvpn/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass

创建服务器证书并指定密钥用途:

./easyrsa gen-req server nopass
./easyrsa sign-req server server

生成Diffie-Hellman参数(需较长时间):

./easyrsa gen-dh

最后生成客户端证书(此处以客户端1为例):

./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

配置OpenVPN服务端

创建服务器配置文件/etc/openvpn/server.conf如下:

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
verb 3
crl-verify /etc/openvpn/easy-rsa/pki/crl.pem

启动服务并设置开机自启:

systemctl start openvpn@server
systemctl enable openvpn@server

配置客户端与防火墙

将生成的客户端证书(client1.crt、client1.key)和CA证书(ca.crt)下载到本地,并创建客户端配置文件client.ovpn(示例):

client
dev tun
proto udp
remote VPS公IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
<ca>
-----BEGIN CERTIFICATE-----
(粘贴ca.crt内容)
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
(粘贴client1.crt内容)
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
(粘贴client1.key内容)
-----END PRIVATE KEY-----
</key>

在VPS上开启防火墙规则:

firewall-cmd --permanent --add-port=1194/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

若使用云服务器(如阿里云、腾讯云),需在控制台安全组中开放1194 UDP端口。

安全优化建议

  1. 启用双因素认证:通过plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so /etc/pam.d/login配置PAM认证。
  2. 限制客户端访问:在server.conf中添加client-config-dir /etc/openvpn/ccd,为不同客户端分配固定IP。
  3. 定期轮换证书:设置定时任务每月自动更新证书并重启服务。
  4. 监控日志:通过journalctl -u openvpn@server -f实时查看连接状态。

相关操作命令速查

操作场景 命令示例
查看OpenVPN连接状态 openvpn --status /var/log/openvpn/status.log 10
撤销客户端证书 ./easyrsa revoke client1 && ./easyrsa gen-crl
导出客户端配置 tar -cz client1.tar.gz client1.crt client1.key ca.crt client.ovpn

相关问答FAQs

Q1: 如何解决VPN连接后无法上网的问题?
A: 首先检查VPS防火墙是否开启NAT转发(sysctl -a | grep net.ipv4.ip_forward),若返回0则执行echo 1 > /proc/sys/net/ipv4/ip_forward并永久配置,其次确认客户端配置中的DNS服务器是否正确,可尝试替换为公共DNS(如1.1.1.1),最后检查云服务器安全组是否允许出站流量。

Q2: 如何限制VPN客户端仅访问特定服务?
A: 可通过iptables实现流量限制,仅允许客户端访问VPS的22端口(SSH),执行以下命令:

iptables -A FORWARD -s 10.8.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j DROP
service iptables save

此规则将阻止除SSH外的所有VPN客户端流量,需谨慎操作以免影响服务端自身功能。

分享:
扫描分享到社交APP
上一篇
下一篇