昨天我花了 4 个小时尝试让我的网络的 DHCP/DNS/SMB 服务器重新上线。长话短说,我尝试了无数次令人沮丧的尝试(没有 DNS = 没有互联网资源可以提供帮助),并且至少重启了六次,才最终让我的服务器恢复正常运行。
导致这种情况发生的原因是配置并启用了我服务器的第二个以太网端口/etc/network/interfaces
。这时一切都变得一团糟。我终于再次禁用了 eth1,eth0 可以像以前一样工作,但这不是我希望这台服务器处于的状态。
eth0 和 eth1 都是主板内置的千兆端口(华硕的某款),以前它们都是绑定在一起的(我认为是循环方式);但是,从那时起,服务器就被完全重新格式化并重新安装(硬盘故障导致了这种情况),所以我认为绑定驱动程序配置的任何东西都会失效。
当服务器处于离线状态时,ifconfig
似乎显示它正在正常接收数据包,但每个传出的数据包都被丢弃了。(我应该在ifconfig
问题发生时保存输出,但“TX”行显示“packets:0”和“dropped:123”;还有“errors:0 ... overrun:0 carrier:0”。)
eth0 配置了静态 IP;我对 eth1 也做了同样的配置。如下所示/etc/network/interfaces
:
root@odin:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 10.12.0.50
netmask 255.0.0.0
gateway 10.12.0.2
# The secondary network interface
# Commented out now because this was the only way I could get it to work again
#auto eth1
#iface eth1 inet static
# address 10.12.0.51
# netmask 255.0.0.0
# gateway 10.12.0.2
ethtool
显示:
root@odin:~# ethtool eth0
Settings for eth0:
Supported ports: [ MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: external
Auto-negotiation: on
Supports Wake-on: g
Wake-on: d
Link detected: yes
eth1 的输出相同,只是它显示“检测到链接:否”,因为它当前已被禁用;当接口据称已启用时,“检测到链接”对于任一接口始终为“是”,即使 eth0 显然无法发送任何数据包。
/var/log/syslog
显示许多这样的条目:
May 11 21:55:08 odin kernel: [ 797.050022] forcedeth 0000:00:08.0: eth0: Got tx_timeout. irq: 00000020·
May 11 21:55:08 odin kernel: [ 797.050026] forcedeth 0000:00:08.0: eth0: Ring at 112804000·
May 11 21:55:08 odin kernel: [ 797.050029] forcedeth 0000:00:08.0: eth0: Dumping tx registers·
May 11 21:55:08 odin kernel: [ 797.050035] forcedeth 0000:00:08.0: eth0: 0: 00000020 000000df 00000003 0001000d 00000000 00000000 00000000 00000000·
[bunch more lines like this one, though none reference eth1]
此外,在 syslog 中还有下列行无数次重复:
May 11 21:54:42 odin kernel: [ 770.480861] martian source 10.12.0.50 from 10.42.0.206, on dev eth1·
May 11 21:54:42 odin kernel: [ 770.480865] ll header: ff:ff:ff:ff:ff:ff:00:1e:65:d6:6c:6a:08:06·
May 11 21:54:42 odin kernel: [ 770.987932] martian source 10.12.0.51 from 10.12.0.2, on dev eth1·
May 11 21:54:42 odin kernel: [ 770.987937] ll header: ff:ff:ff:ff:ff:ff:00:13:46:ed:e2:4a:08:06
“发件人”地址不同,但始终是 eth1,并且始终是“源”10.12.0.50 或 .51。那个“火星人”提醒我,我正在运行 Shorewall,但关闭它(并验证它只iptables -L
显示接受来自/到任何地方的所有内容)没有任何效果。我甚至不确定为什么 eth1 会看到发往 eth0 地址的流量,因为它们连接到一个交换机(无论如何,据我所知)只会将数据包发送到其预期目的地。(这是一个非托管千兆交换机,我认为是 Linksys。)
我甚至不知道如何开始诊断或排除这里出了什么问题。坦率地说,我害怕再次尝试启动 eth1,特别是因为我甚至不知道最终是什么解决了这个问题,所以我不知道我是否可以将其恢复到当前状态。我该怎么做才能弄清楚发生了什么,并修复它,以便我可以再次打开 eth1 而不会再次破坏服务器的网络?硬件是否仍因之前使用绑定驱动程序安装的系统而配置错误?我该如何确定,如果是这种情况,如何修复它?
在设置绑定之前,这两个端口在之前的安装中独立运行良好,在此期间我完全没有遇到任何问题。我大约在 4 周前重新安装了系统,从那时起 eth1 就被禁用了(Ubuntu 在安装过程中检测到了它,但我在安装过程中当然选择了 eth0 作为我的“主要”接口,Ubuntu 显然在那之后没有努力配置 eth1)。
答案1
几点说明:
- 如果您将两个端口绑定到同一个非托管交换机,它将不支持将端口绑定在一起所需的协议。您必须使用
mode=active-backup
- 不会,您之前的配置不会影响您现在的设置。
- 火星人是由于同一子网上有两个 NIC 而产生的。它们被发送到 eth1,因为它们是广播数据包。除了使日志混乱之外,您在设置中不应该遇到这些问题。
- 传输超时看起来像是某种硬件问题
你应该做什么:
- 尝试运行:
ip addr flush dev eth1; ip link set up dev eth1
查看仅启动 eth1 是否会导致 eth0 失败。如果是,则可能是硬件问题。 - 设置一个绑定接口(
mode=active-backup
),其中 eth0 和 eth1 作为从属接口,并将服务器的 IP 地址分配给该接口。
答案2
如果您的网卡之前已绑定在一起,则很可能需要重新配置交换机端口。端口可能已进行中继,或者尝试将您的网卡插入同一 VLAN 上的未标记端口。