如何更改 OpenVPN 客户端默认路由的度量

如何更改 OpenVPN 客户端默认路由的度量

我正在从 Ubuntu 16.04 连接到 OpenVPN 服务器,使用 OpenVPN 2.3.10 从命令行使用sudo openvpn --config client.conf,或者作为服务使用sudo service openvpn@client start

我希望生成的连接被用作最低优先级,因此我尝试将其创建的默认路由的度量设置为 1000,但我不确定如何实现这一点。OpenVPN 手册状态:

--route-metric m
指定与 一起使用的默认度量 m --route

我希望添加route-metric 1000到我的配置文件中会影响 OpenVPN 自动创建的默认路由,但是我必须假设它仅与选项一起使用--route,并且所讨论的路由仍然具有 0 的度量:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         x.x.x.x         128.0.0.0       UG    0      0        0 tun0

我发现有三种方法可以解决这个问题。我该如何实现其中一种呢?

选项1:告诉 OpenVPN 在创建默认路由时使用不同的度量标准

选项 2:首先防止创建路线,然后使用 该选项提供的变量--route创建我自己的路线(我认为)vpn_gateway

选项 3:使用选项修改默认路由--route。这需要了解路由的所有参数,因此可能需要编写一些脚本。

答案1

看起来像选项 2;阻止创建默认路由,可以使用选项来实现route-nopull

--route-nopull

  • --client与或一起使用时--pull,接受服务器推送的选项,但路由、block-outside-dns 和 dhcp 选项(如 DNS 服务器)除外。

  • 在客户端上使用时,此选项可有效禁止服务器向客户端的路由表添加路由,但请注意,此选项仍允许服务器设置客户端的 TUN/TAP 接口的 TCP/IP 属性。

答案2

我正在尝试实现您提到的类似目标:我想使用代理服务器控制哪些应用程序使用 VPN(而不仅仅是 VPN)接口。

首先,请注意 openvpn 正在使用一种称为以下的肮脏黑客手段def1

# "redirect-gateway def1" with metric:
route 0.0.0.0 128.0.0.0 vpn_gateway 1200

route -n:
0.0.0.0         10.0.2.1        128.0.0.0       UG    1200   0        0 tap1
0.0.0.0         192.168.50.1    0.0.0.0         UG    0      0        0 wlp0s20f3

内核不会关心第一个路由度量,它只会单独采用第一个路由,因为它的 genmask (128.0.0.0) 比第二个路由的 genmask (0.0.0.0) 更严格。严格的 genmask 是 openvpn 使用指令强制其路由的方式def1

我的解决方案如下:

route 0.0.0.0 0.0.0.0 vpn_gateway 1200

route -n:
0.0.0.0         192.168.50.1    0.0.0.0         UG    0      0        0 wlp0s20f3
0.0.0.0         10.0.2.1        0.0.0.0         UG    1200   0        0 tap1

我没有使用route-nopull其他东西,只是在每个客户端 openvpn 配置中使用了这个额外的路由指令。我没有尝试使用服务器配置来推送此路由,因为这取决于客户端可以为不同的 VPN 链接应用哪些指标。某些 VPN 链接可能对当前客户端具有优先权,因为它会更快。

相关内容