在Ubuntu服务器上配置VPN服务可以为远程访问、数据加密以及突破网络限制提供可靠的解决方案,以下将详细介绍基于Ubuntu服务器的VPN搭建过程、配置要点及注意事项,涵盖协议选择、安装步骤、安全加固等内容。

VPN协议选择与准备
在开始配置前,需根据需求选择合适的VPN协议,常见协议包括:
- OpenVPN:平衡安全性与兼容性,支持TCP/UDP,适合大多数场景。
- WireGuard:轻量级、高性能,基于现代加密技术,适合对速度要求高的环境。
- IPsec(IKEv2):企业级标准,安全性强,配置复杂度较高。
本文以OpenVPN为例展开说明,因其成熟度高、文档丰富,需确保Ubuntu服务器满足以下条件:
- 操作系统:Ubuntu 20.04 LTS或更高版本。
- 网络环境:拥有公网IP地址,端口(默认1194)已开放。
- 权限:具备root或sudo访问权限。
安装与配置OpenVPN
更新系统并安装依赖
sudo apt update && sudo apt upgrade -y sudo apt install -y openvpn easy-rsa openssl
配置CA证书与密钥
创建证书颁发机构(CA)目录并初始化PKI:
make-cadir ~/openvpn-ca cd ~/openvpn-ca
编辑vars文件,设置证书默认参数(如国家、邮箱等):

vim vars
取消注释并修改以下字段:
export EASY_RSA="`pwd`" export KEY_COUNTRY="CN" export KEY_PROVINCE="Beijing" export KEY_CITY="Beijing" export KEY_ORG="MyCompany" export KEY_EMAIL="admin@example.com"
初始化PKI并生成CA证书:
./easyrsa init-pki ./easyrsa build-ca nopass
生成服务器证书与密钥
./easyrsa gen-req server nopass ./easyrsa sign-req server server
生成Diffie-Hellman参数(增强密钥交换安全性):
./easyrsa gen-dh
生成HMAC密钥(防攻击):

openvpn --genkey --secret ta.key
配置OpenVPN服务器
将生成的证书文件复制到/etc/openvpn/server/目录:
sudo mkdir -p /etc/openvpn/server sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn/server/
创建服务器配置文件/etc/openvpn/server/server.conf:
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 tls-auth ta.key 0 cipher AES-256-CBC auth SHA256 user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log verb 3 explicit-exit-notify 1
启动并设置开机自启
sudo systemctl start openvpn@server sudo systemctl enable openvpn@server
检查服务状态:
sudo systemctl status openvpn@server
客户端配置与防火墙设置
生成客户端证书
在CA目录下为每个客户端生成证书:
./easyrsa gen-req client1 nopass ./easyrsa sign-req client client1
将客户端证书(client1.crt、client1.key)、CA证书(ca.crt)和HMAC密钥(ta.key)打包传输给客户端。
配置客户端.ovpn文件
示例客户端配置文件内容:
client dev tun proto udp remote your_server_ip 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA256 auth-user-pass tls-auth ta.key 1 key-direction 1 verb 3
配置防火墙与NAT转发
启用IP转发:
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf sudo sysctl -p
配置UFW防火墙规则:
sudo ufw allow 1194/udp sudo ufw allow OpenSSH sudo ufw enable
设置NAT转发(假设服务器内网接口为eth0):
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE sudo apt install -y iptables-persistent sudo netfilter-persistent save
安全加固建议
- 证书管理:定期更新证书,设置过期时间。
- 访问控制:通过
plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so "login"启用系统用户认证。 - 日志监控:定期检查
/var/log/syslog中的OpenVPN日志。 - 协议优化:根据网络环境调整
cipher和auth参数,推荐AES-256-GCM。
常见问题与解决方案
以下为FAQs部分:
问题1:连接VPN后无法访问互联网?
解答:
检查NAT转发规则是否正确配置,确保服务器防火墙允许VPN客户端流量,可通过sudo iptables -t nat -L -v查看规则,确认客户端配置文件中的DNS设置(如push "dhcp-option DNS 8.8.8.8")是否生效,可尝试手动指定DNS服务器。
问题2:如何限制特定客户端访问?**解答**:
通过ccd(Client Config Directory)目录实现客户端访问控制,首先创建/etc/openvpn/server/ccd目录,为每个客户端创建同名文件(如client1),添加以下内容限制IP:
ifconfig-push 10.8.0.2 10.8.0.1
在服务器配置文件中添加client-config-dir /etc/openvpn/server/ccd,重启服务后,客户端client1将固定分配IP 8.0.2,并可结合route指令控制路由规则。
