使用 DHCP 分配公共 IP 地址后,whatsmyip 显示预期的 193.xxx,但 ifconfig 显示 169.254.xx 链路本地地址

使用 DHCP 分配公共 IP 地址后,whatsmyip 显示预期的 193.xxx,但 ifconfig 显示 169.254.xx 链路本地地址

有问题的计算机有一个 Linux SO,并连接到具有 DHCP 服务的本地网络。我配置了一个由 DHCP 提供给该计算机的公共 IP 地址,我可以使用此 IP 地址通过 ssh 进入它。现在到了奇怪的部分。

ifconfig返回 169.254.xx 地址。我有当 DHCP 无法为计算机提供正确的地址时,会将 169.254.xx 分配给计算机。但是它确实提供了一个正确的地址,我可以 ssh 到它(使用公共 IP 地址)和网站http://www.whatsmyip.org/告诉我计算机具有我在 DHCP 上配置的公共 IP 地址。

这怎么可能呢?我应该在这篇文章中包含哪些细节?

当我要求同事重启网络时

/etc/init.d/net.eth0 restart

这是他的输出:

 * Caching service dependencies  ...                [ ok ]
 * Unmounting network filesystems ...               [ ok ]
 * Bringing down interface eth0
 *   Stopping dhcpcd on eth0 ...                    [ ok ]
 * Bringing up interface eth0
 *   dhcp ...
 *     Running dhcpcd ...
control_open: Connection refused
eth0: adding address fe80::f85f:1ef7:db63:7475
eth0: waiting for carrier
eth0: carrier acquired
DUID 00:01:00:01:1b:ef:52:ea:dc:85:de:20:38:fa
eth0: IAID a9:04:2c:82
eth0: soliciting an IPv6 router
eth0: rebinding lease of 193.136.136.136
eth0: probing for an IPv4LL address
eth0: DHCP lease expired
eth0: soliciting a DHCP lease
eth0: using IPv4LL address 169.254.78.15
eth0: adding route to 169.254.0.0/16
forked to background, child pid 6332                [ ok ]
 *     received address 169.254.78.15/16            [ ok ]
* Mounting network filesystems ...

的输出ifconfig如下:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.78.15  netmask 255.255.0.0  broadcast 169.254.255.255
        inet6 fe80::f85f:1ef7:db63:7475  prefixlen 64  scopeid 0x20<link>
        ether 48:85:a3:04:2d:81  txqueuelen 1000  (Ethernet)
        RX packets 113090  bytes 80195148 (76.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 39425  bytes 7462270 (7.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 2259  bytes 217008 (211.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2259  bytes 217008 (211.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether df:83:de:11:37:fb  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ip addr显示两个 IP,169.xxx 和 193.xxx 仍然没有发现为什么 DHCP 服务器提供 169.xxx。

答案1

该范围内的 IP169.254.x.x表明尚未从 DHCP 获取地址。

维基百科169.254.x.x范围内;

在 IPv4 中,链路本地地址在 RFC 6890 和 RFC 3927 中编纂。当动态主机配置协议 (DHCP) 服务不可用且不希望由网络管理员进行手动配置时,它们的实用性在于由网络设备进行自我自动配置。

169.254.0.0/16 块为此目的保留,但该范围内的第一个和最后一个 /24 子网除外。如果 IEEE 802(以太网)网络上的主机无法通过 DHCP 获取网络地址,则可以伪随机分配从 169.254.1.0 到 169.254.254.255 的地址。标准规定必须妥善处理地址冲突。

您的 IP 已列出,ifconfig并且公开(外部可见)正在被识别http://www.whatsmyip.org/

内部或本地网络与外部网络的 IP 地址范围不同(通常是私有的),这是很常见的情况。外部 IP 可能受到限制,并且使用 NATing 将外部流量路由到您的内部设备/PC。

答案2

您使用的是已弃用的ifconfig命令。它只显示每个接口一个 IPv4 地址,尽管一个接口可以分配多个地址。

尝试以下ip命令:

user@host ~ $ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet x.x.x.x peer x.x.x.x/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet x.x.x.x/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2a01:xxxx:xxxx:xxxx::4/128 scope global
       valid_lft forever preferred_lft forever
    inet6 2a01:xxxx:xxxx:xxxx::3/128 scope global
       valid_lft forever preferred_lft forever
    inet6 2a01:xxxx:xxxx:xxxx::2/128 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
       valid_lft forever preferred_lft forever

您还可以将 dhcpcd 设置为不设置 IPv4LL 地址,请参阅手册页

相关内容