如何在Raspberry Pi上设置网络/ WiFi /静态IP地址?
基金会于2015年5月向Raspbian引入
dhcpcd
网络系统后,出现了数百个问题(部分原因是基金会未提供任何文档)。回答了几十个问题后,我决定提供一个规范的答案。事实证明,这比预期的要困难得多-尤其是随着实现方式的不断变化-希望我继续保持最新。
(本来我将其称为多萝西·迪克斯(Dorothy Dixer),但这显然是澳大利亚的成语。)
#1 楼
本教程介绍了如何使用自2015年5月5日以来Raspbian中包含的默认网络管理器dhcpcd来设置网络。它适用于Raspbian Buster,Raspbian Stretch,Raspbian Jessie和最后一个Raspbian Wheezy的Foundation版本。与Stretch相同。如何设置Raspbian网络连接
如果您通过路由器使用以太网连接,则不需要任何配置,并且可以立即使用。
Pi3B +和Pi4具有千兆以太网接口,并且如果使用8线CAT 5E电缆,则只能在千兆以太网(1000BASE-T)路由器上工作。较早的Pi型号仅支持100BASE-T,可通过6线电缆工作。并且在设置了无线监管域之前可能无法连接到2.4GHz网络上的Ch 12,13。
启用5GHz的设备上的WiFi会被禁用,直到设置了无线监管域( Pi4B,Pi3B +,Pi3A +)
可以通过
Raspberry Pi Configuration
(rc_gui),raspi-config
或通过将country=
设置为适当的ISO 3166 alpha2国家/地区代码来设置域在/etc/wpa_supplicant/wpa_supplicant.conf
中。如果您使用的是WiFi和遵循基础指南设置的GUI
如果您通过遵循基础的指南设置命令行使用WiFi
这是设置不广播
SSID
的网络的唯一方法。这也可以用于设置“无头”系统,例如使用串行控制台电缆,但是如果您可以借用显示器和键盘进行设置,则非常容易。有关使用以太网电缆连接到PC的另一种可能的方法,请参见下文。
无头Raspbian WiFi设置
自2016年5月起,Raspbian会在引导目录中检查名为
wpa_supplicant.conf
的文件,并将该文件复制到/etc/wpa_supplicant
中,从而替换可能存在的任何现有wpa_supplicant.conf
文件。然后删除引导目录中的文件。可以使用以下详细说明的wpa_supplicant.conf
设置来启用无头设置,也可以使用无头设置Raspberry Pi(您可能也要启用ssh
。)我的IP地址是什么?
如果只是想知道您的Pi正在使用
IP Address
,请在命令行上输入hostname -I
。SSH
从2016年11月版本开始,Raspbian默认禁用SSH服务器。您必须手动启用它。
在终端中输入
sudo raspi-config
,首先选择advanced options
,然后导航到ssh
,按Enter
并选择“启用或禁用ssh服务器”。对于无头设置,SSH可以通过将名为“ ssh”的文件(没有任何扩展名)放置到SD卡的启动分区上来启用。
网络文件
如果您正在运行最新的Raspbian
/etc/network/interfaces
,请下面。如果您已将其放回原位。 (或者在Stretch
上将其删除-它实际上不会执行任何操作。)手。最近的Raspbian在/etc/wpa_supplicant/wpa_supplicant.conf
中可以选择输入SSID和密码。它应包含以下内容:-# interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d
如果需要连接到专用网络(即,不广播
raspi-config
),请在SSID
内添加scan_ssid=1
行。注意如果您想连接到不同的网络(例如,在公司或家中),可以包含多个
network={⋯}
条目。 network={⋯}
条目内的priority=100
行。您可以为每个网络选择不同的优先级,将选择优先级最高的可访问网络;默认值为0。因此需要链接到wpa_supplicant。这些设置与可预测的网络接口名称不兼容。
Jessie使用的
network={⋯}
应为:-ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=AU
network={
ssid="ESSID"
psk="Your_wifi_password"
}
注意在
man wpa_supplicant.conf
中调用dhcp将禁用10-wpa_supplicant
。可预测的网络接口名称
/etc/network/interfaces
引入了1种可预测的网络接口名称,这些名称已在其他发行版中使用了一段时间。 /etc/network/interfaces
或dhcpcd
。通过
Stretch
连接的Pi4,Pi3和PIZeroW的板载WiFi将使用名称en
,这对于使用多个网络接口的用户可能是有益的,但是对于大多数Pi用户而言,具有单个以太网和WiFi接口的设备几乎没有什么区别。如果在
wl
的内核命令行中传递x
,则可以恢复以前的名称MAC
和MAC
。enxb827eb123456
中有一个选项可以启用可预测的网络接口名称。由于某些无法理解的原因,基金会在引入期待已久的功能后仅三周就决定“禁用以太网设备的可预测网络接口名称”。在wlx00c140123456
的sdio
下有一个选项可以切换此设置。设置静态IP地址
如果希望为Pi分配可预测的IP地址,则可以在路由器中保留一个或请求DHCP服务器分配一个。
例如以下将要求在wlan0上的地址。
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto lo
iface lo inet loopback
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
request [地址]
在DHCP DISCOVER消息中请求地址。无法保证这是DHCP服务器实际提供的地址。如果未提供任何地址,则使用当前分配给该接口的第一个地址。服务器将正常分配地址。
如果您真的需要静态IP地址,请参见单独的答案静态IP地址
高级
wlan0
配置默认情况下,Raspbian使用
eth0
进行管理网络接口。这是自动的,大多数用户只需要指定无线网络的SSID和密码即可。可以通过在
wlan0
中输入选项来配置net.ifnames=0
的工作方式;请参阅/boot/cmdline.txt
。有关raspi-config
的一篇好文章,网址为https://wiki.archlinux.org/index.php/dhcpcd 以下描述了一些更常见的配置: >可以在
Advanced Options
内配置静态配置文件,并在DHCP租约失败时退回给它。这对于无头机器尤其有用,在无头机器中,静态配置文件可用作“恢复”配置文件,以确保始终可以连接到该机器。将静态配置文件设置为其他任何静态IP地址interface wlan0
request 10.1.2.99
防止
raspi-config
配置接口通常这样做是为了使Pi充当访问点(需要配置)使用其他文件),同时允许在其他接口上进行正常的
dhcpcd
配置。在文件末尾添加
dhcpcd
(但在其他添加的接口行之上)。防止
dhcpcd
在接口上配置网关如果希望接口不安装任何默认路由(通常与静态IP地址结合使用),请指定
# define static profile profile static_eth0 static ip_address=⋯ static routers=⋯ static domain_name_servers=⋯ # fallback to static profile on eth0 interface eth0 fallback static_eth0
主机特定配置
/etc/dhcpcd.conf
可以根据主机网络配置接口。在尝试进行DHCP解析之前,这将使用地址解析协议(ARP)基于MAC或IP地址来探查主机。nogateway
如果不使用这些功能并且具有以下功能,则可以通过禁用ARP探测来加快DHCP的速度:一个简单的网络。
interface bge0 arping 192.168.0.1 # My specific 192.168.0.1 network profile dd:ee:aa:dd:bb:ee static ip_address=192.168.0.10/24 # A generic 192.168.0.1 network profile 192.168.0.1 static ip_address=192.168.0.98/24
使用不同的wpa_supplicant文件
可以将dhcpcd配置为对特定的无线接口使用不同的wpa_supplicant.conf文件。
在其中创建一个名为
man dhcpcd.conf
的文件dhcpcd
例如dhcpcd
将仅由dhcpcd
使用。DHCP
将用于任何其他无线接口。将计算机连接到Pi
Raspbian的最新版本(该版本使用
denyinterfaces wlan0
)允许dhcpcd
在dhcpcd
地址上工作,并且wpa_supplicant-"$interface".conf
(这是一种零配置实现)使程序可以发现在本地网络上运行的主机。这意味着您可以将Pi插入计算机(使用以太网电缆)或本地网络路由器,并且在不知道IP地址的情况下进行连接。某些版本的Windows和以非标准方式使用.local的网络有时会出现问题。 (请参阅https://en.wikipedia.org/wiki/.local)
注意
/etc/wpa_supplicant/
分辨率并非始终有效,例如在wpa_supplicant-wlan0.conf
中。以下内容应解析IP(并且可以包含在wlan0
脚本中)/etc/wpa_supplicant/wpa_supplicant.conf
如果您的系统没有
dhcpcd
来查询ssh
,例如macOS您可以使用以下命令:-link-local
如果有多个Pi,则需要确保每个Pi都有唯一的主机名。
您可以使用交叉电缆,但不需要一根电缆(大多数现代界面会自动检测)。
直接连接的一个缺点是Pi将无法访问Internet,并且日期也无法设置。您可以通过在连接之前运行
avahi
从主机复制日期。它还涵盖了到同一网络上其他计算机的连接。主要旨在帮助新用户努力使他们的Pi(尤其是WiFi)正常工作。 >
不包括:-
其他网络管理器。
在Pi上运行高级网络(例如
ssh pi@hostname.local
服务器,隧道,VPN,访问点)。使用
raspberrypi
(尽管如果有ssh
网络也可以使用)。备用网络设置。 (设置网络的方式有很多。)
#2 楼
设置静态IP地址有关设置静态IP地址的问题是该站点上最常见的问题。教程很多(很多错误,过时或不完整的教程)。
如果您打算使用静态IP地址的原因是希望为Pi分配可预测的IP地址,则可以请求DHCP服务器分配一个IP地址。
例如在
/etc/dhcpcd.conf
上添加以下内容将请求wlan0和eth0上的地址。interface wlan0
request 10.1.2.99
interface eth0
request 10.1.2.98
如果请求的IP地址在DHCP服务器管理的可用范围内,则应遵循此条件,否则应遵循DHCP服务器将分配正常的地址。
免责声明
在继续之前,我认为必须声明不建议设置静态地址。电信工程师不这样做。静态IP地址可能是网络管理员生活的祸根。在某些情况下需要静态IP地址,例如如果您正在运行DHCP服务器,或者在没有DHCP服务器的隔离网络上运行。
如果您想拥有一个已知的IP地址,则最好在您的DHCP服务器上保留一个IP地址-最好在DHCP服务器之外DHCP服务的范围(我为网络打印机执行此操作)。这样避免了确定网关等的麻烦。
如果您仍然决定继续进行操作,则应确保正确进行操作。改编自Foundation Network教程
查找本地网络的设置
使用Pi本身,使用DHCP最容易完成此操作,但是在网络上的任何计算机上都可以完成,尽管命令可能会有所不同其他系统。
运行
ip -4 addr show | grep global
以上假设IPV4寻址-如果您的ISP使用IPV6,则省略“ -4”参数。
应给出类似以下的输出:
inet 10.1.1.30/24 brd 10.1.1.255 scope global eth0
inet 10.1.1.31/24 brd 10.1.1.255 scope global wlan0
第一个地址是您Pi在网络上的IP地址,斜杠后的部分是网络大小。您极有可能是/ 24。
第二个地址是网络的brd(广播)地址。
查找路由器(或网关)的地址
ip route | grep default | awk '{print }'
10.1.1.1
最后记下DNS服务器的地址,通常这是与网关相同。
cat /etc/resolv.conf
# Generated by resolvconf
nameserver 10.1.1.1
然后按照以下方法之一进行操作。 (这里没有记录其他方法。这是Raspbian上最常见的方法。)(在任何一种方法中,请用
eth0
,wlan0
或可预测的网络接口名称替换适当的网络接口名称。)如果要查找接口名称,即使未连接,也请运行以下命令
ls /sys/class/net/
,无论哪种方法,都应选择未使用的IP地址。最好是在同一子网内的DHCP服务器使用的范围之外。
dhcpcd方法
将
/etc/network/interfaces
保留为默认设置(如上所述)。按如下方式编辑
/etc/dhcpcd.conf
: - Here is an example which configures a static address, routes and dns.
interface eth0
static ip_address=10.1.1.30/24
static routers=10.1.1.1
static domain_name_servers=10.1.1.1
interface wlan0
static ip_address=10.1.1.31/24
static routers=10.1.1.1
static domain_name_servers=10.1.1.1
ip_address
是上面命令的地址和大小(或同一网络上的另一个未使用地址),routers
是路由器(或网关)的地址。domain_name_servers
是/etc/resolv.conf中的DNS地址。(请参阅
man dhcpcd.conf
)关于
dhcpcd
的文章很不错,网址为https://wiki.archlinux.org/index.php / dhcpcd Fallback profile
是静态IP的替代方法网络接口方法
注意不建议使用此方法(仅当禁用DHCP客户端守护程序时才有效)您打算同时使用这两个接口。网络),
q4312 079q 255.255.255.0对应于网络大小
/etc/network/interfaces
。address
是路由器(或网关)的地址。您也可以指定
netmask
,但这通常不是必需的。/24
是从gateway
和dns-nameservers
自动派生的,不需要指定。有关更多详细信息,请参见https://wiki.debian.org/NetworkConfiguration
。您可以设置
broadcast
,address
或其中之一可预测的网络接口名称,然后禁用DHCP客户端守护程序并切换到标准Debian网络:
auto eth0
iface eth0 inet static
address 10.1.1.30
netmask 255.255.255.0
gateway 10.1.1.1
allow-hotplug wlan0
iface wlan0 inet static
address 10.1.1.31
netmask 255.255.255.0
gateway 10.1.1.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
重新启动以使更改生效:
sudo systemctl disable dhcpcd
sudo systemctl enable networking
评论
您提到的这两种方法的优缺点是什么?
– Elliott B
18年6月24日在23:51
@ElliottB阅读上面的免责声明。
–地铁
18年6月25日在4:39
我读过,我只是想知道dhcpcd与网络的两种方法。我想看看静态IP是否能使其启动更快,因为在systemd-analyze中dhcpcd延迟了15秒。
– Elliott B
18年6月25日在4:42
禁用dhcpd的性能更好,我刚刚测试了第二种不推荐的方法,并且在我的RasPI Zero W上将启动时间缩短了7秒。
– Stefan Profanter
19-10-28在17:22
网络管理员不喜欢这样。这不是在rapsberry pi和orange pi以及本地打印机上具有dhcp地址的原因。几乎每个读这本书的人都是家庭用户,并且对“专业人士”所做的自鸣得意的评论并没有为他们服务。阿尔伯特
–阿尔伯特·范·德·霍斯特
19年11月13日在21:29
#3 楼
对于以太网连接上的静态IP地址:sudo nano /etc/dhcpcd.conf
在文件顶部的以下行中键入:
interface eth0
static ip_address=192.168.1.XX/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
sudo reboot
对于最近的Jessie更新,需要这样做。
/etc/network/interfaces
应该一个人呆着。打开浏览器,输入路由器地址(大多数情况下为192.168.1.1),然后检查您的家庭网络,以确保Raspberry Pi显示为“静态”。评论
如果您打算复制部分答案,则至少应该正确。
–地铁
2015年12月15日23:37
它可能在您的情况下确实有效,但由于dhcpcd推断了网络掩码,因此无法正常运行,而对于其他地址范围则不能。阅读手册页。
–地铁
2015年12月17日下午0:58
您断言/ etc / network / interfaces应该单独放置,但是您没有说为什么。实际上,事实恰恰相反。请参阅下面的答案。
–JayEye
16年5月12日在23:10
如果要在不重新启动的情况下重新启动网络服务,请确保在/ etc / network / interface文件中的iface eth0 inet手动行上方具有auto eth0。通过sudo service network restart命令重新启动网络
–巴马利
16年2月2日,下午4:21
这可以是复制的答案,但具有在树莓派上设置静态ip所需的一切,接受的答案不必要长。
– Pedro Lobito
17年5月31日在3:57
#4 楼
简易的方法: />将sd卡贴在您的PC上,发现它有两个分区。将最小的分区安装为
/boot/
打开
/boot/cmdline.txt
并在行的末尾添加ip=192.168.1.20
。创建一个空文件
/boot/ssh
从PC上卸载SD卡,插入Pi并启动Raspberry Pi。在Linux上,启动
ssh pi@192.168.1.20
,密码为raspberry
。 在Pi上,配置设置以启用SSH,例如使用GUI或raspi-config,因为/ boot / ssh会在第一次启动时自动删除
我正在使用它来访问我的Raspbian Jessie和Stretch,该靴子无需连接显示器即可开机,并具有电源和以太网只要。使用ssh shell访问它之后,我可以继续设置。
经过这种处理,Raspberry PI具有两个IP:一个来自您指定的固定IP,一个来自在Raspberry Pi上运行的dhcp-client。 。
ifconfig
将显示固定的IP。右上角的蓝色箭头图标显示dhcpd-IP。评论
请不要建议禁用IPv6。没有必要。
–安德斯
17年9月7日在21:25
为什么我需要2个IP?
–user42000
17-10-20在14:04
@ SiXandSeven8ths不需要2个IP。我已经观察到了这种行为,并在此处进行描述以最大程度地减少意外。我会改善我的答案,但没有时间这样做。
– MadMike
17-10-20在14:42
@ SiXandSeven8ths很抱歉听到这个消息。对我来说很好。这也是在树莓派上不安装任何显示器和键盘的唯一方法。所以我认为这对其他人可能有用。
– MadMike
17-10-20在15:08
我发现自己做错了。启动后,我尝试使用附带的监视器鼠标和键盘来配置静态IP。我编辑了你的答案。如果修改被接受,我将删除我的评论。 +1
–罗兰
4月16日22:45
#5 楼
您应该做的第一件事是使Raspberry pi的IP保持静态。这样,无论何时打开Raspberry pi,它都应连接到您的接入点(热点)。连接到您的接入点。在树莓派的终端中输入ifconfig并在下面输入该IP地址,在我的情况下为192.168.43.233
首先编辑dhcpcd.conf文件
一直滚动到底部,然后根据您的连接(有线或无线)在末尾添加这条线。保存并重新启动。现在打开树莓派的电源,它会自动连接到您的接入点。
#6 楼
SystemdNetworkdRaspbian / Raspberry Pi OS最初使用Debian Networking,在2015年被
dhcpcd
取代。dhcpcd
是当前的默认网络系统。Raspbian现在基于
systemd
,其中包括systemd-networkd,这是一项系统服务管理网络。它检测并配置出现的网络设备,以及创建虚拟网络设备。本教程介绍了如何使用
systemd-networkd
设置基本网络。仅注意使用内置接口的基本网络描述了
eth0
和wlan0
。假定您已熟悉网络并具有足够的能力配置Linux。
这不是为初学者推荐的方法。
每个界面都需要显式配置。
警告这将禁用桌面面板上的联网工具。
以太网网络
您需要通过在
/etc/systemd/network
中创建文件来定义网络。可以使用扩展名.network
命名该名称以下示例告诉
systemd-networkd
使用eth0
(由udev
设置)并使用DHCP为它分配地址。[Match]
Name=eth0
[Network]
DHCP=ipv4
[DHCP]
RouteMetric=201
使用静态IP地址
[Match]
Name=eth0
[Network]
Address=192.168.1.20/24
Gateway=192.168.1.1
DNS=192.168.1.1
[DHCP]
RouteMetric=201
无线网络
要使用
systemd-networkd
连接到无线网络,需要配置有其他应用程序(例如WPA请求方)的无线适配器。要使用
wlan0
您应该创建一个合适的/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
,例如ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=<2 letter ISO 3166-1 country code>
network={
ssid="ESSID"
psk="Your_wifi_password"
}
(如果您已有WiFi设置,则可以复制文件
/etc/wpa_supplicant/wpa_supplicant.conf
。)在
.network
中创建一个/etc/systemd/network
文件。[Match]
Name=wlan0
[Network]
DHCP=ipv4
[DHCP]
RouteMetric=301
已创建了需要的适当的配置文件,以禁用现有网络并启用
systemd-networkd
服务。注意,无需清除现有网络服务。如果禁用,它们将不会干扰,并且可以根据需要轻松地重新启用。sudo systemctl enable systemd-networkd
sudo systemctl disable dhcpcd
sudo systemctl disable networking
sudo systemctl enable systemd-resolved.service
sudo systemctl enable systemd-resolved.service
sudo systemctl disable wpa_supplicant.service
sudo systemctl enable wpa_supplicant@wlan0.service
您可以使用以下命令检查状态:-
systemctl status systemd-networkd
systemctl status systemd-resolved.service
systemctl status wpa_supplicant.service
systemctl status wpa_supplicant@wlan0.service
systemctl status dbus.service
参考文献
Debian Wiki
ArchLinux
Wiki
提供了一套全面的文档。
评论
我对“这不是您要在文件中键入的内容”感到困惑。如果我没记错的话,Milliways在这里的意思是您不会用这段文字替换整个文件。但是,最好在末尾添加此位(当然,可以根据自己的喜好修改参数)。另外,如果您不想通过该接口设置路由,则routers和domain_name_servers行是可选的。
–马克
2015年12月4日18:34
因此,现在,要配置您的IP地址,您需要安装DHCP客户端并使用其配置来设置静态ip ?!如果我想在Raspbian上使用DHCP服务器,那将不起作用! DHCP客户端在DHCP服务器启动后运行,因此尚未设置IP,从而使DHCP服务器(isc-dhcpd)抱怨。
–吕克·斯蒂芬斯基(Luc Stepniewski)
15/12/23在10:31
正式记录在哪里?
–阿拉斯泰尔·麦考马克(Alastair McCormack)
16年1月16日在14:13
该文件记录在哪里?我的意思是,WTF。我遵循了这些指示以及许多其他指示,因此无法建立联系。我可以高兴地看到和扫描网络,但是它永远不会连接或关联。我对此很奇怪。
– AaronJAnderson
16年4月4日在1:09
@MikeD。见raspberrypi.org/blog/…
–地铁
16年8月6日在6:34