# 登录云服务器
ssh ley@120.48.170.222
# 更新系统包列表
sudo apt update
# 安装指定版本的OpenVPN
sudo apt install openvpn=2.6.12-0ubuntu0.24.04.3~bpo22.04.1
# 安装Easy-RSA用于证书管理
sudo apt install easy-rsa
# 验证OpenVPN版本
openvpn --version | head -1# 创建Easy-RSA目录
mkdir -p ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
cd ~/easy-rsa
# 初始化PKI
./easyrsa init-pki
# 生成CA证书(无密码)
./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
# 创建客户端证书(为公司PC创建)
./easyrsa gen-req client-company nopass
./easyrsa sign-req client client-company
# 为家庭网络客户端创建证书
./easyrsa gen-req client-home nopass
./easyrsa sign-req client client-home# 创建OpenVPN配置目录
sudo mkdir -p /etc/openvpn/server
sudo mkdir -p /etc/openvpn/ccd
# 将证书文件复制到安全位置
sudo cp ~/easy-rsa/pki/ca.crt /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/issued/server.crt /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/server/
sudo cp ~/easy-rsa/ta.key /etc/openvpn/server/
# 创建服务器配置文件
sudo nano /etc/openvpn/server/server.confserver.conf内容:
# 基本配置
port 1194
proto udp
dev tun
# 证书和密钥
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
tls-auth /etc/openvpn/server/ta.key 0
# VPN网络配置
server 10.8.0.0 255.255.255.0
# 客户端特定配置文件目录
client-config-dir /etc/openvpn/ccd
# 推送路由到客户端
push "route 192.168.66.0 255.255.255.0"
# 保持连接
keepalive 10 120
# 加密设置
cipher AES-256-CBC
auth SHA256
# 其他设置
user nobody
group nogroup
persist-key
persist-tun
# 日志
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
# 允许客户端到客户端通信
client-to-client
# 允许客户端通过VPN访问服务器所在网络
push "redirect-gateway def1 bypass-dhcp"
# DNS设置(可选)
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# 压缩(根据带宽选择)
comp-lzo# 创建客户端特定配置
sudo nano /etc/openvpn/ccd/client-homeclient-home内容:
# 为家庭网络客户端分配固定IP
ifconfig-push 10.8.0.10 255.255.255.0
# 设置内部路由,让其他客户端知道通过此客户端访问家庭网络
iroute 192.168.66.0 255.255.255.0# 启用IP转发
sudo nano /etc/sysctl.conf
# 取消注释或添加以下行:
net.ipv4.ip_forward = 1
# 应用配置
sudo sysctl -p
# 配置iptables(Ubuntu 22.04默认使用nftables,需要安装iptables)
sudo apt install iptables-persistent
# 设置NAT规则
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# 允许VPN流量转发
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 保存iptables规则
sudo netfilter-persistent save
# 配置UFW(如果使用UFW)
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
sudo ufw enable# 启动服务
sudo systemctl start openvpn-server@server.service
# 设置开机自启
sudo systemctl enable openvpn-server@server.service
# 检查服务状态
sudo systemctl status openvpn-server@server.service
# 查看日志确认服务运行正常
sudo tail -f /var/log/openvpn.log# 对于Ubuntu/Debian系统
sudo apt update
sudo apt install openvpn
# 对于MacBook(使用Homebrew)
brew install openvpn
# 或下载OpenVPN Connect客户端
# https://openvpn.net/client-connect-vpn-for-mac-os/# 在云服务器上,创建客户端配置包
cd ~/easy-rsa
# 创建客户端配置目录
mkdir -p ~/client-configs
cd ~/client-configs
# 创建基础配置文件
nano base.confbase.conf内容:
client
dev tun
proto udp
remote 120.48.170.222 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
verb 3
# 证书和密钥
<ca>
# 这里将粘贴ca.crt内容
</ca>
<cert>
# 这里将粘贴client-home.crt内容
</cert>
<key>
# 这里将粘贴client-home.key内容
</key>
key-direction 1
<tls-auth>
# 这里将粘贴ta.key内容
</tls-auth># 创建生成配置的脚本
nano make_config.shmake_config.sh内容:
#!/bin/
# 检查参数
if [ -z "$1" ]; then
echo "Usage: $0 CLIENT_NAME"
exit 1
fi
CLIENT_NAME=$1
# 复制基础配置
cp base.conf ${CLIENT_NAME}.ovpn
# 添加CA证书
echo "<ca>" >> ${CLIENT_NAME}.ovpn
cat ../pki/ca.crt >> ${CLIENT_NAME}.ovpn
echo "</ca>" >> ${CLIENT_NAME}.ovpn
# 添加客户端证书
echo "<cert>" >> ${CLIENT_NAME}.ovpn
cat ../pki/issued/${CLIENT_NAME}.crt >> ${CLIENT_NAME}.ovpn
echo "</cert>" >> ${CLIENT_NAME}.ovpn
# 添加客户端密钥
echo "<key>" >> ${CLIENT_NAME}.ovpn
cat ../pki/private/${CLIENT_NAME}.key >> ${CLIENT_NAME}.ovpn
echo "</key>" >> ${CLIENT_NAME}.ovpn
# 添加TLS认证密钥
echo "<tls-auth>" >> ${CLIENT_NAME}.ovpn
cat ../ta.key >> ${CLIENT_NAME}.ovpn
echo "</tls-auth>" >> ${CLIENT_NAME}.ovpn
echo "Client config created: ${CLIENT_NAME}.ovpn"# 运行脚本生成客户端配置文件
chmod +x make_config.sh
./make_config.sh client-home
# 将配置文件安全传输到家庭网络主机
scp client-home.ovpn ley@192.168.3.23:~/openvpn-client-config/# 启用IP转发(如果家庭主机需要转发流量)
sudo nano /etc/sysctl.conf
# 取消注释或添加:
net.ipv4.ip_forward = 1
sudo sysctl -p
# 配置路由(如果需要)
sudo route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.66.1# 使用OpenVPN Connect GUI客户端(Mac)
# 1. 安装OpenVPN Connect
# 2. 导入client-home.ovpn配置文件
# 3. 连接VPN
# 或使用命令行(Linux/Mac)
sudo openvpn --config ~/openvpn-client-config/client-home.ovpn# 查看当前路由表
ip route show
# 添加到家庭网络的路由(通过VPN隧道)
sudo ip route add 192.168.66.0/24 via 10.8.0.10 dev tun0
# 使路由永久生效(Ubuntu 22.04)
sudo nano /etc/netplan/99-openvpn-routes.yaml99-openvpn-routes.yaml内容:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
tunnels:
tun0:
addresses: [10.8.0.1/24]
routes:
- to: 192.168.66.0/24
via: 10.8.0.10
mtu: 1500应用配置:
sudo netplan apply# 登录家庭路由器管理界面(通常192.168.66.1)
# 添加静态路由:
# 目标网络:10.8.0.0/24
# 网关:192.168.66.23(VPN客户端主机的IP)
# 跃点数:2# 在云服务器上
cd ~/client-configs
./make_config.sh client-company
# 创建公司PC特定配置
nano client-company.ovpn
# 在文件末尾添加:
route 192.168.66.0 255.255.255.0
redirect-gateway def1# 编辑服务器配置,添加更具体的路由
sudo nano /etc/openvpn/server/server.conf
# 在文件末尾添加:
# 推送特定路由
push "route 10.8.0.0 255.255.255.0"
push "route 192.168.66.0 255.255.255.0"
# 重启服务
sudo systemctl restart openvpn-server@server.service# 1. 在云服务器上查看连接状态
sudo cat /var/log/openvpn-status.log
# 2. 检查VPN接口
ip addr show tun0
# 3. 测试从云服务器ping家庭网络客户端
ping 10.8.0.10# 在云服务器上测试到家庭网络的路由
traceroute 192.168.66.100
# 查看路由表
ip route show | grep 192.168.66
# 测试NAT功能
sudo iptables -t nat -L -n# 1. 在公司PC上连接VPN
# 导入client-company.ovpn并连接
# 2. 测试VPN连接
ping 10.8.0.1 # 应该能ping通云服务器VPN IP
# 3. 测试访问家庭网络
ping 192.168.66.23 # 家庭网络中的VPN客户端
ping 192.168.66.100 # 其他家庭主机
ping 192.168.66.1 # 家庭路由器
# 4. 测试DNS解析(如果配置了)
nslookup google.com# 使用mtr进行网络诊断
mtr -r -c 10 192.168.66.100
# 测试特定端口访问
nc -zv 192.168.66.100 22 # 测试SSH连接
nc -zv 192.168.66.100 80 # 测试HTTP连接
# 测试文件传输速度
# 在家庭网络主机上启动测试服务器
python3 -m http.server 8000 &
# 在公司PC上测试下载
curl -o /dev/null http://192.168.66.100:8000/# 1. 检查OpenVPN日志
sudo journalctl -u openvpn-server@server.service -f
# 2. 检查防火墙规则
sudo iptables -L -n -v
sudo ufw status verbose
# 3. 检查网络接口
ip link show
ip addr show
# 4. 检查路由表
route -n
ip route show table all
# 5. 检查NAT配置
sudo iptables -t nat -L -n -v
# 6. 验证证书
openssl verify -CAfile /etc/openvpn/server/ca.crt /etc/openvpn/server/server.crt
# 7. 测试端口连通性
nc -zv 120.48.170.222 1194# 编辑服务器配置
sudo nano /etc/openvpn/server/server.conf
# 添加性能优化参数:
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"
# 对于高延迟网络,调整以下参数:
keepalive 10 60
persist-tun
persist-key
# 重启服务
sudo systemctl restart openvpn-server@server.service# 1. 更改默认端口
# 编辑server.conf,修改port为其他端口(如1195)
# 2. 启用TLS加密
tls-server
tls-auth ta.key 0
# 3. 限制客户端数量
max-clients 10
# 4. 启用用户认证(可选)
# auth-user-pass-verify /etc/openvpn/checkpsw.sh via-file
# 5. 定期更新证书
# 设置证书有效期较短,定期更新解决方案:
检查云服务器防火墙是否开放1194/UDP端口
检查云服务商安全组规则
验证客户端配置文件中的服务器地址
解决方案:
确认客户端配置中推送了正确的路由
检查云服务器是否启用了IP转发
验证iptables NAT规则
解决方案:
调整MTU大小(尝试降低到1400)
启用压缩(comp-lzo)
调整加密算法(使用AES-128-CBC替代AES-256-CBC)
解决方案:
检查家庭网络主机的防火墙设置
验证家庭路由器是否允许VPN流量
检查目标主机是否在线
创建维护脚本方便管理:
#!/bin/
# openvpn-manager.sh
case "$1" in
status)
sudo systemctl status openvpn-server@server.service
;;
restart)
sudo systemctl restart openvpn-server@server.service
;;
logs)
sudo tail -f /var/log/openvpn.log
;;
clients)
sudo cat /var/log/openvpn-status.log
;;
new-client)
if [ -z "$2" ]; then
echo "Usage: $0 new-client CLIENT_NAME"
exit 1
fi
cd ~/easy-rsa
./easyrsa gen-req $2 nopass
./easyrsa sign-req client $2
cd ~/client-configs
./make_config.sh $2
echo "Client config created: ~/client-configs/$2.ovpn"
;;
*)
echo "Usage: $0 {status|restart|logs|clients|new-client}"
exit 1
;;
esac这个详细的配置方案应该能帮助你成功搭建OpenVPN环境,实现公司PC通过云服务器安全访问家庭网络的目标。如果在配置过程中遇到任何问题,请参考故障排除部分或检查相关日志文件。
提示:如遇链接失效,请在评论区留言反馈