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

本文参考自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,尝试重启树莓派。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
辽B代驾管理系统对代驾订单管理、用户咨询管理、代驾订单评价管理、代驾订单投诉管理、字典管理、论坛管理、公告管理、新闻信息管理、司机管理、用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行辽B代驾管理系统程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。辽B代驾管理系统的开发让用户查看代驾订单信息变得容易,让管理员高效管理代驾订单信息。 辽B代驾管理系统具有管理员角色,用户角色,这几个操作权限。 辽B代驾管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理代驾订单信息,管理公告信息等内容。 辽B代驾管理系统针对用户设置的功能有:查看并修改个人信息,查看代驾订单信息,查看公告信息等内容。 辽B代驾管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理代驾订单信息,管理公告信息等内容。 辽B代驾管理系统针对用户设置的功能有:查看并修改个人信息,查看代驾订单信息,查看公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看代驾订单,删除代驾订单操作,新增代驾订单操作,修改代驾订单操作。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。新闻管理页面,此页面提供给管理员的功能有:新增新闻,修改新闻,删除新闻。新闻类型管理页面,此页面提供给管理员的功能有:新增新闻类型,修改新闻类型,删除新闻类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值