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

die*_*rre 42 networking

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

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

我正在工作,我需要使用内联网。所以 eth0 是我的选择,但 eth0 是没有互联网访问权限的内部网(显然)。因为我想要上网,所以我连接到 wlan0(学生的大学 wifi)。

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

Ric*_*rri 25

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

如果我正确阅读了您的问题,您想使用 interface 连接到 Intranet IP 地址并使用 interface 连接到eth0Internet wlan0

如果运行该命令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 
Run Code Online (Sandbox Code Playgroud)

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

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

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

default via A.B.C.D dev wlan0 proto static
Run Code Online (Sandbox Code Playgroud)

哪里A.B.C.D是无线局域网网关的 IP 地址。如果输出不包含“dev wlan0”,您可以使用以下命令更改它:

sudo ip route change to default dev wlan0 via A.B.C.D
Run Code Online (Sandbox Code Playgroud)

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

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

  2. 询问您的本地网络管理员。(无论如何,这可能是最好的做法。)

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

  • 通过浏览互联网 wlan0
  • 浏览您的 Intranet eth0前提是它位于单个网络上

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