在虚拟机上搭建VPN服务器(供其他设备连接)
选择VPN协议
常见协议有:
- OpenVPN(跨平台、配置复杂但安全)
- WireGuard(高性能、配置简单)
- IPSec/L2TP(兼容性好,但可能被防火墙限制)
- SoftEther(多功能,支持多种协议)
以OpenVPN为例的搭建步骤
环境准备:
- 虚拟机系统(如Ubuntu/CentOS)。
- 确保虚拟机的网络模式为桥接(Bridged)或NAT+端口转发(需在宿主机配置转发)。
步骤:
-
安装OpenVPN与Easy-RSA(用于生成证书):
sudo apt update && sudo apt install openvpn easy-rsa # Ubuntu/Debian sudo yum install openvpn easy-rsa # CentOS/RHEL
-
生成证书和密钥:
make-cadir ~/openvpn-ca cd ~/openvpn-ca nano vars # 修改证书信息(如国家、组织名) source vars ./clean-all ./build-ca # 生成CA证书 ./build-key-server server # 服务器证书 ./build-dh # Diffie-Hellman参数 ./build-key client1 # 客户端证书
-
配置OpenVPN服务器:
- 复制示例配置并编辑:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz sudo nano /etc/openvpn/server.conf
- 关键配置项:
proto udp port 1194 dev tun ca /path/to/ca.crt cert /path/to/server.crt key /path/to/server.key dh /path/to/dh.pem server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" # 客户端流量通过VPN push "dhcp-option DNS 8.8.8.8" # 推送DNS
- 复制示例配置并编辑:
-
启动服务:
sudo systemctl start openvpn@server sudo systemctl enable openvpn@server
-
配置客户端:
- 将生成的
client1.crt、client1.key、ca.crt和客户端配置文件(如client.ovpn)复制到客户端设备。 - 客户端配置文件示例:
client dev tun proto udp remote your-server-ip 1194 # 替换为虚拟机IP cert client1.crt key client1.key ca ca.crt
- 将生成的
网络与防火墙
- 虚拟机网络:确保宿主机和虚拟机防火墙放行VPN端口(如1194/udp)。
- 端口转发(若虚拟机使用NAT模式):
- 在宿主机(如VirtualBox/NAT网络)中设置端口转发规则。
- 将宿主机的1194/udp转发到虚拟机的1194/udp。
让虚拟机通过VPN连接外部网络
安装VPN客户端
以Ubuntu为例,使用openvpn客户端:
sudo apt install openvpn sudo openvpn --config client.ovpn # 使用服务商提供的配置文件
网络模式选择
- 桥接模式:虚拟机直接使用宿主网络,VPN连接后独立于宿主机。
- NAT模式:虚拟机通过宿主机网络,若宿主机已连接VPN,虚拟机可能默认不经过VPN(需额外路由配置)。
验证连接
curl ifconfig.me # 查看出口IP是否变为VPN服务器IP
常见问题
-
连接失败:
- 检查防火墙(
ufw/iptables)是否放行端口。 - 确认虚拟机网络配置(桥接/NAT端口转发)。
- 检查防火墙(
-
性能问题:
WireGuard比OpenVPN更高效,适合高吞吐场景。
-
客户端无法上网:
- 确保服务器配置中启用了
push "redirect-gateway"。
- 确保服务器配置中启用了
- 搭建VPN服务:需配置服务器证书、网络和防火墙。
- 虚拟机使用VPN:直接安装客户端或依赖宿主机网络。
根据实际需求选择合适的协议和网络模式,并注意安全性(如使用强加密证书)。



