您想在 Linux 上安装 OpenVPN 作为客户端,并将特定路由通过 VPN 还是通过普通路由进行路由?
本指南将以实用且技术性强的步骤,引导您如何在主流 Linux 发行版上配置 OpenVPN 客户端。我们将提供示例文件、用于管理路由的启动/关闭脚本、拆分隧道和 IP 绕过方法,以及用户名/密码身份验证技巧。.
先决条件
开始之前,请确保您已准备好以下物品:
- Linux系统(Ubuntu/Debian/CentOS/Fedora/Alma)
- 关闭 OpenVPN 已安装
- 服务器配置文件或文件 .ovpn 来自 VPN 提供商
- 组合身份验证(用户名/密码 + 证书)时的用户名/密码
OpenVPN 安装
常用发行版的安装命令:
sudo apt update && sudo apt install openvpn
sudo dnf install openvpn
基本设置(手动执行)
如果文件 client.ovpn 如果已经安装了,请使用以下命令立即运行:
sudo openvpn --config client.ovpn如果服务器使用用户名/密码,而您不想每次都输入,请创建一个凭据文件:
sudo tee /etc/openvpn/credentials <<'EOF'
myuser
mypassword
EOF
sudo chmod 600 /etc/openvpn/credentials在文件中 .ovpn 必须存在以下行或添加以下行:
auth-user-pass /etc/openvpn/credentials安全提示: 从 auth-nocache 用于防止 OpenVPN 将密码缓存到内存中:
auth-nocachechmod 600 使用基于证书的身份验证(客户端证书)和 tls-crypt/tls-auth 来提高安全性。.
默认路由控制:默认服务器行为
路由的默认行为通常由服务器决定:
- 如果服务器
重定向网关 def1如果你按下按钮,你的所有流量都将通过 VPN(全隧道)传输。. - 要阻止服务器接受默认路由,您可以使用
路线-无拉动然后手动添加所需的路由。.
方法一——仅通过 VPN 发送部分 IP 地址(拆分隧道)
如果您只想通过 VPN 发送特定地址,请使用 路线-无拉动 在文件中 client.ovpn 使用并添加所需的路线。.
client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
route-nopull
route 203.0.113.45 255.255.255.255
route 198.51.100.0 255.255.255.0解释: 和 路线-无拉动 服务器不接受任何路由,您只能使用现有线路。 路线 您可以通过 VPN 路由特定目的地。.
方法二——所有流量都通过 VPN,但少数特定 IP 地址走正常路径(绕过)
当服务器 重定向网关 def1 如果您希望某些特定地址通过默认(互联网)路由进行推送,则需要保存主网关并重写旁路路由。.
A) 连接前请保存原始网关
连接前获取默认网关和设备的示例命令:
GW=$(ip route show default | awk '/default/ {print $3}')
DEV=$(ip route show default | awk '/default/ {print $5}')上升 tun0重新添加您想要通过网关绕过的 IP 地址:
sudo ip route add 203.0.113.0/24 via $GW dev $DEV
sudo ip route add 8.8.8.8/32 via $GW dev $DEVb) 使用上下脚本实现自动化
在 client.ovpn 添加以下代码行以运行脚本:
script-security 2
up /etc/openvpn/client-up.sh
down /etc/openvpn/client-down.sh例子 /etc/openvpn/client-up.sh:
#!/bin/bash
echo "$(ip route show default | awk '/default/ {print $3, $5}')" > /var/run/openvpn.origgw
GW=$(awk '{print $1}' /var/run/openvpn.origgw)
DEV=$(awk '{print $2}' /var/run/openvpn.origgw)
ip route add 8.8.8.8/32 via $GW dev $DEV
ip route add 203.0.113.45/32 via $GW dev $DEV
exit 0例子 /etc/openvpn/client-down.sh:
#!/bin/bash
GW=$(awk '{print $1}' /var/run/openvpn.origgw)
DEV=$(awk '{print $2}' /var/run/openvpn.origgw)
ip route del 8.8.8.8/32 via $GW dev $DEV || true
ip route del 203.0.113.45/32 via $GW dev $DEV || true
rm -f /var/run/openvpn.origgw
exit 0别忘了运行脚本:
sudo chmod +x /etc/openvpn/client-up.sh /etc/openvpn/client-down.sh
方法三——基于策略的路由
您可以使用基于策略的路由将特定来源的流量定向到 VPN。.
echo "200 vpnroute" | sudo tee -a /etc/iproute2/rt_tables
sudo ip rule add from 10.0.0.5/32 lookup vpnroute
sudo ip route add default dev tun0 table vpnroute查找信息 tun0 以及虚拟网关:
ip -4 addr show dev tun0
ip route show dev tun0
正在使用 systemd(自动启动)连接
对于路径中的配置文件 /etc/openvpn/client/ 您可以运行 systemd 单元:
sudo systemctl start openvpn-client@client
sudo systemctl enable openvpn-client@client
sudo journalctl -u openvpn-client@client -f
DNS 和名称解析问题
如果 DNS 由服务器推送,某些发行版需要脚本。 更新解析配置 或与……协调 systemd-resolved 你有。.
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf在系统中 systemd-resolved 它们可能需要额外的配置。.
完整的 client.ovpn 示例(示例)
client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
auth-user-pass /etc/openvpn/credentials
auth-nocache
route-nopull
route 203.0.113.45 255.255.255.255
route 198.51.100.0 255.255.255.0
script-security 2
up /etc/openvpn/client-up.sh
down /etc/openvpn/client-down.sh
安全和操作提示
- 使用以下命令创建凭据文件
chmod 600保护。. - 从客户端证书和
tls-auth/tls-crypt用于防止简单的拒绝服务攻击。. - 从 auth-nocache 用于避免将密码缓存在内存中。.
- 保持 OpenVPN 更新,并使用现代的加密/哈希算法,例如
AES-256-GCM或者恰恰20使用。. - 监控日志并使用 systemd 和 logrotate 来轮换日志。.
对于需要最低延迟的环境(交易员/游戏玩家),使用近距离位置或拆分隧道技术,仅路由维持 ping 值和稳定性所需的服务。.
修复常见错误
- 连接未建立:请检查防火墙(ufw/iptables/安全组)中的端口和协议。.
- DNS 无法正常工作:来自
更新解析配置或手动调节/etc/resolv.conf使用。. - 路线未添加:请确保
脚本安全 2它已启用,脚本可执行。. - 互联网连接中断后:服务器可能推送了默认路由;请使用绕过或路由不拉取方法。.
比较不同类型用户的应用和技巧
- 交易员: 需要良好的网络延迟和稳定性;使用距离较近的位置,如果可能的话,仅使用分流隧道连接到交易服务器。.
- 游戏玩家: 游戏流量通常应该走最短路径;全隧道可能会增加延迟,所以只路由游戏服务器或使用附近的服务器。.
- 网站管理员/DevOps: 建议在安装了 systemd 的服务器上运行 OpenVPN 客户端,并对特定服务使用基于策略的路由。.
- 人工智能/渲染: 对于大数据传输,全隧道和高带宽服务器更合适。.
总结与结论
要在 Linux 上运行 OpenVPN 客户端,通常需要该文件。 .ovpn 此外 auth-user-pass 如果需要的话 路线-无拉动 对于拆分隧道来说,这已经足够了。要在全隧道模式下绕过某些 IP 地址,请保留之前的网关并添加相应的路由。对于更复杂的行为,请使用基于策略的路由。.









