双网卡不工作

双网卡不工作

我正在运行带有两个板载 NIC 的 Ubuntu Server 16.04。Ubuntu 可以看到这两个卡,但 eth0 和 eth1 都只能从一个物理接口传递流量,尽管它们是单独配置的(我认为)。信息如下:

lshw -C network
*-network
       description: Ethernet interface
       product: 82579LM Gigabit Network Connection
       vendor: Intel Corporation
       physical id: 19
       bus info: pci@0000:00:19.0
       logical name: eth0
       version: 04
       serial: 54:be:f7:65:9a:9b
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=0.13-4 ip=172.22.1.112 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:26 memory:f7e00000-f7e1ffff memory:f7e39000-f7e39fff ioport:f080(size=32)
  *-network
       description: Ethernet interface
       product: 82574L Gigabit Network Connection
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:02:00.0
       logical name: eth1
       version: 00
       serial: 54:be:f7:65:9a:9c
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=2.1-3 ip=172.22.1.113 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:18 memory:f7d00000-f7d1ffff ioport:e000(size=32) memory:f7d20000-f7d23fff

/etc/network/interfaces:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# The secondary network interface
auto eth1
iface eth1 inet dhcp

感谢您的任何帮助!

ifconfig:

eth0      Link encap:Ethernet  HWaddr 54:be:f7:65:9a:9b
          inet addr:172.22.1.112  Bcast:172.22.1.255  Mask:255.255.255.0
          inet6 addr: fe80::56be:f7ff:fe65:9a9b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:61 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5880 (5.8 KB)  TX bytes:1436 (1.4 KB)
          Interrupt:20 Memory:f7e00000-f7e20000

eth1      Link encap:Ethernet  HWaddr 54:be:f7:65:9a:9c
          inet addr:172.22.1.113  Bcast:172.22.1.255  Mask:255.255.255.0
          inet6 addr: fe80::56be:f7ff:fe65:9a9c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1093 errors:0 dropped:0 overruns:0 frame:0
          TX packets:575 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:88205 (88.2 KB)  TX bytes:42753 (42.7 KB)
          Interrupt:18 Memory:f7d00000-f7d20000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:11840 (11.8 KB)  TX bytes:11840 (11.8 KB)

route -n:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.22.1.1      0.0.0.0         UG    0      0        0 eth1
172.22.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.22.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0

路由 -n,eth0 已拔出。无法访问任何 IP 地址。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.22.1.1      0.0.0.0         UG    0      0        0 eth0
172.22.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
172.22.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
eth0 断开连接的脚本

eth0 链路封装:以太网 HWaddr 54:be:f7:65:9a:9b
          inet 地址:172.22.1.112 Bcast:172.22.1.255 掩码:255.255.255.0
          inet6 地址:fe80::56be:f7ff:fe65:9a9b/64 范围:链接
          上行广播多播 MTU:1500 度量:1
          RX 数据包:28527 错误:0 丢弃:0 超限:0 帧:0
          TX 数据包:10 错误:0 丢弃:0 超限:0 载波:0
          碰撞:0 txqueuelen:1000
          RX 字节:2202058 (2.2 MB) TX 字节:1372 (1.3 KB)
          中断:20 内存:f7e00000-f7e20000

eth1 链路封装:以太网 HWaddr 54:be:f7:65:9a:9c
          inet 地址:172.22.1.113 Bcast:172.22.1.255 掩码:255.255.255.0
          inet6 地址:fe80::56be:f7ff:fe65:9a9c/64 范围:链接
          上行广播运行多播 MTU:1500 度量:1
          RX 数据包:31516 错误:0 丢弃:0 超限:0 帧:0
          TX 数据包:1730 错误:0 丢弃:0 超限:0 载波:0
          碰撞:0 txqueuelen:1000
          RX 字节:6125004 (6.1 MB) TX 字节:155950 (155.9 KB)
          中断:18 内存:f7d00000-f7d20000

lo 链路封装:本地环回
          inet 地址:127.0.0.1 掩码:255.0.0.0
          inet6 地址:::1/128 范围:主机
          上行环回运行 MTU:65536 度量:1
          RX 数据包:160 错误:0 丢弃:0 超限:0 帧:0
          TX 数据包:160 错误:0 丢弃:0 超限:0 载波:0
          碰撞:0 txqueuelen:1
          RX 字节:11840 (11.8 KB) TX 字节:11840 (11.8 KB)

内核 IP 路由表
目标网关 Genmask 标志 指标参考使用 Iface
0.0.0.0 172.22.1.1 0.0.0.0 UG 0 0 0 eth1
172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
PING 8.8.8.8 (8.8.8.8) 56(84)字节数据。
来自 8.8.8.8 的 64 字节:icmp_seq=1 ttl=58 时间=27.4 毫秒
来自 8.8.8.8 的 64 字节:icmp_seq=2 ttl=58 时间=25.8 毫秒
来自 8.8.8.8 的 64 字节:icmp_seq=3 ttl=58 时间=27.8 毫秒
来自 8.8.8.8 的 64 字节:icmp_seq=4 ttl=58 时间=26.6 毫秒
来自 8.8.8.8 的 64 字节:icmp_seq=5 ttl=58 时间=26.6 毫秒

--- 8.8.8.8 ping 统计 ---
发送 5 个数据包,接收 5 个数据包,0% 数据包丢失,耗时 4007 毫秒
rtt 最小值/平均值/最大值/mdev = 25.818/26.897/27.860/0.733 毫秒


