单细胞生物都能学会的树莓派4B实现路由器

news2024/9/22 23:32:27

本文参考自CSDN用户羟基氟化宇的畅玩树莓派4B(二)树莓派搭建无线路由器(支持5GWIFI)
本文补充其中的细节及遇到的问题。
本文提及的代码,均需在树莓派终端中运行。

〇、硬件准备

树莓派4B一个、网线一根。
(如果需要从树莓派再引网线出去,还需要网口->USB转接器一个、额外网线一根)
将网线插入树莓派就可以开始以下操作啦。
具体接线在此不赘述,就跟普通路由器一样接。

一、工具安装

为了可以从更快或者更可靠的服务器下载软件包,需要修改软件源。
打开软件源文件,修改其中的软件源:

sudo nano /etc/apt/sources.list

在打开的文件中,注释掉原有的软件源。
根据 Debian 版本(bullseye 或 buster)的不同,所需修改的软件源也不同。
如果文件首行出现“bullseye”,则在文件末尾添加:

deb https://mirror.nju.edu.cn/debian/ bullseye main contrib non-free
deb https://mirror.nju.edu.cn/debian-security/ bullseye-security main contrib non-free
deb https://mirror.nju.edu.cn/debian bullseye-updates main contrib non-free

如果出现“buster”,则在文件末尾添加:

deb https://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free rpi
deb-src https://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free rpi

在这里插入图片描述
ctrl+x退出并按y保存文件。执行语句安装工具:

sudo apt-get update
sudo apt-get install -y hostapd dnsmasq iptables dnsutils
  1. hostapd (Host Access Point Daemon): 这是一个使设备能够作为无线接入点的软件。hostapd 允许树莓派广播其自己的无线网络SSID,使其他设备能够连接到这个由树莓派创建的网络。

  2. dnsmasq: 这是一个轻量级的DNS和DHCP服务器,常用于小型网络(如家庭网络)。dnsmasq 可以为连接到树莓派的设备分配IP地址,并处理DNS解析。

  3. iptables: 这是一个灵活的网络流量管理工具,它通过设置规则来控制数据包的流向。iptables 用于设置网络路由规则,如NAT(网络地址转换),以允许多个设备共享同一个互联网连接。

  4. dnsutils: 这个包提供了用于查询和诊断DNS的工具,如dig和nslookup。这些工具可以帮助调试和管理网络上的DNS问题。

二、网卡配置

此步骤主要用于配置树莓派的无线网络接口(wlan0),使其作为一个静态IP地址的无线接入点,同时通过图形界面设置无线网络的SSID(网络名)和密码。

打开网络接口的配置文件。:

sudo nano /etc/network/interfaces

在文件末尾添加:

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
      address 192.168.90.1
      netmask 255.255.255.0

auto wlan0:表示在启动时自动激活wlan0网络接口。
allow-hotplug wlan0:如果这个接口是热插拔的(如USB无线网卡),则当它被插入时自动启动。
iface wlan0 inet static:为wlan0接口指定静态IP地址的配置。
address 192.168.90.1:设置树莓派无线网卡的IP地址。要注意不要与其他设备的地址冲突。
netmask 255.255.255.0:设置网络掩码,决定了网络的大小。
在这里插入图片描述
保存后打开配置工具

sudo raspi-config

在这里插入图片描述
在这里插入图片描述
依次选择后配置SSID和passphrase,即该路由器广播的无线网络的名称和访问密码。
在原文中还有选择地区为US(因为不同的国家有不同的无线频段和功率限制)的步骤,但笔者并没有遇到这一步。可以手动编辑无线网络配置文件:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

将里面的Country手动改成US即可。

三、DHCP和DNS配置

先对dns配置文件进行备份,然后打开:

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo nano /etc/dnsmasq.conf

在打开的文件末尾添加:

# DHCP
interface=wlan0
bind-interfaces
dhcp-range=192.168.90.100,192.168.90.200,48h

# DNS
log-queries
log-facility=/home/pi/logs/dnsmasq.log
no-hosts
clear-on-reload
dns-forward-max=1000
all-servers
server=8.8.8.8
server=208.67.222.222
server=4.2.2.1

