凌峰创科服务平台

Ubuntu服务器如何搭建与配置VPN?

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

Ubuntu服务器如何搭建与配置VPN?-图1
(图片来源网络,侵删)

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文件,设置证书默认参数(如国家、邮箱等):

Ubuntu服务器如何搭建与配置VPN?-图2
(图片来源网络,侵删)
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密钥(防攻击):

Ubuntu服务器如何搭建与配置VPN?-图3
(图片来源网络,侵删)
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.crtclient1.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

安全加固建议

  1. 证书管理:定期更新证书,设置过期时间。
  2. 访问控制:通过plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so "login"启用系统用户认证。
  3. 日志监控:定期检查/var/log/syslog中的OpenVPN日志。
  4. 协议优化:根据网络环境调整cipherauth参数,推荐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指令控制路由规则。

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