强制应用程序使用特定的网络接口

强制应用程序使用特定的网络接口

我使用多个网络接口(LAN 和无线),并且我注意到有一种方法可以更改首选接口的顺序。如何使用有线网络(安全地)工作、查看电子邮件等,并使用无线 VLAN 访问其他内容(否则会被端口和 Websense 阻止)?

答案1

诀窍是调整路由表(不依赖于目标端口或源应用程序,但依赖于目标主机)。这假设您使用的是 Linux 或 OS X(如标签所示)。

假设您的默认网关是 1.2.3.4,并且您有一个可以在 6.7.8.9 上路由流量的 vpn。如果您希望邮件流量通过 6.7.8.9 路由,只需执行

sudo route add mail.myserver.com 6.7.8.9

某些版本的路由可能需要在地址和下一跳之间添加“gw”关键字。如果您想通过该下一跳创建整个网络路由,只需为目的地添加 CIDR 表示法中的网络掩码,例如

sudo route add 192.168.0.0/24 6.7.8.9

如果要查看现有路由表,请使用

netstat -nrl
or
ip route list

如果您使用的是 Windows,“net route”将带您完成大部分操作,但语法完全不同。

答案2

如果您只想同时激活两个 NIC,则可以在“系统偏好设置/网络”中设置服务顺序,方法是选择网络设备列表下方的齿轮。拖放您想要的顺序。

例如,我的 MBP 上始终启用以太网和 WiFi,并将以太网设置为高于 Wi-Fi。由于我在工作中使用以太网,因此我使用代理设置设置了该 NIC,而 Wi-Fi 则没有。当我回家时,无需调整任何设置。您也可以使用 来从终端执行此操作/usr/bin/networksetup -ordernetworkservices

但是,为了让活动和应用程序都使用非默认设置,我很幸运地按照@Andor 的建议做了一些更简单的调整。如果我希望应用程序不使用 Ether,我会将应用程序的代理设置设置为我的 Wi-Fi 适配器的 IP 地址。它将使用该接口退出,从而绕过公司代理和监控服务器。因此,如果 Ether 的地址为 1.2.3.4,并且在服务顺序中位于 Wi-Fi(5.6.7.8)之前,我的应用程序代理为 5.6.7.8。

答案3

对于 Mac,我使用一个简单的解决方案。它实际上是 @Andor 解决方案的实现。安装代理并配置您的应用程序以使用它:

  1. 我安装了鱿鱼人

  2. 在配置中添加以下行。您需要指定将用于私人应用程序的 IP,而不是x.x.x.x

    tcp_outgoing_address x.x.x.x
    
  3. 启动 SquidMan 并配置您的应用程序以将其用作代理。

我花了一个小时在不同的页面上找到这些信息,所以我希望它能帮助其他人更快地完成它。

答案4

您可能需要使用低级 IO 控制函数 (ioctl)。特别是:

ioctl( socket, SIOCGIFADDR, ... ); // Get network interface address

ioctl( socket, SIOCSIFADDR, ... ); // Set network interface address

本手册页更多细节。

相关内容