interface=wlan0:指定 dnsmasq 服务绑定到哪个网络接口,这里是 wlan0,即树莓派的无线网卡。
bind-interfaces:确保 dnsmasq 只使用指定的接口,避免在多网卡设备上出现混淆。
dhcp-range=192.168.90.100,192.168.90.200,48h:设置DHCP地址池,从 192.168.90.100 到 192.168.90.200,租期为48小时。这意味着连接到树莓派的设备将从这个范围内自动获取IP地址。
log-queries:记录所有DNS查询,有助于调试和监控网络活动。
log-facility=/home/pi/logs/dnsmasq.log:指定日志文件的位置
no-hosts:不从 /etc/hosts 文件读取本地DNS记录。
clear-on-reload:重新加载配置文件时清空DNS缓存,这有助于保证配置更改立即生效。
dns-forward-max=1000:限制最大并发DNS转发请求的数量,这里设置为1000。
all-servers:查询所有配置的DNS服务器,而不是只查询一个直到得到响应。
server=8.8.8.8、server=208.67.222.222、server=4.2.2.1:设置用于DNS查询的上游DNS服务器,这些都是公共DNS服务器,提供稳定和快速的DNS解析服务。

保存后重启dnsmasq服务:

sudo service dnsmasq restart

接着,可以配置国内域名走国内DNS服务器解析
使用 curl 从 GitHub 上下载 felixonmars 的 dnsmasq-china-list,这是一个专门为中国大陆域名优化的DNS解析列表。
223.5.5.5 是阿里巴巴的公共DNS,也可以用腾讯的119.29.29.29,百度的180.76.76.76等。

sudo bash -c "curl -s https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf | sed 's/114.114.114.114/223.5.5.5/g' > /etc/dnsmasq.d/accelerated-domains.china.conf"

使用Github上的privacy-protection-tools/anti-AD禁广告,dnsmasq 将自动拦截那些已知的广告和跟踪域名的DNS请求

sudo bash -c "curl -s https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/adblock-for-dnsmasq.conf > /etc/dnsmasq.d/adblock-for-dnsmasq.conf"

四、配置转发

此步骤是为了确保树莓派能够作为一个有效的路由器和网关,处理内外网络间的数据转发和地址转换,允许内部网络的设备通过树莓派接入互联网。

首先编辑文件

sudo nano /etc/sysctl.conf

去掉net.ipv4.ip_forward=1的注释。随后执行:

sudo sysctl -p

这将启用IP转发功能,允许树莓派转发接收到的数据包,使其可以在不同的网络接口之间路由数据包。
再依次运行下列命令以配置NAT:

# 清空现有的iptables规则
sudo iptables -F
sudo iptables -X
# 添加一个NAT规则,用于将从wlan0(无线网络接口)出去的数据包的源地址转换为eth0(有线网络接口)的IP地址。
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 允许从外部网络回应内网请求的数据包通过
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 允许从内网出去的数据包通过
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
# 保存当前的iptables规则到文件中
sudo bash -c "iptables-save > /etc/iptables.rules"

编辑文件:

sudo nano /etc/rc.local

在exit 0前面添加:

iptables-restore < /etc/iptables.rules

这条命令在系统启动时自动加载保存的iptables规则,确保每次启动后防火墙规则都能正确应用。
在这里插入图片描述

五、配置hostapd

编辑配置文件

sudo nano /etc/hostapd/hostapd.conf
# 网卡,一般就是wlan0不用修改,除非使用了外接的无线网卡。
interface=wlan0
# 不用修改
driver=nl80211
# 5G
hw_mode=a
# 启用 802.11n
ieee80211n=1
# 启用 802.11ac
ieee80211ac=1
# 启用 802.11d
ieee80211d=1
# 启用 802.11h
ieee80211h=1
# 其他的国家代码似乎会出错
country_code=US
# (Wi-Fi MultiMedia) 多媒体优化,优先传输时间敏感型数据
wmm_enabled=1
# 信道。可选[36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165]
channel=149
# (high-throughput 高吞吐量) 802.11n的带宽扩展技术
require_ht=1
# (very high throughput)   802.11ac的带宽扩展技术
require_vht=1
# 工作带宽 40MHz
vht_oper_chwidth=1
# channel+6 
vht_oper_centr_freq_seg0_idx=155
# 查看本小节后面的说明(硬件支持)
ht_capab=
# 查看本小节后面的说明(硬件支持)
vht_capab=
# 认证方式:WPA2-PSK
wpa=2
wpa_key_mgmt=WPA-PSK
# 加密方式:CCMP
rsn_pairwise=CCMP
# WIFI信息(根据自己的需求修改)
# wifi名称(就是搜索WIFI时显示的名字)
ssid=RASPI-WIFI
# wifi密码(就是连接WIFI时输入的密码)(必须8位以上,也就是最少输8个字母或数字)
wpa_passphrase=12345678

