背景
我正在运行 14.04 版的 Ubuntu Server,目前是最新版本。我只有一个网络设备连接到它。当我使用以太网线并将其从墙上连接到我的笔记本电脑(运行 Windows 7)时,DHCP 可以顺利解析。
问题
当我将以太网线从墙上连接到我的服务器(运行 Ubuntu)并打开服务器电源时,DHCP 服务器不会为我的服务器分配 IP 地址。但是,当我使用笔记本电脑的以太网连接通过 Wifi 连接将服务器的线连接到笔记本电脑时,服务器将通过笔记本电脑从 DHCP 获取 IP 地址。最后,在我从笔记本电脑连接中获取 IP 后,我使用以下命令,然后当线从墙上连接到服务器时,DHCP 就可以正常工作:
sudo dhclient -r
sudo dhclient -v eth0
我下次通过服务器重新启动服务器时,sudo shutdown -r now
将无法通过从墙上到服务器的电线再次从 DHCP 获取 IP。
请注意,当我在文件中分配静态地址时,/etc/network/interfaces
网络将不会为其分配 IP,并且接口将关闭。
问题
有没有办法解决我启动服务器时网络无法发现 DHCP 服务器的问题?
如果您需要更多信息,请告诉我。
附加信息
连接到笔记本电脑之前
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x********)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x********)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 6 (xid=0x********)
...
No DHCPOFFERS received
No working leases in persistent database - sleeping.
dhclient 与服务器连接到笔记本电脑
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x*********)
DHCPREQUEST of 192.168.137.233 on eth0 to 255.255.255.255 port 67 (xid=0x*********)
DHCPOFFER of 192.168.137.233 from 192.168.137.1
DHCPACK of 192.168.137.233 from 192.168.137.1
bound to 192.168.137.233 -- renewal in 275 seconds.
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:22:64:23:7c:da
inet addr:192.168.137.233 Bcast:192.168.137.255 Mask:255.255.255.0
inet6 addr: fe80::222:64ff:fe23:7cda/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:28265 errors:0 dropped:0 overruns:0 frame:0
TX packets:2781 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4655957 (4.6 MB) TX bytes:415144 (415.1 KB)
笔记本电脑 DHCP 和电源线从墙上重新连接到服务器后,dhclient
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3 (xid=0x********)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8 (xid=0x********)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 15 (xid=0x********)
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 11 (xid=0x********)
DHCPREQUEST of 192.168.1.126 on eth0 to 255.255.255.255 port 67 (xid=0x*******)
DHCPOFFER of 192.168.1.126 from 192.168.1.254
DHCPACK of 192.168.1.126 from 192.168.1.154
bound to 192.168.1.126 -- renewal in 41950 second.
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:22:64:23:7c:da
inet addr:192.168.1.126 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::222:64ff:fe23:7cda/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33438 errors:0 dropped:0 overruns:0 frame:0
TX packets:3391 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5245215 (5.2 MB) TX bytes:550462 (550.4 KB)
网络接口 (lshw)
sudo lshw -class network
*-network
description: Ethernet interface
product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:02:00.0
logical name: eth0
version: 02
serial: 00:22:64:23:7c:da
size: 100Mbit/s
capacity: 1Gbit/s
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress msix vpd bus_master cap_list rom ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=2.3LK-NAPI duplex=full ip=192.168.1.82 latency=0 link=yes multicast=yes port=MII speed=100Mbit/s
resources: irq:42 ioport:e800(size=256) memory:febff000-febfffff memory:fdff0000-fdffffff memory:febc0000-febdffff
更新:
我的/etc/network/interfaces
文件就是这样的
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
我找到了一个似乎有效的临时解决方案,但如果我们可以解决这个问题,我不希望它成为我的解决方案。我像这样更改了接口文件
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
pre-up ifconfig $IFACE up
pre-up mii-tool -R
我相信这会告诉接口重置,出于某种原因,它允许 DHCP 按照应有的方式进行解析。就像我说的,除了这个之外,还必须有一个实际的修复。
解决方案:
在 Fabbys 的回答的帮助下,我能够想出一个我可以接受的更可行的解决方案。
打开 /etc/network/interfaces 并按下列方式之一配置以太网接口:
DHCP
auto eth0
iface eth0 inet dhcp
pre-up ifconfig $IFACE up
pre-up ethtool -s $IFACE speed 100 duplex full autoneg off
静止的
auto eth0
iface eth0 inet static
post-up ethtool -s $IFACE speed 100 duplex full autoneg off
address x.x.x.x #Internal IP
netmask 255.255.255.0
gateway x.x.x.y #Gateway IP
dns-nameservers 8.8.8.8 #Google DNS
我希望这能在未来帮助到其他人。
答案1
根据聊天中的讨论,关闭自动协商在服务器上,并将网络速度固定为网络接口卡 (NIC) 可以承受的最高水平。
从 10Mbps、半双工开始,然后逐渐增加到 10Mbps FD、100Mbps HD……直到出现问题。然后降低一个档次,并保持该速度。
首先,安装ethtool
(如果已经安装,您将收到一条警告,提示最新版本已安装)
sudo apt-get install ethtool
现在:
输入以下命令(并逐一测试)
sudo ethtool --change eth0 speed xxx duplex yyy autoneg off
其中 xxx =
10
,100
或1000
且 yyy =half
或full
。因此从
10 half
、、、10 full
开始100 half
...执行
ifconfig
检查您是否获得了 IP 地址。回到 1 直到它停止工作,并且使用以前仍然有效的值到:
使改变永久生效,执行以下命令:
sudo nano /etc/network/interfaces
并在以下部分输入
pre-up
:pre-up /usr/sbin/ethtool --change eth0 speed xxx duplex yyy autoneg off
答案2
哦天啊捂脸(我为自己感到惭愧,因为我最初想到的是第二个而不是第一个,我应该想到的几乎总是最简单的事情,但却能让你陷入技术困境,是吗?)
(移至顶部,因为这很可能是问题所在,但其他内容保留在下面以供参考)。
如果您使用同一根电线将服务器连接到笔记本电脑和将服务器连接到墙壁,那么这可能是问题所在!!(再次重申,这更多的是我对自己的责备,因为我首先错过了这一点,而后才想到它。如果听起来是这样的话,我并不是故意要表现得苛刻)
这里使用了两种不同类型的电线……
参考: https://www.computercablestore.com/straight-through-crossover-and-rollover-wiring
首先是用于交换机和路由器到客户端计算机的直通以太网电缆
第二种是交叉电缆:这些电缆用于机器到机器的连接,并且物理接线方式不同!
因此,如果该电缆在您的服务器和笔记本电脑之间工作,并且两者之间没有交换机或路由器(WiFi 连接在这里根本不算数),那么该电缆必须是交叉的。
获取标准直通电缆并从路由器连接到服务器,看看会发生什么。
根据我的经验,计算机问题可以归结为最简单的被忽视的问题。一些路由器和交换机是“智能”的,当您使用错误的电缆(交叉电缆)时,它们可能会尝试进行内部调整,以便您仍然可以使用它来连接机器,但这是永远不值得依赖的,而且更有可能是问题所在。
呃,实际上这听起来像是路由器问题。例如,我有 FiOS,在路由器中我可以查看网络设置,我可以看到它将 WiFi 和有线段分别桥接到 DHCP 服务器,因此如果该设置发生问题,我可能会得到您现在的情况,您无法再通过有线网络获取 IP,因为它没有连接到运行 DHCP 服务器的“家庭”网络,但您可以通过 WiFi 获取 IP,因为它仍然连接到路由器内的“家庭”网络。您可以尝试查看路由器的高级设置,或者更常见的情况是,如果您有回形针并且有一个重置针按钮,您可以查找如何将其恢复出厂设置(通常将回形针放在重置按钮上约 30 秒)。
此外,您的笔记本电脑仅通过 WiFi 分配 IP。如果您有一台机器,它同时具有有线和 wifi 适配器,并且您已连接 WiFi 并插入电线,即使发生故障,您的机器仍可以正常上网,原因是什么呢?它通过 WiFi 路由所有请求并完全忽略有线端口。
您的“修复”有效,因为您最终通过笔记本电脑 Wifi 适配器请求 IP。
通过阅读更多内容,我还注意到这可能是您在路由器上启用的 MAC 安全功能... 这意味着,除非您的 NIC 的 MAC 地址在允许的客户端列表中,否则您的路由器将拒绝为其提供地址。您可以“通过首先检查列表中的笔记本电脑来解决这个问题,一旦您通过这种方式获得地址,当您重新连接到墙上并发出另一个请求时,它可能会跳过 MAC 检查,因为它看到它已经为您提供了一个地址,并且至少暂时认为您的服务器是受信任的客户端。我还会检查您在路由器中启用的任何 MAC 安全。
我并不是说你的路由器 DHCP 服务器不可能出现一些奇怪的问题,但这种情况极其罕见,我无法告诉你有多么罕见。