起止时间:11/2025 ~ 11/2025
技术栈:[Linux, Ubuntu, RackNerd, OpenVPN, Forward Proxy]
0. 前置条件 1 2 3 4 5 • 服务器(Ubuntu) • 公网 IP:(你的ip) • 本地电脑已安装 OpenVPN 客户端 要实现: 本地电脑流量 → OpenVPN → 服务器 → 访问互联网
1. 在服务器安装 OpenVPN 与 Easy-RSA 1 2 3 4 在 Ubuntu 上执行: sudo apt updatesudo apt install openvpn easy-rsa -y
2. 创建 OpenVPN CA(证书授权)目录 1 2 make-cadir ~/openvpn-ca cd ~/openvpn-ca
3. 配置 CA(证书生成参数) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 编辑 vars 文件: nano vars 加入(或修改)以下内容: set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "California" set_var EASYRSA_REQ_CITY "LosAngeles" set_var EASYRSA_REQ_ORG "OpenVPN" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Server" 保存后: ⭐ 正确的下一步操作(基于你现在的状态) 请复制下面命令执行: 1)初始化 PKI ./easyrsa init-pki 2)生成 CA(根证书) ./easyrsa build-ca 它会问你: • 输入 CA 的密码(随便一个你记得住的 这个密码会输入两次,在执行./easyrsa sign-req server server 会再次输入一次 )这个密码客户端创建时会用到。 • 输入证书的 Common Name(直接按回车,用默认就行) 3)生成服务器证书 ./easyrsa gen-req server nopass ./easyrsa sign-req server server 系统会问你是否确认签名: 输入:yes 输入密码:
4. 生成 Diffie-Hellman(DH)参数 1 2 3 4 执行: ./easyrsa gen-dh 这一步可能要几十秒。
5. 生成 HMAC TLS-auth key 1 openvpn --genkey --secret ta.key
6. 将证书和密钥全部复制到 OpenVPN 配置目录 1 2 3 4 5 sudo cp pki/ca.crt /etc/openvpn/sudo cp pki/issued/server.crt /etc/openvpn/sudo cp pki/private/server.key /etc/openvpn/sudo cp pki/dh.pem /etc/openvpn/dh2048.pemsudo cp ta.key /etc/openvpn/
7. 创建 OpenVPN 服务端配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 sudo nano /etc/openvpn/server.conf⭐ 完整 server.conf port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem tls-auth ta.key 0 tls-version-min 1.2 cipher AES-256-GCM auth SHA256 server 10.8.0.0 255.255.255.0 topology subnet push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 8.8.8.8" keepalive 10 120 persist-key persist-tun user nobody group nogroup status openvpn-status.log verb 3 ⭐ 保存步骤 在 nano 中按: Ctrl + O (写入) 回车 Ctrl + X (退出) 配置说明(不用修改,了解即可) 配置 作用 port 1194 OpenVPN 默认端口 proto udp 最佳性能的协议 dev tun 使用 TUN 虚拟网络 server 10.8.0.0/24 VPN 内部网段 push "redirect-gateway def1" push DNS 客户端 DNS 走 VPN 服务器 tls-auth ta.key 0 增强安全,拒绝不明连接 cipher AES-256-GCM 高级加密 user nobody 降权运行,更安全
8. 启动 OpenVPN 服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 sudo systemctl start openvpn@server2️⃣ 查看服务状态 sudo systemctl status openvpn@server如果看见: Active: active (running) 那就成功运行了!🎉 systemctl status openvpn@server 的查看模式(分页显示器), 这个界面是由 less 或 pager 控制的。 要退出它非常简单: 👉 按键: q 只要按下字母 q,就能退出分页查看状态,回到命令行。 🔥 常见的分页控制命令(你以后会用到) 操作 按键 退出(最重要) q 向下翻一页 space 向上翻一页 b 向下移动一行 j 或 ↓ 向上移动一行 k 或 ↑ 搜索文本 / 然后输入关键词 搜索下一个匹配 n
9. 生成客户端证书 1 2 3 4 5 cd ~/openvpn-ca./easyrsa build-client-full 证书名 nopass Yes 密码
10. 创建 证书名.ovpn 客户端配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 nano 证书名.ovpn 在文件中粘贴以下内容👇: ⭐ 完整客户端配置(可直接粘贴) client dev tun proto udp remote 服务器ip 自定义端口 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-GCM auth SHA256 key-direction 1 <ca> 【这里放你刚才的 ca.crt 内容】 </ca> <cert> 【这里放你的 证书名.crt 内容】 </cert> <key> 【这里放你的 证书名.key 内容】 </key> <tls-auth> 【这里放你的 ta.key 内容】 </tls-auth> 查看 CA: cat /root/openvpn-ca/pki/ca.crt查看 客户端证书: cat /root/openvpn-ca/pki/issued/证书名.crt查看 客户端私钥: cat /root/openvpn-ca/pki/private/证书名.key查看 ta.key: cat /etc/openvpn/ta.key
11. 拓展_重新生成密钥 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1️⃣ 重新生成客户端私钥 cd ~/openvpn-ca./easyrsa revoke 证书名 ./easyrsa gen-crl 2️⃣ 删除旧密钥& 旧密钥(如果存在) 执行前可以确认一下文件是否存在: ls pki/issued/ls pki/private/然后删除它们: rm -f pki/issued/证书名.crtrm -f pki/private/证书名.keyrm -f pki/reqs/证书名.req(-f 强制删除,不会报错) 3️⃣ 重新生成客户端证书 ./easyrsa build-client-full 证书名 nopass
12. 处理无法上网 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 可以成功连接 VPN,但连接后无法上网,这个问题 不是客户端的问题,而是 服务器端 OpenVPN 转发 / NAT / 路由没有正确配置。 这是 OpenVPN 服务器端最常见的问题之一。 ✅ 状况总结 • OpenVPN Connect 显示 CONNECTED(已成功连接) • 有流量进出(图表有波动) • 但是客户端 无法访问任何网站,等于断网 • 说明: VPN 服务器没有正确转发 / NAT 出站流量 或 防火墙未允许转发的数据包 马上修复方法 ✅ 1. 确认服务器开启 IP 转发(最重要) SSH 到你的 VPN 服务器,执行: sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' 然后永久开启: sudo nano /etc/sysctl.conf找到并修改: net.ipv4.ip_forward=1 保存: ctrl+o,回车,ctrl+x 加载配置: sudo sysctl -p✅ 2. 配置 NAT RackNerd 默认不会自动 NAT,所以必须手动加 Masquerade。 执行: sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE非常重要:保存规则(否则重启就没了) sudo apt install iptables-persistent -ysudo netfilter-persistent save✅ 3. 确认 OpenVPN server.conf 里有这两行 打开配置: sudo nano /etc/openvpn/server.conf确保有: push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 1.1.1.1" 如果没有 → 添加进去。 保存后重启 OpenVPN: sudo systemctl restart openvpn@server✅ 4. 检查是否使用了正确的网卡名称(重要) RackNerd 的网卡通常是: • eth0 • 或 ens160 • 或 venet0(OpenVZ 环境) 你的 NAT 命令不用指定网卡也行(MASQUERADE 会自动匹配) 但如果你服务器是 OpenVZ,需要改成: sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE可以执行这个命令看看网卡名: ip addr 🔥 你测试能否成功的方法 ① 打开 CMD 执行: curl ifconfig.me 如果显示: 服务器Ip 说明访问已经走 VPN。 ② 访问 https://www.google.com 能打开 → 成功 不能打开 → NAT 或 DNS 还没设置好