上面的配置中,ht_capab和vht_capab的内容与硬件支持密切相关。执行此代码查看硬件支持情况:

iw phy phy0 info

找到Capabilities
在这里插入图片描述
按照以下选项配置:

[LDPC]
	LDPC coding capability
[HT40-][HT40+]
	[HT40-] = both 20 MHz and 40 MHz with secondary channel below the primary channel;
	[HT40+] = both 20 MHz and 40 MHz with secondary channel above the primary channel;
	(20 MHz only if neither is set)
[SHORT-GI-20]
	Short GI for 20 MHz
[SHORT-GI-40]
	Short GI for 40 MHz
[TX-STBC]
	Tx STBC
[RX-STBC1][RX-STBC12][RX-STBC123]
	Rx STBC
[DELAYED-BA]
	HT-delayed Block Ack
[MAX-AMSDU-7935]
	Maximum A-MSDU length (3839 octets if not set)
[DSSS_CCK-40]
	DSSS/CCK Mode in 40 MHz
[40-INTOLERANT]
	40 MHz intolerant
[LSIG-TXOP-PROT]
	L-SIG TXOP protection support

我的配置为:

ht_capab=[HT40-][HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]

找到VHT Capabilities
在这里插入图片描述
按照以下选项进行配置:

[MAX-MPDU-3895][MAX-MPDU-7991][MAX-MPDU-11454]
	Indicates maximum MPDU length
[VHT160][VHT160-80PLUS80]
	Indicates supported Channel widths
[RXLDPC]
	Rx LDPC coding capability.
[SHORT-GI-80]
	Short GI for 80 MHz
[SHORT-GI-160]
	Short GI for 160 MHz
[TX-STBC-2BY1]
	Tx STBC
[RX-STBC-1][RX-STBC-12][RX-STBC-123][RX-STBC-1234]
	Rx STBC: 
[SU-BEAMFORMER]
	SU Beamformer Capable
[SU-BEAMFORMEE]
	SU Beamformee Capable
[BF-ANTENNA-2][BF-ANTENNA-3][BF-ANTENNA-4]
	Compressed Steering Number of Beamformer Antennas Supported
	If SU beamformer capable, set to maximum value minus 1
[SOUNDING-DIMENSION-2][SOUNDING-DIMENSION-3][SOUNDING-DIMENSION-4]
	Number of Sounding Dimensions
[MU-BEAMFORMER]
	MU Beamformer Capable
[VHT-TXOP-PS]
	VHT TXOP PS
[HTC-VHT]
	+HTC-VHT Capable
	Indicates whether or not the STA supports receiving a VHT variant HT Control field.
[MAX-A-MPDU-LEN-EXP0][MAX-A-MPDU-LEN-EXP7]
	Maximum A-MPDU Length Exponent
[VHT-LINK-ADAPT2][VHT-LINK-ADAPT3]
	VHT Link Adaptation Capable
[RX-ANTENNA-PATTERN]
	Rx Antenna Pattern Consistency
[TX-ANTENNA-PATTERN]
	Tx Antenna Pattern Consistency

我的配置为:

vht_capab=[MAX-MPDU-3895][SHORT-GI-80][SU-BEAMFORMEE]

随后,执行:

sudo hostapd /etc/hostapd/hostapd.conf

如果没有问题就会看到AP-ENABLED
在这里插入图片描述

六、服务启停与状态查看

查询hostapd工作状态:

sudo systemctl status hostapd

如果发现状态是inactive,可以手动开启:

sudo systemctl start hostapd

也可以手动停止:

sudo systemctl stop hostapd

笔者在刚开始配置时遇到如下问题:

ty@raspberrypi:~ $ sudo systemctl start hostapd
Failed to start hostapd.service: Unit hostapd.service is masked.
ty@raspberrypi:~ $ sudo systemctl status hostapd
● hostapd.service
     Loaded: masked (Reason: Unit hostapd.service is masked.)
     Active: inactive (dead)

