Linux ip 路由(接口)选择基于对目的地的 ping ?

Linux ip 路由(接口)选择基于对目的地的 ping ?

介绍

我住在泰国。我们这里与欧洲的联系有点奇怪。

有时连接会直接到达欧洲(ping 时间为 180-250 毫秒),因为我的 ISP 有一条 100G 的直接链路,可直达法国的对等交换。但有时同一 ISP 会选择一条更长的路线,即新加坡-日本-美国(这会导致 ping 时间为 300-400 毫秒,数据包丢失率高达 30-50%)。两种情况下的目的地都相同,每次建立新连接时都会进行切换。联系 ISP NOC 未获任何结果。

我通过在家中使用专用的 Raspberry 连接到欧洲的 VPN 服务器(距离法国的对等交换器 (它与我在泰国的 ISP 有一条直接的 100G 线路))解决了这个问题。

这样我的 ISP 就会自动使用最快的路由 100% 连接到该 VPN。然后,当我需要保证快速连接到欧洲时,我会让我 LAN 上的设备使用该 Raspberry 作为网关(您可以阅读这里如果你想看看我是如何做到的)

问题

Facebook、Youtube 以及泰国的所有其他本地服务都变得很慢,因为我的 100% 连接都是通过欧洲的 VPN 路由的。

问题

假设我的树莓派网关有 2 个接口:

  1. eth0(与我的 ISP 的直接连接)。
  2. tun0(我的 VPN 连接)。

当网关转发新连接时,是否有办法“暂停”它几秒钟,并让树莓派通过两个接口 ping 目标?一旦收到 ping,就会在 IP 表中创建一个新的静态路由来选择传出接口?

假设我尝试连接到 facebook.com,网关将首先通过 tun0(vpn)对其进行 ping 操作,并看到 300ms,然后通过直接 ISP 连接(eth0),它将看到 30ms。因此,它将通过 eth0 为此目的地创建静态路由。

我知道这可能会减慢初始连接速度,但最终可以保证更快的速度。

可能的解决方案?

使用 NFQUEUE 和外部 L7 脚本?

谢谢您阅读此篇。

相关内容