多网卡网络

多网卡网络

我有一台装有 4 个网络适配器的 Ubuntu 12.04 服务器。我需要将每个 NIC 用于单独的功能。以下是我的设置说明:

etho = 10.234.0.2 netmask = 255.255.255.252 gw = 10.234.0.1 This is on vlan 234
eth1 = 10.235.0.2 netmask = 255.255.255.252 gw = 10.235.0.1 This is on vlan 235
eth2 = 10.236.0.2 netmask = 255.255.255.252 gw = 10.236.0.1 This is on vlan 236
eth3 = 10.237.0.2 netmask = 255.255.255.252 gw = 10.237.0.1 This is on vlan 237

我需要能够将流量引导至各个 IP 地址,以便提供单独的 Web 服务。例如,10.235.0.2 是一个网站,10.236.0.2 是另一个网站,10.237.0.2 是第三个网站。第一个 IP 用于管理服务器。

我认为这个问题是一个路由问题,但我对 Linux 还不够熟悉,对路由功能的来龙去脉还没有完全理解。

以下是我的文件中的内容/etc/network/interfaces

auto lo
iface lo inet loopback

# WWW Management
auto eth0
iface eth0 inet static
address 10.234.0.2
netmask 255.255.255.252
gateway 10.234.0.1
nameseervers 10.230.1.103, 10.230.70.70

# WWW
auto eth1
iface eth1 inet static
address 10.235.0.2
netmask 255.255.255.252
gateway 10.235.0.1

# WTB
#auto eth2
#iface eth2 inet static
#address 10.236.0.2
#netmask 255.255.255.252
#gateway 10.236.0.1

# Moodle
#auto eth3
#iface eth3 inet static
#address 10.237.0.2
#netmask 255.255.255.252
#gateway 10.237.0.1

为了减轻混淆,我已经禁用了最后两个网络。

提前感谢所有的帮助、评论和建议。

答案1

在对 eth0 进行正常配置后,我返回并添加了 eth1 的配置。仅启用 eth0 后,路由表如下:

# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100

但是一旦我调出 eth1,默认路由语句的顺序就决定了始终使用哪个接口。如下所示,它恰好选择了 eth1 路由到 192.168.1.65 网关。

# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100

只有一个网关语句

第一个问题可能是额外的“via 192.168.1.65”默认路由。如果 /etc/network/interfaces 中的 eth1 定义有“gateway 192.168.1.65”语句,则会出现该问题。因此,删除任何额外的网关语句,然后弹出接口:

# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100

设置新的路由表

创建一个新的、单独的路由表,其中包含适用于从 eth1 流出的所有流量的默认路由。这里的表号并不重要;101 根本不是主路由表。使用 /etc/network/interfaces 中 eth1 配置上的“post-up”命令执行此操作。在 eth1 上仅添加一个 post-up;不要将其添加到任何 eth1: 子接口。

post-up ip route add default via 192.168.1.65 dev eth1 table 101

反弹 eth1。主路由表不变,如果 eth1 已启动,则表 101 将包含通过 192.168.1.65 的默认路由。

# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100

# ip route show table 101   (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100

# ip route show table 101
default via 192.168.1.65 dev eth1

新的路由规则

添加一条路由规则,使用表 101 为应该从 eth1 出去的数据包选择默认路由。

# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0:     from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default

将规则/etc/network/interfaces也添加到文件中:

post-up ip rule add from 192.168.1.64/27 lookup 101

现在确保添加清理功能以在接口关闭时删除路由和规则:

post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101

[针对 ubuntu 16.04+ 进行编辑] 如上所述这里从我根据此帮助进行的测试来看,ip route2 已经改变了其命令结构。为了使它正常工作,您必须稍微调整一下执行顺序man ip

up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65

否则,您将在 ifdown - ifup 命令之后看到一条错误消息 @ifdown 命令(标准消息,表示外围设备配置不正确),并且 @ifup 表 101 中没有路由。

相关内容