此时需要手动解除屏蔽:

sudo systemctl unmask hostapd

然后重启服务。
此时应该可以搜索到配置的WIFI信号了。
如果手机还是搜索不到对应的WIFI,尝试重启树莓派。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NoSQL数据库】Redis学习笔记

一、缓存穿透 缓存穿透是先查Redis&#xff0c;发现缓存中没有数据&#xff0c;再查数据库。然而&#xff0c;如果查询的数据在数据库中也不存在&#xff0c;那么每次查询都会绕过缓存&#xff0c;直接落到数据库上。 解决方案一、缓存空数据 查询Redis缓存&#xff1a;首先查…

前后端分离项目部署,vue--nagix发布部署,.net--API发布部署。

目录 Nginx免安装部署文件包准备一、vue前端部署1、修改http.js2、npm run build 编译项目3、解压Nginx免安装,修改nginx.conf二、.net后端发布部署1、编辑appsetting.json,配置跨域请求2、配置WebApi,点击发布3、配置文件发布到那个文件夹4、配置发布相关选项5、点击保存,…

中电金信:AI数据服务

01 方案简介 AI数据服务解决方案为泛娱乐、电子商务、交通出行等行业提供数据处理、数据分析、AI模型训练等服务&#xff0c;通过自主研发的IDSC自动化数据服务平台与客户业务流程无缝衔接&#xff0c;实现超低延时的实时数据处理支持。 02 应用场景 智能医疗&#xff1a; 通…

Ribbon负载均衡与内核原理

什么是Ribbon? 目前主流的负载方案分为两种&#xff1a; 集中式负载均衡&#xff0c;在消费者和服务提供方中间使用独立的代理方式进行负载&#xff0c;有硬件的&#xff08;比如F5&#xff09;&#xff0c;也有软件的&#xff08;Nginx&#xff09;客户端根据自己的请求做负…

transformers进行学习率调整lr_scheduler(warmup)

一、get_scheduler实现warmup 1、warmup基本思想 Warmup&#xff08;预热&#xff09;是深度学习训练中的一种技巧&#xff0c;旨在逐步增加学习率以稳定训练过程&#xff0c;特别是在训练的早期阶段。它主要用于防止在训练初期因学习率过大导致的模型参数剧烈波动或不稳定。…

力扣经典题目之->设计循环队列 的超详细讲解与实现

一&#xff1a;题目 二&#xff1a;思路讲解 前提&#xff1a; a&#xff1a;本文采取数组来实现队列去解决题目 b&#xff1a;开辟k1个空间&#xff0c;front指向队首&#xff0c;rear指向队尾的后一个&#xff0c;rear这样会更好的判空和判满 以下根据pop和push感受满和空…

python如何调用matlab python package库matlab转python安装包调用使用简单示例

说明(废话) 之前没有进行python调用过matlab&#xff0c;前面用matlab engine for python可以通过调用matlab的源码文件的形式可以调用工程&#xff0c;但是这又有一个问题&#xff0c;就是在运行的时候必须提供python和matlab的全部源码 该文章是通过matlab源码转python pack…

FPGA JTAG最小系统 EP2C5T144C8N

FPGA的文档没有相应的基础还真不容易看懂&#xff0c;下面是B站上对FPGA文档的解读(本文非对文档解读&#xff0c;只是为个人记录第三期&#xff1a;CycloneIV E最小系统板设计&#xff08;一&#xff09;从Datasheet上获取FPGA的基本参数_哔哩哔哩_bilibili 电源部份 核心电…

PlantUML 语法、图标和示例

基本语法 关键字 声明参与者的几个关键字 actor、boundary、control、entity、database、collections、participant 箭头样式 我们可以通过&#xff0c;修改箭头样式&#xff0c;来表达不一样的意思&#xff1a; 表示一条丢失的消息&#xff1a;末尾加 x让箭头只有上半部…

[UE 虚幻引擎] DTHmacSha 蓝图HMACSHA加密算法插件说明

本插件可以在虚幻引擎中使用蓝图对字符串和文件进行HMACSHA加密。 1.节点说明 HMACSHA一共有5种加密方式&#xff0c;分辨是 HMAC SHA-1&#xff0c; HMAC SHA-224&#xff0c;HMAC SHA-256&#xff0c;HMAC SHA-384&#xff0c;HMAC SHA-512。 本插件对每种加密方式提供3个节点…

