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


48

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

Answers:


22

诀窍是调整路由表(不依赖于目标端口或源应用程序,但依赖于目标主机)。假设您使用的是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,则“网络路由”将为您提供大部分帮助,但是语法完全不同。


17
这不是真的答案吗?问题是如何强制应用而不是网站。例如,我希望Safari通过VPN(ppp0)进行访问,但是无论他们访问哪个站点,Firefox都通过en0访问?这就是问题所在。
gman 2013年

2
@gman:关于此答案的内容仅针对网站。
与莫妮卡(Monica)进行的轻度比赛

3
OP希望根据应用程序选择网络接口。该答案显示了如何根据目标主机进行选择。
Bennett McElwee

我不会对此投票(这是另一个问题的很好的建议),但我当然也不会对此投票(出于@gman和@ bennett-mcelwee所述的原因)。
ratskin

上面没有回答如何将特定应用程序锁定到特定NIC的问题。
catchdave

6

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

例如,我的MBP上的Ether和WiFi始终处于活动状态,而Ether设置为Wi-Fi以上。由于我在工作中使用Ether,因此我使用代理设置设置了该NIC,而没有使用Wi-Fi设置了该NIC。当我回家时,无需调整任何设置。您也可以从终端使用进行此操作/usr/bin/networksetup -ordernetworkservices

但是对于同时使用应用程序和非默认应用程序的情况,我很幸运,可以轻松使用@Andor的建议。如果我希望应用程序在我的情况下不使用以太币,请将该应用程序的代理设置设置为我的Wi-Fi适配器的IP地址。它将使用该接口退出,并以这种方式绕过公司代理和监视服务器。因此,如果以太的地址为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
    
  3. 启动SquidMan并配置您的应用程序以将其用作代理。

我花了一个小时在不同的页面上找到此信息,所以希望它可以帮助其他人更快地进行操作。


在Windows上应该可以正常工作,并且似乎是唯一的优雅解决方案!
TJJ'17年

1

您可能需要使用底层IO控制功能(ioctl)。尤其是:

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

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

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


1

问题是您将有多个通往网络连接的网关,这有点难以管理...

一些与服务器或网络相关的unix和linux工具通常具有一个称为“接口”的标志,您可以在其中告诉您要使用哪个接口,例如在tcpdump中:

tcpdump -i eth0

但是,正如我认为您在询问路由标准台式机软件一样,这变得更加困难...

无论如何,我都可以告诉您一个窍门...解决该问题的常用方法是使用代理,并且只有一个网关。如今,几乎所有使用Internet的软件都具有用于配置代理的选项,因此您可以通过以下任何一种方式来进行配置:

1.-在您网络的“不安全”(我的意思是,不实施策略)部分上设置代理,并将您的软件指向该代理。

2.-将SSH服务器设置在另一个“不安全”的地方,例如您的家庭或Internet上的专用服务器,并通过SSH具有的特殊功能打开连接,该功能可以创建袜子代理服务器:

ssh -D 1234 user@host

这样会在您的计算机上创建一个端口为“ 1234”的袜子代理服务器,该服务器将使用您的“用户”连接到您的“主机”,并通过您的“主机”具有的连接进入Internet ...然后,在本地软件上,只需打开代理配置工具,然后指向localhost:1234。

避免公司互联网政策的好窍门:P

:D


1

我在虚拟机中运行我的业务应用程序。我按照上面的说明将WiFi设置为首选连接,然后将虚拟机配置为将以太网端口用作“桥接”适配器。

现在,虚拟机内部运行的所有内容都将硬链接到以太网端口。只要我连接了WiFi连接,WiFi是所有其他应用程序(虚拟机外部)的首选连接。

我相信存在可以用来强制将应用程序绑定到特定以太网端口的实用程序,但尚未针对MacOS进行过研究。

前面提到的路由方法对于“外行人员”而言有些复杂,但似乎也是一种可行的方法,尤其是当您反复在连接上获得相同的IP地址时。


0

即使这个问题是针对OSX的,我仍将在Windows 7 64位版本上保留以下内容。这个问题是在强制应用程序通过特定适配器进行搜索时的最高结果之一,因此以下内容可能对其他人有用。

http://www.howtogeek.com/117890/how-to-force-an-application-to-use-a-specific-network-card/

上面的指南使用了一个名为ForceBindIp的实用程序,该实用程序被宣传为可以工作,Windows NT/2000/XP/2003 但我没有让它在Windows 7-64位上工作的问题。

另外,Windows 7(x64)上ForceBindIP的问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.