我已遵循(数百人中的任何一个)教程,但它不起作用。
如何在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/interfacesdhcpcd
通过Stretch连接的Pi4,Pi3和PIZeroW的板载WiFi将使用名称en
,这对于使用多个网络接口的用户可能是有益的,但是对于大多数Pi用户而言,具有单个以太网和WiFi接口的设备几乎没有什么区别。如果在wl的内核命令行中传递x,则可以恢复以前的名称MACMAC
enxb827eb123456中有一​​个选项可以启用可预测的网络接口名称。由于某些无法理解的原因,基金会在引入期待已久的功能后仅三周就决定“禁用以太网设备的可预测网络接口名称”。在wlx00c140123456sdio下有一个选项可以切换此设置。

设置静态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)允许dhcpcddhcpcd地址上工作,并且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网络也可以使用)。
备用网络设置。 (设置网络的方式有很多。)



评论


我对“这不是您要在文件中键入的内容”感到困惑。如果我没记错的话,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

#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上最常见的方法。)(在任何一种方法中,请用eth0wlan0或可预测的网络接口名称替换适当的网络接口名称。)
如果要查找接口名称,即使未连接,也请运行以下命令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是从gatewaydns-nameservers自动派生的,不需要指定。
有关更多详细信息,请参见https://wiki.debian.org/NetworkConfiguration
。您可以设置broadcastaddress或其中之一可预测的网络接口名称
,然后禁用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 楼

SystemdNetworkd
Raspbian / Raspberry Pi OS最初使用Debian Networking,在2015年被dhcpcd取代。dhcpcd是当前的默认网络系统。
Raspbian现在基于systemd,其中包括systemd-networkd,这是一项系统服务管理网络。它检测并配置出现的网络设备,以及创建虚拟网络设备。
本教程介绍了如何使用systemd-networkd设置基本网络。
仅注意使用内置接口的基本网络描述了eth0wlan0

假定您已熟悉网络并具有足够的能力配置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
提供了一套全面的文档。