我已将 OpenVPN 连接到特定应用程序 (A),端口为本地端口 (127.0.0.1:2727)。此 (A) 连接到我的主要网络。
但是每次VPN断开后,就无法再连接到(A),因为(A)连接了VPN的ip。
知道如何解决这个问题吗?我想在 VPN 断开连接后让 (A) 连接到特定网络(我的主网络)。我试过使用 ForceBindIP,但没有用。
答案1
总结:添加至神秘程序远程主机的明确路由(/32
)。
我看了看OpenVPN 手册,但目前尚不清楚它是否可以本地执行此操作(通过--route
)。为了安全起见,请使用带有--up
和的脚本/程序。需要注意的是,修改路由配置需要 root 权限,如果还指定了,则在运行--down
时您无需 root 权限。--down
--user
为了便于移植,--up
脚本/程序需要执行以下操作,具体取决于您的神秘程序的连接方式:
- 解决神秘程序远程IP地址(
$remote_addr
) - 确定网关(
$gateway
)到远程 IP 地址 – 这可以不可以成为默认网关 - 添加明确的路线,例如
ip route add $remote_addr via $gateway
这样,它就能正常工作了--redirect-gateway
。
脚本--down
/程序需要执行几乎相同的操作,除了必须删除路线。
编写 (Bash) 脚本时,问题实际上早在第 1 步就开始了。您只需要 IP 地址,不需要其他任何东西。类似的东西getent hosts
可以解决问题,但它更喜欢 IPv6 地址,这可能合适也可能不合适。其他工具(dig +short
等)不使用操作系统解析器,而是直接查询 DNS,这可能不是您想要的(想想/etc/hosts
)。
第二步在任何操作系统上都相对容易,ip route get
但 Windows 除外。在 Windows 上,您需要编写算法来自己找到最具体的匹配路线。
如果你觉得一切都静止不动(远程 IP 地址、下一跳 IP 地址),您还可以使用 OpenVPN 的--route
:
route 1.2.3.4 255.255.255.255 10.1.2.3
...1.2.3.4
神秘程序的远程主机在哪里,10.1.2.3
到达它的下一个路由跳数是多少。
另一个解决方案是不是使用--persist-tun
,这意味着当 OpenVPN 失去连接时,VPN 网络接口将完全关闭。但这有一个非常严重的影响:一旦连接中断,流量就会泄漏。