eth1 断开连接的脚本

eth0 链路封装:以太网 HWaddr 54:be:f7:65:9a:9b
          inet 地址:172.22.1.112 Bcast:172.22.1.255 掩码:255.255.255.0
          inet6 地址:fe80::56be:f7ff:fe65:9a9b/64 范围:链接
          上行广播运行多播 MTU:1500 度量:1
          RX 数据包:28540 错误:0 丢弃:0 超限:0 帧:0
          TX 数据包:10 错误:0 丢弃:0 超限:0 载波:0
          碰撞:0 txqueuelen:1000
          RX 字节:2202968 (2.2 MB) TX 字节:1372 (1.3 KB)
          中断:20 内存:f7e00000-f7e20000

eth1 链路封装:以太网 HWaddr 54:be:f7:65:9a:9c
          inet 地址:172.22.1.113 Bcast:172.22.1.255 掩码:255.255.255.0
          inet6 地址:fe80::56be:f7ff:fe65:9a9c/64 范围:链接
          上行广播多播 MTU:1500 度量:1
          RX 数据包:31528 错误:0 丢弃:0 超限:0 帧:0
          TX 数据包:1735 错误:0 丢弃:0 超限:0 载波:0
          碰撞:0 txqueuelen:1000
          RX 字节:6125988 (6.1 MB) TX 字节:156460 (156.4 KB)
          中断:18 内存:f7d00000-f7d20000

lo 链路封装:本地环回
          inet 地址:127.0.0.1 掩码:255.0.0.0
          inet6 地址:::1/128 范围:主机
          上行环回运行 MTU:65536 度量:1
          RX 数据包:160 错误:0 丢弃:0 超限:0 帧:0
          TX 数据包:160 错误:0 丢弃:0 超限:0 载波:0
          碰撞:0 txqueuelen:1
          RX 字节:11840 (11.8 KB) TX 字节:11840 (11.8 KB)

内核 IP 路由表
目标网关 Genmask 标志 指标参考使用 Iface
0.0.0.0 172.22.1.1 0.0.0.0 UG 0 0 0 eth1
172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.22.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
PING 8.8.8.8 (8.8.8.8) 56(84)字节数据。

--- 8.8.8.8 ping 统计 ---
发送了 5 个数据包,接收了 0 个数据包,100% 数据包丢失,耗时 4031 毫秒

答案1

您的两个网卡均正常工作。其中一个网卡具有以下单独的 IP 地址:

eth0: 172.22.1.112
    and
etho1: 172.22.1.113

您可以通过 ping 任一 IP 地址来验证它们是否正常工作:

$ ping -c10 172.22.1.112
$ ping -c10 172.22.1.113

如果您的网络中还有另一台计算机,您也可以从任一 IP 地址访问您的计算机。

如果您在计算机上设置了 Web 服务器,则可以使用以下任一 IP 地址访问该 Web 服务器:

http://172.22.1.112
http://172.22.1.113

您在这两个示例中看到的访问(输出)验证了它们都正常工作。另外,您的dhcp服务器能够访问它们并分配 IP 地址这一事实也是它们两个都在工作中。

运行此脚本来测试NIC的分离:

复制并粘贴以下脚本。您可以将其命名为:testnic.sh。当每个网卡插入计算机和路由器/调制解调器时,单独运行脚本。

testnic.sh:

#!/bin/bash

ifconfig
route -n
sudo route del default gw 172.22.1.1
sudo route add default gw 172.22.1.1
ping -c5 8.8.8.8

运行以下命令:

$ ./testnic.sh

显示命令和输出。

更新:

之前的输出表明,问题出在路由上。删除该网卡时,必须删除之前的根,然后在其位置创建另一个路由。

下面是一个示例脚本,可帮助您完成该任务。该脚本必须经过测试并针对您的环境进行微调。但您的问题的答案很明确,即两个网卡均正常工作。您看到的差异是由您的配置方式造成的。

移除一个 NIC 时,请更改网络配置以使用重新挖掘的 NIC 的路由。

这是另一个脚本示例,可让您在切换 NIC 时轻松更改配置。

#!/bin/bash

currentroute=$(route -n | awk '/UG/{print $NF}')
available="none"

route="0"
available="none"
find /sys/class/net/en* -exec echo "{}/operstate" \; | while read line; do
    # echo "[$line]"    
    IFS='/' read -r -a array <<< "$line"
    device="${array[4]}"
    state="$(cat $line)"
    thisdevice="$device:$state"
    if [[ "$thisdevice" == "$currentroute:down" ]] ; then
        route="0"
    fi
    if [[ "$state" == "up" ]]
    then
        echo "The device $device is available"
        echo "$device" > /tmp/available             
    fi 
done
read -r available </tmp/available
if [[ "$route" == "0" ]]; then
    route del default gw 172.22.1.1 $currentdevice
    route add default gw 172.22.1.1 $available
fi

echo "[$route/$available]"

答案2

为什么不使用绑定接口将两张卡捆绑成一个虚拟接口?

auto eth0
iface eth0 inet manual
        mtu 9000

auto eth1
iface eth1 inet manual
        mtu 9000

auto bond0
iface bond0 inet dhcp
    mtu 9000
    bond-mode 0
    bond-primary eth0
    bond-slaves eth0 eth1

相关内容