如果你已经在跑步 Fedora 在你的树莓派上,你已经在大多数情况下访问 wifi 热点了。 Raspberry Pi 有一个 wifi 接口,通常设置为加入现有的 wifi 网络。 可以重新配置此接口以提供新的 wifi 网络。 如果房间有良好的网线和糟糕的 wifi 信号(砖墙、箔背石膏板,甚至带有金属氧化物涂层的窗户都是障碍),请用您的 Pi 修复它。
本文介绍了设置热点的过程。 它在第三代 Pis 上进行了测试 – a B型 v1.2, 和 B+型 (年龄越大 2 和新的 4 未测试)。 这些是信用卡大小的 Pis,已经存在了几年。
本文还深入探讨了幕后的网络概念。 例如,“热点”这个词在世界各地的公共场所都很流行,但使用术语WLAN AP(无线局域网接入点)更准确。 事实上,如果你想惹恼你的友好邻居网络管理员,将热点称为“wifi 路由器”。 不准确会使他们的眼睛交叉。
一些 nmcli 命令将 Raspberry Pi 配置为 wifi AP。 nmcli 命令行工具控制 NetworkManager 守护程序。 它不是唯一可用的网络配置系统。 更复杂的解决方案可供喜欢冒险的人使用。 查看 主机 RPM 包和 OpenWRT 发行版. 查看与 NetworkManager 的 Internet 连接共享以获取更多想法。
深入了解网络管理
热点是路由AP(接入点)。 它位于两个网络(当前的有线网络和新的无线网络)之间,负责它们之间 IP 数据包的邮局式转发。
路由和接口
树莓派上的无线接口命名为 无线局域网0 有线的是 eth0. 新的无线网络使用一个 IP 地址范围,而当前的有线网络使用另一个。 在本例中,当前网络范围为 192.168.0.0/24,新网络范围为 10.42.0.0/24。 如果这些数字没有意义,那没关系。 您可以继续操作而无需处理 IP 子网和网络掩码。 Raspberry Pi 的两个接口具有来自这些范围的 IP 地址。
数据包根据其 IP 地址发送到本地计算机或远程目标。 这是路由工作,它是路由 AP 名称的路由部分的来源。 如果您想使用 DHCP 和 DNS 构建更复杂的路由器,请从文章如何使用中获取一些技巧 Fedora 服务器创建一个路由器/网关。
这不是桥接 AP
Netowrk 桥接是另一种扩展网络的方式,但这不是这个 Pi 的设置方式。 此路由 AP 不是桥接 AP。 要了解路由和桥接之间的区别,您必须对 OSI 网络模型的网络层有所了解。 一个好的起点是 Linux 网络故障排除初学者指南. 这是简短的回答。
- 第 3 层,网络 ← 是的,我们路由的 AP 就在这里。
- 第 2 层,数据链路 ← 不,它不是桥接 AP。
- 第 1 层,物理 ← 此处涵盖无线电传输。
一种 桥 在网络堆栈的较低层工作——它使用以太网 MAC 地址发送数据。 如果这是一个桥接 AP,它不会有两组 IP 地址; 新的无线网络和当前的有线网络将使用相同的 IP 子网。
IP伪装
在 Internet 上的任何地方都找不到以 10. 开头的 IP 地址。 这是一个私人地址,而不是公共地址。 要将 IP 数据包路由出 wifi 网络并再次返回,必须更改数据包地址。 IP伪装 是使这种路由工作的一种方式。 使用伪装名称是因为数据包的真实地址是隐藏的。 有线网络看不到来自无线网络的任何地址。
IP 伪装由 NetworkManager 自动设置。 NetworkManager 添加 nftables 规则来处理 IP伪装.
Pi 的网络堆栈
一堆网络硬件和软件使wifi工作。
- 网络硬件
- 内核空间软件
- 用户空间软件
可以看到网络硬件。 Raspberry Pi 有两个主要的硬件组件——一个微型天线和 Broadcom wifi 芯片。 MagPi 杂志有一些很棒的照片.
内核软件提供管道。 没有必要直接处理这些 – 一切都很好 Fedora 分配。
用户空间软件定制系统。 它充满了帮助用户、与内核对话或将其他实用程序连接在一起的实用程序。 例如, 防火墙-cmd 工具与 防火墙服务, firewalld 与 nftables 工具,nftables 与内核中的 netfilter 框架对话。 这 nmcli 命令对话 网络管理员. 并且 NetworkManager 几乎可以处理所有事情。
创建 AP
理论就够了——让我们开始实践吧。 启动您的 Raspberry Pi 运行 Fedora 并运行这些命令。
安装软件
几乎所有必需的软件都包含在 Fedora 最小的图像。 唯一缺少的是 dnsmasq 包。 这会自动处理新 wifi 网络的 DHCP 和 IP 地址部分。 使用运行此命令 sudo:
$ sudo dnf install dnsmasq
创建一个新的 NetworkManager 连接
NetworkManager 自动建立一个网络连接,有线连接 1. 使用 nmcli 工具告诉 NetworkManager 如何添加 wifi 连接。 NetworkManager 将这些设置以及更多设置保存在一个新的配置文件中。
新的配置文件在目录 /etc/sysconfig/network-scripts/ 中创建。 起初,它是空的; 该映像没有网络接口的配置文件。 如果您想了解有关 NetworkManager 如何使用 network-scripts 目录的更多信息,详细信息在 nm-settings-ifcfg-rh 手册页.
[nick@raspi ~]$ ls /etc/sysconfig/network-scripts/ [nick@raspi ~]$
创建网络连接的第一个 nmcli 命令如下所示。 还有更多事情要做——运行这个后,树莓派将无法作为热点工作。
nmcli con add type wifi ifname wlan0 con-name 'raspi hotspot' autoconnect yes ssid 'raspi wifi'
以下命令完成更多步骤:
- 创建新连接。
- 列出连接。
- 再看一下 network-scripts 文件夹。 NetworkManager 添加了一个配置文件。
- 列出要连接的可用 AP。
这需要使用以 root 身份运行多个命令 sudo:
$ sudo nmcli con add type wifi ifname wlan0 con-name 'raspi hotspot' autoconnect yes ssid 'raspi wifi' Connection 'raspi wifi' (13ea67a7-a8e6-480c-8a46-3171d9f96554) successfully added. $ sudo nmcli connection show NAME UUID TYPE DEVICE Wired connection 1 59b7f1b5-04e1-3ad8-bde8-386a97e5195d ethernet eth0 raspi wifi 13ea67a7-a8e6-480c-8a46-3171d9f96554 wifi wlan0 $ ls /etc/sysconfig/network-scripts/ ifcfg-raspi_wifi $ sudo nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 01:0B:03:04:C6:50 APrivateAP Infra 6 195 Mbit/s 52 ▂▄__ WPA2 02:B3:54:05:C8:51 SomePublicAP Infra 6 195 Mbit/s 52 ▂▄__ --
您可以删除新配置并使用以下命令重新开始:
$ sudo nmcli con delete 'raspi hotspot'
更改连接方式
NetworkManager 连接有许多配置设置。 您可以使用命令 nmcli con show ‘raspi hotspot’ 看到这些。 其中一些设置以标签 802-11-wireless 开头。 这与使 wifi 工作的行业标准有关——IEEE 组织为 wifi 指定了许多协议,命名为 802.11. 这个新的 wifi 连接处于基础设施模式,准备连接到 wifi 接入点。 Pi 不应该连接到另一个 AP; 它应该是其他人连接的AP。
此命令将模式从基础设施更改为 AP。 它还设置了其他一些 无线特性. 这 背景 value 告诉 NetworkManager 遵循两个旧的 IEEE 标准 – 802.11b 和 802.11g. 基本上它将无线电配置为使用 2.4GHz 频段,而不是 5GHz 频段。 ipv4.method 共享 意味着此连接将与其他人共享。
- 通过将模式更改为 ap 来更改与热点的连接。
sudo nmcli connection modify "raspi hotspot" 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared
连接自动开始。 dnsmasq 应用程序为 wlan0 接口提供了一个 IP 地址 10.42.0.1。 启动和停止热点的手动命令是:
$ sudo nmcli con up "raspi hotspot" $ sudo nmcli con down "raspi hotspot"
连接设备
接下来的步骤是:
- 看日志。
- 连接智能手机。
- 当你已经看够了,输入 ^C ([control][c]) 停止观看日志。
$ journalctl --follow -- Logs begin at Wed 2020-04-01 18:23:45 BST. -- ...
使用支持 wifi 的设备,例如您的手机。 手机可以找到新的raspi wifi网络。
有关关联客户端的消息出现在活动日志中:
Jun 10 18:08:05 raspi wpa_supplicant[662]: wlan0: AP-STA-CONNECTED 94:b0:1f:2e:d2:bd Jun 10 18:08:05 raspi wpa_supplicant[662]: wlan0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0 Jun 10 18:08:05 raspi dnsmasq-dhcp[713]: DHCPREQUEST(wlan0) 10.42.0.125 94:b0:1f:2e:d2:bd Jun 10 18:08:05 raspi dnsmasq-dhcp[713]: DHCPACK(wlan0) 10.42.0.125 94:b0:1f:2e:d2:bd nick
检查防火墙
出现了一个名为 nm-shared 的新安全区域。 这正在停止一些 wifi 访问。
$ sudo firewall-cmd --get-active-zones [sudo] password for nick: nm-shared interfaces: wlan0 public interfaces: eth0
新区域设置为接受所有内容,因为目标是 ACCEPT。 客户端可以使用 Web、邮件和 SSH 访问 Internet。
$ sudo firewall-cmd --zone=nm-shared --list-all nm-shared (active) target: ACCEPT icmp-block-inversion: no interfaces: wlan0 sources: services: dhcp dns ssh ports: protocols: icmp ipv6-icmp masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: rule priority="32767" reject
这个配置设置的大列表需要一些检查。
第一行,无罪直到证明有罪选项目标:ACCEPT 表示允许所有流量通过,除非规则另有说明。 这就像说这些类型的流量都可以。
- 入站数据包 – 从 wifi 客户端发送到 Raspberry Pi 的请求
- 转发的数据包 – 从 wifi 客户端到 Internet 的请求
- 出站数据包 – PI 发送到 wifi 客户端的请求
但是,有一个隐藏的问题:从 wifi 客户端(例如您的工作站)到 Raspberry Pi 的请求可能会被拒绝。 最后一行——丰富规则部分的神秘规则——指的是 路由策略数据库. 该规则阻止您使用如下命令从工作站连接到 Pi:ssh 10.42.0.1。 此规则仅影响发送到 Raspberry Pi 的流量,而不影响发送到 Internet 的流量,因此浏览网页工作正常。
如果入站数据包与服务和协议列表中的内容匹配,则允许通过。 NetworkManager 自动添加 ICMP、DHCP 和 DNS(互联网基础设施服务和协议)。 SSH 数据包不匹配,到达 后期处理 阶段,并被拒绝——priority=”32767″ 翻译为“在所有处理完成后执行此操作”。
如果您想知道幕后发生了什么,那么丰富的规则会创建一个 nftables 规则。 nftables 规则看起来像这样。
$ sudo nft list chain inet firewalld filter_IN_nm-shared_post table inet firewalld { chain filter_IN_nm-shared_post { reject } }
修复 SSH 登录
使用 SSH 从您的工作站连接到 Raspberry Pi。由于丰富的规则,这将不起作用。 不在列表中的协议会立即被拒绝。
检查 SSH 是否被阻止:
$ ssh 10.42.0.1 ssh: connect to host 10.42.0.1 port 22: Connection refused
接下来,将 SSH 添加到允许的服务列表中。 如果您不记得定义了哪些服务,请使用 firewall-cmd ‐‐get-services 列出所有服务。 对于 SSH,请使用选项 ‐‐add-service ssh 或‐‐remove-service ssh。 不要忘记使更改永久化。
$ sudo firewall-cmd --add-service ssh --permanent --zone=nm-shared success
现在再次使用 SSH 进行测试。
$ ssh 10.42.0.1 The authenticity of host '10.42.0.1 (10.42.0.1)' can't be established. ECDSA key fingerprint is SHA256:dDdgJpDSMNKR5h0cnpiegyFGAwGD24Dgjg82/NUC3Bc. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.42.0.1' (ECDSA) to the list of known hosts. Last login: Tue Jun 9 18:58:36 2020 from 10.0.1.35 [email protected]'s password:
SSH 访问不再被阻止。
作为无头计算机进行测试
树莓派运行良好 无头电脑. 从这里开始,您可以使用 SSH 在您的 Pi 上工作。
- 关闭电源。
- 卸下键盘和视频监视器。
- 打开。
- 等待几分钟。
- 使用 SSH 从您的工作站连接到 Raspberry Pi。 使用有线接口或无线接口; 两者都工作。
使用 WPA-PSK 提高安全性
WPA-PSK(带有预共享密钥的 Wifi 保护访问)系统专为家庭用户和小型办公室而设计。 它受密码保护。 再次使用 nmcli 添加 WPA-PSK:
$ sudo nmcli con modify "raspi hotspot" wifi-sec.key-mgmt wpa-psk $ sudo nmcli con modify "raspi hotspot" wifi-sec.psk "hotspot-password"
故障排除
这里有一些建议:
- 我的 journalctl、谷歌和论坛。
- 加入 Fedora ARM 邮件列表.
坏消息是,这里没有故障排除提示。 有很多事情可能会出错,没有办法覆盖它们。
对网络堆栈进行故障排除很棘手。 如果一个组件出错,它可能全部出错。 进行重新加载防火墙规则等更改可能会扰乱 NetworkManager 和 sshd 等服务。 当你发现自己在奔跑时,你就知道自己陷入了困境 nftables 命令 像 nft 列表规则集和 防火墙命令 比如firewall-cmd ‐‐set-log-denied=all。
玩你的新平台
为您的新 AP 增值。 由于您运行的是 Pi,因此有许多硬件附加组件。 既然正在运行 Fedora,您有数以千计的软件包可用。 尝试将其变成迷你 NAS,或添加备用电池,或者音乐播放器。