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

Kam*_*ami 55 networking macos

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

小智 24

诀窍是调整路由表(不依赖于目标端口或源应用程序,但依赖于目标主机)。这假设您使用的是 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
Run Code Online (Sandbox Code Playgroud)

某些版本的路由可能需要在地址和下一跳之间使用“gw”关键字。如果你想在下一跳上建立一条完整的网络路由,只需在目的地的 CIDR 表示法中添加一个网络掩码,比如

sudo route add 192.168.0.0/24 6.7.8.9
Run Code Online (Sandbox Code Playgroud)

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

netstat -nrl
or
ip route list
Run Code Online (Sandbox Code Playgroud)

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

  • 这真的不是答案吧?问题是如何强制应用程序而不是网站。例如,我希望 Safari 通过 VPN(ppp0) 但 Firefox 通过 en0 而不管他们访问什么站点?这就是问题所在。 (23认同)
  • OP希望根据应用程序选择网络接口。此答案显示了如何根据目标主机进行选择。 (5认同)
  • @gman:关于这个答案的任何内容都不是特定于网站的。 (2认同)
  • 根据上面的内容,这并没有回答如何将特定应用程序锁定到特定 NIC 的问题。 (2认同)

Sax*_*ddy 7

如果您只想同时激活两个 NIC,您可以通过选择网络设备列表下方的齿轮在系统偏好设置/网络中设置服务顺序。拖放您希望它们的顺序。

例如,我的 MBP 上的以太和 WiFi 始终处于活动状态,以太设置在 Wi-Fi 之上。由于我在工作中使用 Ether,因此我使用代理设置设置了该 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。


小智 5

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

  1. 我安装了SquidMan

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

    tcp_outgoing_address x.x.x.x
    
    Run Code Online (Sandbox Code Playgroud)
  3. 启动 SquidMan 并配置您的应用程序以将其用作代理。

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


小智 1

您可能需要使用低级 IO 控制函数 (ioctl)。尤其:

ioctl( socket, SIOCGIFADDR, ... ); // Get network interface address
Run Code Online (Sandbox Code Playgroud)

ioctl( socket, SIOCSIFADDR, ... ); // Set network interface address
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此手册页。