突然断开与特定 IP 端口的连接后如何重新连接 OpenVPN

突然断开与特定 IP 端口的连接后如何重新连接 OpenVPN

我已将 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脚本/程序需要执行以下操作,具体取决于您的神秘程序的连接方式:

  1. 解决神秘程序远程IP地址($remote_addr
  2. 确定网关($gateway)到远程 IP 地址 – 这可以不可以成为默认网关
  3. 添加明确的路线,例如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 网络接口将完全关闭。但这有一个非常严重的影响:一旦连接中断,流量就会泄漏。

相关内容