如何在不确定某个网卡 A 对应的网关的情况下,指定访问指定 IP 的流量都走网卡 A?

2020-03-11 16:58:04 +08:00
 uil330
1092 次点击
所在节点    问与答
4 条回复
uil330
2020-03-11 17:09:53 +08:00
工作需求,要树莓派装上 4G 模块,然后把程序 A 的数据通过 4G 模块传到某个指定的服务器。

而其他程序还有系统本身的数据都要通过 LAN 传到本地的服务器。LAN 无法访问互联网。

类似于这种构造:

远程服务器
|
| 本地服务器
| |
4G 模块 LAN
| |
|-------|-----------|
树莓派


但是如果一开 LAN 的话程序 A 的数据默认通过 LAN 传输,导致无法连接上远程服务器。

虽然知道 route 命令能指定 ip 走某个网卡,但是如果不设定网关的话结果还是传不出去:

类似于:
这个不行 sudo route delete -host 119.63.197.151 dev enp2s0
但是这个行 sudo route delete -host 119.63.197.151 gw 172.16.6.5 dev enp2s0

然而 4g 模块的网关是拨号后才定了,而且由于那个模块有问题经常重启,每次重启后虽然能自动获取 ip,但是网关就变了。

请问有什么好的方法?
ysc3839
2020-03-11 19:51:58 +08:00
我只知道 OpenWrt 上面有个脚本叫 mwan3,可以配置不同目标 IP 走不同的接口,不需要手动指定网关地址,接口断开再连接也能工作。
还有个办法是修改程序 A 的代码,绑定某个网络接口。
SGTeam
2021-03-22 23:28:43 +08:00
试试? ForceBindIP-将任何 Windows 应用程序绑定到特定界面

ForceBindIP 是一个免费的 Windows 应用程序,它将自己注入到另一个应用程序中,并更改某些 Windows 套接字调用的方式,从而允许您强制另一个应用程序使用特定的网络接口 / IP 地址。如果您在具有多个接口的环境中,并且您的应用程序没有用于绑定到特定接口的此类选项,则此选项很有用。

经过测试可与 ForceBindIP 配合使用的某些程序包括 DC ++,uTorrent,Quake II,Quake III,Diablo II,StarCraft,Internet Explorer,Mozilla Firefox,Google Earth,步兵,Real Player,Unreal Tournament 2004 (需要-i ),Outlook 2000 (需要-i )。无效的程序包括 GetRight (反调试器 /分叉技术),WinCVS (分叉 cvs.exe )

您可以简单地创建快捷方式,使用 IP 地址和程序作为参数,使用 ForceBindIP 启动应用程序:
uil330
2021-04-04 13:31:06 +08:00
解决了,给大家一个思路:

我是写了一个脚本,检测网卡是否有网线插入,如果插入后根据当前网段,在路由表里面添加指定 ip 走指定网卡的命令

虽然不是最优解,但是因为够用了所以就这样子了

如果有更好的方法欢迎共享

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/651911

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX