介绍
我住在泰国。我们这里与欧洲的联系有点奇怪。
有时连接会直接到达欧洲(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 个接口:
- eth0(与我的 ISP 的直接连接)。
- tun0(我的 VPN 连接)。
当网关转发新连接时,是否有办法“暂停”它几秒钟,并让树莓派通过两个接口 ping 目标?一旦收到 ping,就会在 IP 表中创建一个新的静态路由来选择传出接口?
假设我尝试连接到 facebook.com,网关将首先通过 tun0(vpn)对其进行 ping 操作,并看到 300ms,然后通过直接 ISP 连接(eth0),它将看到 30ms。因此,它将通过 eth0 为此目的地创建静态路由。
我知道这可能会减慢初始连接速度,但最终可以保证更快的速度。
可能的解决方案?
使用 NFQUEUE 和外部 L7 脚本?