it-swarm.cn

将软件绑定到不同的网络接口

我有两个不同的网络接口,连接到2个网络。一个是eth0,另一个是wlan0。如何告诉软件仅使用特定接口?

基本上我希望Firefox使用eth0,因为它是大学局域网,我必须去内联网站点,另一个是打开互联网的wifi网络,我想将它绑定到Chrome。

我正在工作,我需要使用内联网。所以eth0是我的选择,但eth0是一个没有互联网接入的内部网(显然)。由于我想要上网,我已经连接到wlan0(大学wifi为学生)。

问题是如果我有两个连接有时浏览器使用eth0查找www.stackoverflow.com。所以我想指定一个浏览器只使用特定的界面。

36
dierre

您无法将客户端软件绑定到特定的网络接口,但您可以告诉内核您只想为某些IP地址使用一个网络接口而另一个用于其他所有IP地址。这称为“路由”,可以使用命令/sbin/route/sbin/ip进行配置。

如果我正确地阅读了您的问题,您希望使用接口eth0连接到Intranet IP地址,并使用接口wlan0连接到Internet。

如果运行命令ip route list,您应该看到如下输出(数字将不同,并且您还可以包含更多行):

$ ip route list
10.60.44.0/25 dev eth0  proto kernel  scope link  src 10.60.44.39  metric 1 
192.168.80.0/21 dev wlan0  proto kernel  scope link  src 192.168.84.122  metric 2 
[...]
default via 10.60.44.1 dev eth0  proto static 

前两行告诉您连接到接口eth0wlan0的网络:指向这些网络上的计算机的网络流量将通过相应的接口直接发送给它们。

最后一行告诉您“默认路由”是什么:如果您的计算机想要与未连接的网络上的计算机(例如,stackoverflow.com服务器)通信,它将通过eth0路由流量,通过主机重新分析10.60.44.1(称为“默认网关”)。

因此,要通过wlan0路由Internet流量,您应该确保ip route list输出中的最后一行读取如下内容:

default via A.B.C.D dev wlan0 proto static

其中A.B.C.D是无线局域网上网关的IP地址。如果输出不包含“dev wlan0”,则可以使用以下命令进行更改:

Sudo ip route change to default dev wlan0 via A.B.C.D

您可以通过两种方式为A.B.C.D找到正确的wlan0

  1. 查看目录/var/lib/dhcp3/:你应该找到一些dhclient-...-wlan0.lease文件。打开最近的一行并搜索其中包含字符串option router的行:该行的其余部分告诉您IP地址A.B.C.D

  2. 咨询您当地的网络管理员。 (无论如何,这可能是最好的事情。)

使用此配置,您应该能够:

  • 通过wlan0浏览互联网
  • 通过eth0浏览您的Intranet,假设它在一个网络上

如果您的Intranet跨越多个网络,那么您将需要为它们添加路由 - 这绝对需要您与本地网络管理员进行交互。 :-)

23
Riccardo Murri

“ip netns”创建网络命名空间。然后,您可以创建虚拟接口(ip link add ... veth)并将它们与名称空间相关联。

例如,命名空间可以配置为使用不同的路由(因此使用不同的接口)

然后你可以在那个命名空间中运行命令,它将使用创建的命名空间。“ip netns exec NAME cmd ...”

资料来源: http://manpages.ubuntu.com/manpages/saucy/en/man8/ip-netns.8.html

1
olivervbk