我有一个运行 Raspbian 的 Raspberry Pi,通过以太网连接到我家的 LAN(在 ISP 的默认路由器上)。路由器配置为从192.168.0.10
dhcp 开始提供地址。我想给 Pi 一个静态 IP,所以我通过如下192.168.0.9
编辑分配给它:/etc/network/interfaces
auto lo
iface lo inet loopback
# auto eth0
# allow-hotplug eth0
# iface eth0 inet manual
iface eth0 inet static
address 192.168.0.9
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.1.255
gateway 192.168.0.1
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
重新启动并运行 ifconfig 后,我可以正确看到我的 IP 为192.168.0.9
:
eth0 Link encap:Ethernet HWaddr b8:27:eb:d2:e5:5b
inet addr:192.168.0.9 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::ba27:ebff:fed2:e55b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:17019 errors:0 dropped:16 overruns:0 frame:0
TX packets:1707 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2183986 (2.0 MiB) TX bytes:241230 (235.5 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:264 errors:0 dropped:0 overruns:0 frame:0
TX packets:264 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:21840 (21.3 KiB) TX bytes:21840 (21.3 KiB)
但是,我的路由器显示树莓派的 IP 地址是从 dhcp ( 192.168.0.10
) 获取的,最奇怪的是,我可以在 和192.168.0.10
ips上使用 ssh 访问 Pi 192.168.0.9
。知道为什么会发生这种情况吗?我如何将 Pi 设置为仅使用我为其提供的静态地址?
编辑:以供将来参考:我发现该问题是 raspbian 上次更新的一个错误,其他人也遇到了这个问题(https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=111709)
答案1
如何在 Rasperry Pi Raspian 上设置静态 IP 地址
不要使用/etc/network/interfaces
设置静态 IP。请/etc/dhcpcd.conf
改用。
恢复/etc/network/interfaces
原始文件,或撤消更改:
sudo nano /etc/network/interfaces
用手动设置替换您的更改/etc/network/interfaces
:
iface eth0 inet manual
配置 dhcpcd:
sudo cp /etc/dhcpcd.conf /etc/dhcpcd.conf.bak
sudo nano /etc/dhcpcd.conf
将静态配置文件选项添加到底部/etc/dhcpcd.conf
:
interface eth0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
删除租约:
sudo rm /var/lib/dhcp/*
重启:
reboot
另一个选项是禁用 dhcpcd。禁用 dhcpcd 后,您可以改为/etc/network/interfaces
设置静态 IP。
配置/etc/network/interfaces
:
sudo cp /etc/network/interfaces /etc/network/interfaces.bak
sudo nano /etc/network/interfaces
将手动设置替换为静态设置/etc/network/interfaces
:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.1
broadcast 192.168.1.255
gateway 192.168.1.1
配置 dhcpcd:
sudo cp /etc/dhcpcd.conf /etc/dhcpcd.conf.bak
sudo nano /etc/dhcpcd.conf
将选项添加到底部/etc/dhcpcd.conf
:
denyinterfaces eth0
或者你可以禁用 dhcpcd 服务:
systemctl disable dhcpcd.service
删除租约:
sudo rm /var/lib/dhcp/*
重启:
reboot
来源:
- 设置静态 IP 地址但也获取动态: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=111709
答案2
首先介绍一些背景知识。
Debian 和 Raspbian 有多种配置网络的方法。最常用的两种是。
- “ifupdown”,传统的解决方案,适用于台式机和服务器等静态网络设置,但对于漫游的设备效果并不好。
- 网络管理器,gnome 用户首选的工具,现在默认用于 Debian 桌面安装。可以很好地处理动态情况,但相当繁重,如果没有运行 GUI 且策略工具包无法正常工作,则很难使用。
树莓派基金会选择不使用这两种方式,而是在其树莓派镜像中使用 dhcpcd5 进行网络配置。dhcpcd5 打包在 Debian 中,但树莓派基金会树莓派镜像是我所知道的唯一默认使用它的基于 Debian 的系统。
我可以理解他们为什么想要放弃 ifupdown 而选择能够更好地处理漫游设备的程序,但我不太清楚他们为什么选择 dhcpcd 而不是网络管理器。也许他们觉得它更轻量或更容易集成到他们的桌面设置中,或者其他什么。
无论如何,由于 Raspberry pi 基金会做出的选择,如果您通过 /etc/network/interfaces 配置 IP 地址,则 ifupdown 会按照您的预期设置静态地址,然后 dhcpcd 会出现并添加 dhcp 地址。
对此有两种可能的解决方案。
- 使用 dhcpcd 配置来设置静态地址。
- 摆脱 dhcpcd5 并仅使用 ifupdown 配置您的网络。
哪个是更好的选择可能取决于您想使用 Pi 做什么。
答案3
您的配置存在三个问题:首先,DHCP 租约的到期时间通常设置为 1 小时,但也可能更长。由于 DHCP 服务器完全不知道静态地址,因此它不可能知道您的以太网 MAC 地址现在与两个 IP 地址相关联。
到目前为止,如果有人通过名称搜索您的 RPI,则会连接到老的IP 地址,无人回复。因此,从现在起,通过其名称连接到您的 RPI 将是不可能的,除非您在其上激活 SAMBA 或 Bonjour 服务。
这就是为什么我更喜欢reserved addresses
,其中 DHCP 配置为始终为给定的 MAC 地址提供相同的 IP 地址,但会进行 DNS 服务器和机器名称的协商仿佛新的租约正在协商中。
其次,您没有在静态节中配置 DNS 服务器:添加以下行,
dns-nameservers 8.8.8.8 8.8.4.4
(注意复数,服务器,以及两个 IP 地址之间缺少标点符号)。如果您不喜欢 Google DNS,请将其替换为您喜欢的任何 DNS。
第三,考虑到您的网络和网络掩码,您的广播地址是错误的:在您的/etc/network/interfaces
节中以及 ifconfig 的输出中(顺便说一句,它已经过时了,您应该ip
从iproute2
套件中使用),都可以看到它是192.168.1.255
。它应该是192.168.0.255当这些计算很复杂时,使用ipcalc
:
ipcalc 192.168.0.0/24
Address: 192.168.0.0 11000000.10101000.00000000. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254 Class C, Private Internet
我不确定这是否就是你的问题的根源,但在不久的将来它肯定会加剧你的问题,因为你的广播(包括 ARP 流量)将被 LAN 上的所有其他机器忽略。
答案4
正如 Narzan 指出的那样,您的路由器很可能仍拥有 192.168.0.10 的租约。
目前还不清楚重启路由器是否有用,请尝试登录路由器并
- 如果可能的话,清除 IP 关联
b8:27:eb:d2:e5:5b
。 - 清除 DHCP 租用表(这当然会改变所有其他设备的 IP)。