网络 eth0 DHCP、静态 IP 和自动协商问题

Mic*_*780 6 networking dhcp ethernet 14.04

背景

我在 14.04 上运行 Ubuntu 服务器,它目前是最新的。我只有一台网络设备连接到它。当我使用以太网线并将其从墙上连接到我的笔记本电脑(运行 Windows 7)时,DHCP 可以毫无问题地解决。

问题

当我将以太网线从墙上连接到我的服务器(运行 Ubuntu)并打开我的服务器电源时,DHCP 服务器没有为我的服务器分配 IP 地址。但是,当我使用笔记本电脑的以太网将电源线从服务器连接到笔记本电脑时,通过我的 Wifi 连接进行连接,服务器将通过笔记本电脑从 DHCP 获取 IP 地址。最后,从笔记本电脑连接获得 IP 后,我使用以下命令,然后当电源线从墙上连接到服务器时 DHCP 工作:

sudo dhclient -r
sudo dhclient -v eth0
Run Code Online (Sandbox Code Playgroud)

下次我通过sudo shutdown -r now服务器重新启动服务器时,将无法再次从 DHCP 使用从墙上到服务器的电源线获取 IP。

请注意,当我在/etc/network/interfaces文件中分配静态地址时,网络不会为其分配 IP,并且接口将关闭。

有没有办法解决我在打开服务器电源时网络无法发现 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 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.
Run Code Online (Sandbox Code Playgroud)

带有连接到笔记本电脑的服务器的 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)
Run Code Online (Sandbox Code Playgroud)

笔记本电脑 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)
Run Code Online (Sandbox Code Playgroud)

网络接口 (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
Run Code Online (Sandbox Code Playgroud)

更新:

我的/etc/network/interfaces文件是这样的

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
Run Code Online (Sandbox Code Playgroud)

我找到了一个似乎有效的临时修复程序,但如果我们能解决这个问题,我不希望它成为我的解决方案。我像这样更改了接口文件

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
    pre-up ifconfig $IFACE up
    pre-up mii-tool -R
Run Code Online (Sandbox Code Playgroud)

这将(我相信)告诉接口重置,并且出于某种原因它允许 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
Run Code Online (Sandbox Code Playgroud)

静止的

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
Run Code Online (Sandbox Code Playgroud)

我希望这会在将来对其他人有所帮助。

Fab*_*bby 4

根据聊天中的讨论,关闭服务器上的自动协商并将网络速度固定为网络接口卡 (NIC) 可以承受的最高水平。

从 10Mbps、半双工开始,然后向上工作到 10Mbps FD、100Mbps HD……直到问题出现。然后降低一级并保持该速度。

首先,安装ethtool(如果已经安装,您只会收到一条警告,表明已安装最新版本)

sudo apt-get install ethtool
Run Code Online (Sandbox Code Playgroud)

现在:

  1. 输入以下命令(并一一测试)

    sudo ethtool --change eth0 speed xxx duplex yyy autoneg off
    
    Run Code Online (Sandbox Code Playgroud)

    其中 xxx = 10,1001000且 yyy =halffull

    10 half所以从, 10 full, 100 half, ...开始

  2. 检查ifconfig您是否有 IP 地址。

  3. 返回到 1 直到它停止工作并使用之前仍然有效的值

  4. 要使更改永久生效,请执行以下命令:

    sudo nano /etc/network/interfaces
    
    Run Code Online (Sandbox Code Playgroud)

    并在该部分键入pre-up

    pre-up /usr/sbin/ethtool --change eth0 speed xxx duplex yyy autoneg off 
    
    Run Code Online (Sandbox Code Playgroud)

  • 就像这件事的后续行动一样。我弄乱了我的 eth0 接口,并使用“ethtool”我能够配置它实际上是阻止成功链接的自动协商。我使用了“ethtool -s eth0 autoneg off”,它打开了我的链接。 (2认同)