我有两个不同的网络接口,连接到 2 个网络。一个是 eth0,另一个是 wlan0。如何告诉软件仅使用特定接口?
基本上,我希望 Firefox 使用 eth0,因为它是大学局域网,我必须访问内联网站点,另一个是开放给互联网的 wifi 网络,我想将其绑定到 Chrome。
我在工作,需要使用内联网。因此我选择 eth0,但 eth0 是内联网,无法访问互联网(显然如此)。由于我想要访问互联网,因此我连接到 wlan0(学生使用的大学 wifi)。
问题是,如果我同时连接两个网络,浏览器有时会使用 eth0 查找 www.stackoverflow.com。所以我想指定浏览器仅使用特定接口。
答案1
您无法将客户端软件绑定到特定的网络接口,但您可以告诉内核,您只想将一个网络接口用于某些 IP 地址,将另一个网络接口用于其他所有 IP 地址。这称为“路由”,可以使用命令
/sbin/route
和进行配置/sbin/ip
。
如果我正确理解了你的问题,你想使用接口连接到内联网 IP 地址eth0
,并使用接口连接到互联网
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
前两行告诉您有关连接到接口的网络eth0
以及wlan0
:指向这些网络上的计算机的网络流量将通过相应的接口直接发送给它们。
最后一行告诉您什么是“默认路由”:如果您的计算机想要与未连接到的网络上(例如,stackoverflow.com 服务器)的计算机通信,它将通过路由流量,通过主机(称为“默认网关”)eth0
实现。10.60.44.1
因此,为了路由互联网流量,wlan0
您应该确保输出中的最后一行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
查看目录
/var/lib/dhcp3/
:您应该会找到一些dhclient-...-wlan0.lease
文件。打开最近的一个文件并搜索包含字符串的行option router
:该行的其余部分会告诉您 IP 地址A.B.C.D
。询问当地网络管理员。(无论如何,这可能是最好的办法。)
通过此配置,您应该能够:
- 通过浏览互联网
wlan0
- 通过浏览您的内部网
eth0
,只要它在单个网络上。
如果您的内部网跨多个网络,那么您将需要为它们添加路由 - 这绝对需要您与本地网络管理员进行交互。:-)
答案2
“ip netns” 创建网络命名空间。然后,您可以创建虚拟接口 (ip link add...veth) 并将它们关联到命名空间。
例如,可以将命名空间配置为使用不同的路由(从而使用不同的接口)
然后您可以在该命名空间中运行命令,该命令将使用创建的命名空间......“ip netns exec NAME cmd...”
来源: http://manpages.ubuntu.com/manpages/saucy/en/man8/ip-netns.8.html