有问题的计算机有一个 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 地址,请参阅手册页。