C++初学者指南-6.函数对象--函数对象

C初学者指南-6.函数对象–函数对象 文章目录 C初学者指南-6.函数对象--函数对象函数对象示例&#xff1a;区间查询区间内的查找区间划分(分组) 指南标准库函数对象比较算术运算 函数对象 提供至少一个成员函数重载 operator() 的对象 class Multiplier {int m_; public:// cons…

MATLAB绘制方波、锯齿波、三角波、正弦波和余弦波、

一、引言 MATLAB是一种具有很强的数值计算和数据可视化软件&#xff0c;提供了许多内置函数来简化数学运算和图形的快速生成。在MATLAB中&#xff0c;你可以使用多种方法来快速绘制正弦波、方波和三角波。以下是一些基本的示例&#xff0c;展示了如何使用MATLAB的命令来实现正弦…

centos系统mysql主从复制(一主一从)

文章目录 mysql80主从复制&#xff08;一主一从&#xff09;一、环境二、服务器master1操作1.开启二进制日志2. 创建复制用户3. 服务器 slave1操作4. 在主数据库中添加数据 mysql80主从复制&#xff08;一主一从&#xff09; 一、环境 准备两台服务器&#xff0c;都进行以下操…

入门C语言Day15——关系条件逻辑操作符

今天来学习操作符中的一些内容&#xff0c;主要讲的是关系&条件&逻辑操作符 1.关系操作符 首先要来了解一下什么是关系操作符&#xff0c;关系操作符其实就是关系运算符&#xff0c;关系运算符又和关系表达式有关。 C语言中用于比较的表达式&#xff0c;就被称为 “关…

google、windows自带语音识别中英文等实时字幕使用

2、自带实时字幕 1&#xff09;google浏览器自带 实时字幕 设置里可以设置&#xff1a; 有视频声音播放会弹出黑色文本框 下载其他语言包-比如中文&#xff1a; 测试 2&#xff09;windows11 辅助功能 实时字幕 &#xff08;直接快捷键打开&#xff1a;Win Ctrl L&#…

openmv学习笔记(24电赛笔记)

#opemv代码烧录清除详解 openmv的代码脱离IDE运行程序&#xff0c;只需要在IDE中将代码烧录道flash里面&#xff0c;断开IDE连接&#xff0c;上电之后&#xff0c;会自动执行main.py中的程序&#xff0c;IDE烧录的时候&#xff0c;会默认将程序后缀保存为 .py文件。 ​​​​​…

go语言day16 runtime包 临界资源 sync包

深入理解Java虚拟机到底是什么_java虚拟机是什么-CSDN博客 Golang-100-Days/Day16-20(Go语言基础进阶)/day17_Go语言并发Goroutine.md at master rubyhan1314/Golang-100-Days GitHub runtime 类似jvm&#xff0c;runtime包也提供了垃圾回收功能。 并且jvm实现了对线程创建销…

自动化网络爬虫:如何它成为提升数据收集效率的终极武器?

摘要 本文深入探讨了自动化网络爬虫技术如何彻底改变数据收集领域的游戏规则&#xff0c;揭示其作为提升工作效率的终极工具的奥秘。通过分析其工作原理、优势及实际应用案例&#xff0c;我们向读者展示了如何利用这一强大工具加速业务决策过程&#xff0c;同时保持数据收集的…

vuepress搭建个人文档

vuepress搭建个人文档 文章目录 vuepress搭建个人文档前言一、VuePress了解二、vuepress-reco主题个人博客搭建三、vuepress博客部署四、vuepress后续补充 总结 vuepress搭建个人文档 所属目录&#xff1a;项目研究创建时间&#xff1a;2024/7/23作者&#xff1a;星云<Xing…

Java响应式编程库Reactor的介绍和基本使用

关于响应式编程的概念和介绍可以参考: 响应式编程(Reactive Programming)是什么? Java语言中,RxJava和Reactor是实现响应式编程的两个最流行的库,因为 Spring 5 及更高版本中,Reactor 是 Spring WebFlux 的底层实现框架,用于构建响应式 Web 应用,所以相比而言,Reactor…