HDU寝室断电快乐上网指南(基于树莓派3B+的软路由

  • 前言
  • 准备工作
  • 1. PPPOE拨号上网
  • 2. 解除禁用网卡
  • 3. 安装一些其它必要程序
    • 3.1 hostapd
    • 3.2 dnsmasq
  • 4. WIFI热点配置
    • 4.1 解除禁用hostapd
    • 4.2 配置hostapd开机启动(可选
    • 4.3 配置DHCP服务
    • 4.4 配置热点信息
    • 4.5 配置路由转发
  • 5.开机启动(可选
  • 6.获取ipv6地址(可选
  • 7. 常见问题:
    • 7.1 No wireless interfaces found
      • 7.1.1 解决方法
    • 7.2 多个ppp连接,例如有ppp0、ppp1等
      • 7.2.1 解决方法
    • 7.3 找不到热点
      • 7.3.1 解决方法
    • 7.4 没有网络连接
      • 7.4.1 若树莓派有网,热点连接设备没网,则可能是DHCP的问题
      • 7.4.2 若树莓派没网,建议重新拨号,并设置正确的端口转发
    • 7.5 安装pppoe时提示找不到
      • 7.5.1 解决方法
    • 7.6 树莓派连接其它WiFi无法上网
      • 7.6.1 解决方法
    • 7.7 设备连接不上
  • 8. 题外话
  • 结束语

前言

本人是HDU的一枚学生,众所周知,每逢春夏、秋冬之交,寝室会迎来夜晚的停电,目的是让学生拥有良好的作息时间。每当这时,我就不能在夜晚快乐的学习了。
于是到了夜晚的断电时间,大家的手机都在争抢着流量,真没想到连使用手机移动数据都有卡顿的一天。犹记得以前看S赛时卡的真是一顿一顿的非常影响体验…
然鹅,虽然断电,但是每个寝室的网口却是不断网的!
我的小脑袋瓜子开始了思考…

准备工作

  1. 树莓派3B+(其它树莓派版本应该皆可
  2. 一个宽带账号
  3. 若干网线
  4. 一个充电宝
  5. 一个善于解决问题的大脑

1. PPPOE拨号上网

学校网口是需要拨号连接的,而树莓派本身是不能进行拨号的,因此直接插网口上网是不行的啦,需要安装相关包。
首先安装拨号上网需要的一些包。

sudo apt-get update
sudo apt-get install libcap-dev pppoe pppoeconf pppstatus

然后配置上网账号

sudo pppoeconf

全选yes,中间会要输入账号密码
配置好之后ifconfig命令会多一个ppp0接口

2. 解除禁用网卡

或许以下命令用得到,所以也就放在这里了。
使用如下命令获得设备列表,每个都包含与之关联的索引号 ,从 0 开始。

rfkill list

解除无线网卡禁用

rfkill unblock wifi

3. 安装一些其它必要程序

装程序之前最好更新一下软件源列表

sudo apt-get update

3.1 hostapd

sudo apt install hostapd

这个是开启热点用的主要程序,用它来通过无线网卡发射信号

3.2 dnsmasq

sudo apt install dnsmasq

这个用作热点的DHCP服务和DNS服务

4. WIFI热点配置

4.1 解除禁用hostapd

sudo systemctl unmask hostapd

4.2 配置hostapd开机启动(可选

sudo systemctl enable hostapd

4.3 配置DHCP服务

修改配置文件/etc/dhcpcd.conf

interface wlan0
static ip_address=192.168.1.1/24
nohook wpa_supplicant

这里把名字叫wlan0的接口设置了静态IP地址192.168.1.1,同时/24表明子网掩码是255.255.255.0
装好了dnsmasq之后会生成一个/etc/dnsmasq.conf配置文件,可以直接覆盖,或者把原来的保存起来,新建一个同名的文件进行配置,内容是

# 在wlan0接口上服务
interface=wlan0
# DHCP的地址池
dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,24h
# DNS的域名
domain=pi
# 这个路由器的别名(连接热点的设备可以通过login.pi来访问树莓派)
address=/login.pi/192.168.1.1

之后输入

sudo vi /etc/default/hostapd

取消注释

DAEMON_CONF="/etc/hostapd.conf"

4.4 配置热点信息

配置hostapd,修改配置文件/etc/hostapd/hostapd.conf

country_code=CN
interface=wlan0
ssid=热点名字
hw_mode=g
channel=7
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=热点密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

若是5Ghz,输入以下命令

interface=wlan0
driver=nl80211hw_mode=a
ieee80211n=1
ieee80211ac=1
ieee80211d=1
ieee80211h=1
require_ht=1
require_vht=1
wmm_enabled=1
country_code=USvht_oper_chwidth=1
channel=149
vht_oper_centr_freq_seg0_idx=155
ht_capab=[HT40-][HT40+][SHORT-GI-40][DSSS_CCK-40]wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMPssid=热点名字
wpa_passphrase=热点密码

配置好以上信息,理论上树莓派就能够开启热点并让设备连接了
树莓派默认是禁用无线网卡的,所以最好确保解除禁用无线网卡

sudo rfkill unblock wlan

可以通过以下命令重启树莓派,检查热点是否正常开启

sudo systemctl reboot

4.5 配置路由转发

首先要确保系统允许路由转发
配置文件/etc/sysctl.conf把下面的那一行取消注释,或者直接添加

net.ipv4.ip_forward=1

完成后,执行sudo sysctl -p来让配置生效。
允许路由转发后,通过iptables来配置路由转发
执行以下命令

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

这个命令会将从接口eth0的出去的请求的源IP地址替换为树莓派在公网上的IP地址。将进来的响应的目标IP地址替换成原请求的原IP地址。也就是说这一条是热点能够连接互联网的关键。
注意:如果是拨号上网的话,配置好下面的再执行这个命令,其中的eth0改成ppp0

5.开机启动(可选

Linux系统在启动的时候,各项服务都是由systemd进行管理的,rc.local只是其中的一片服务。对于比较简单的启动指令,可以放在这里面进行。

把指令添加到/etc/rc.local中,放在exit 0之前即可。

6.获取ipv6地址(可选

首先打开 /etc/ppp/options 这是pppoe的配置文件

sudo vi /etc/ppp/options

在任何位置加入

+ipv6 ipv6cp-use-ipaddr

如果感兴趣的话可以仔细翻阅ppp options的所有配置选项,简单来说这一行的意思就是开启ipv6。
最后再

sudo poff
sudo pon dsl-provider

来重启pppoe拨号,等到成功之后,就能发现获取到了原生的ipv6地址。
最后将ppp0添加到系统的默认路由表中

sudo route add default ppp0

7. 常见问题:

7.1 No wireless interfaces found

一般是因为频繁切换网卡功能导致的,在网上没搜到很好的解决方法。
我是这样解决的,供大家参考。

7.1.1 解决方法

修改interfaces.d

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.dauto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth0 up
provider dsl-provider#auto lo
#iface lo inet loopbackauto eth0
iface eth0 inet manualauto wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

别忘了重启

reboot

7.2 多个ppp连接,例如有ppp0、ppp1等

我出现这样的情况是因为输入ifconfig时没有看到ppp连接,所以输入sudo pppoeconf进行拨号,没想到之前的拨号自动连接需要一点儿时间,然后就造成多个ppp连接了。

7.2.1 解决方法

关闭所有拨号连接

sudo poff -a

重新设置拨号连接

sudo pppoeconf

7.3 找不到热点

可能是热点创建失败了。尝试以下解决方法。

7.3.1 解决方法

停止hostapd

sudo service hostapd stop

启用hostapd

sudo service hostapd start

注意:不能既连上WIFI又打开热点
可能需要以下命令:

sudo service hostapd stop
sudo ifconfig wlan0 down
sudo ifconfig wlan0 up
sudo service hostapd start

7.4 没有网络连接

7.4.1 若树莓派有网,热点连接设备没网,则可能是DHCP的问题

看一下自己获取的ip和树莓派ip在不在一个网段下
正常情况下连接树莓派热点的设备的信息应该是这样的:

ip: 192.168.1.100~192.168.1.200
子网掩码: 255.255.255.0
网关: 192.168.1.1
首选DNS: 192.168.1.1(好像是这个

设备信息不对的话尝试手动获取ip
修改配置文件/etc/dhcpcd.conf
以下是废话:

interface wlan0
static ip_address=192.168.1.1/24
nohook wpa_supplicant

这里把名字叫wlan0的接口设置了静态IP地址192.168.1.1,同时/24表明子网掩码是255.255.255.0
装好了dnsmasq之后会生成一个/etc/dnsmasq.conf配置文件,可以直接覆盖,或者把原来的保存起来,新建一个同名的文件进行配置,内容是

# 在wlan0接口上服务
interface=wlan0
# DHCP的地址池
dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,24h
# DNS的域名
domain=pi
# 这个路由器的别名(连接热点的设备可以通过login.pi来访问树莓派)
address=/login.pi/192.168.1.1

修改hostapd

sudo vi /etc/default/hostapd

取消注释

DAEMON_CONF="/etc/hostapd.conf"

别忘了重启

reboot

7.4.2 若树莓派没网,建议重新拨号,并设置正确的端口转发

关闭所有拨号连接

sudo poff -a

重新设置拨号连接

sudo pppoeconf

最后将ppp0添加到系统的默认路由表中

sudo route add default ppp0

路由转发

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

7.5 安装pppoe时提示找不到

不知道为什么我这边输入以下命令显示的是找不到库

sudo apt-get install pppoe pppoeconf pppstatus

7.5.1 解决方法

注意首先安装libcap-dev

sudo apt-get install libcap-dev pppoe pppoeconf pppstatus

7.6 树莓派连接其它WiFi无法上网

因为之前我这边把树莓派的 wlan0设置为静态ip了,因此可能需要自己修改一下

7.6.1 解决方法

修改配置文件/etc/dhcpcd.conf

interface wlan0
#把下面的ip改掉,要和树莓派连接的WiFi在一个ip段下
#大概率树莓派的ip: 192.168.1.1和网关冲突
static ip_address=192.168.1.50/24
nohook wpa_supplicant

别忘了重启

reboot

7.7 设备连接不上

这个确实挺玄学,目前没有什么解决方法。

8. 题外话

  1. 路由规则等树莓派重启就消失了。
  2. 拨号连接重启后会自动拨号,不需要sudo pppoeconf重新拨号,否则容易出现7.2 多个ppp连接,例如有ppp0、ppp1等这样的问题。
  3. 为了避免出现7.1 No wireless interfaces found这样的问题,于是本人做了个脚本,保存为no_electrity_run.sh就可以在有需要的时候运行啦。
#no_electrity_run.sh#sudo poff -a
sudo service hostapd stop
#sudo pon dsl-provider
sudo service hostapd start
sudo route add default ppp0
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
#sudo iptables -A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#sudo iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEPT
sudo ifconfig wlan0 down
sudo ifconfig wlan0 up
sudo service hostapd start

结束语

到这里为止基本上是完成了。
丢在角落里的树莓派终于派上用场了。
寝室断电时,树莓派连上充电宝,秒变软路由美滋滋!
只可惜快要毕业了,可能以后也用不到了吧!

HDU寝室断电快乐上网指南(基于树莓派3B+的软路由相关推荐

  1. 树莓派3B实现软路由过程记录(无线网络通过网线共享给台式机)

    树莓派3B实现软路由过程记录 背景 实验过程 准备openwrt固件 向TF卡里刷入固件 设置路由器 总结 背景 实验室有一台台式机电脑,没有无线网卡,之前一直使用有线网上网,但体验极差.后实际测试时 ...

  2. 基于树莓派3b+学习视觉slam

    基于树莓派3b+学习视觉slam(1) 搭建ubuntu mate16.04 参考jacka654321的博客树莓派3B+安装Ubuntu Mate 16.04 PS:本人使用外接显示屏与外设并没有用 ...

  3. smtp在线发送邮件_基于树莓派3B,利用爬虫、SMTP和发送邮件amp;amp;(爬取墨迹天气预报信息)...

    转载请注明: 利用爬虫.SMTP和树莓派3B发送邮件&续集&(爬取墨迹天气预报信息) - 永怀一颗学徒的心 - 博客园​www.cnblogs.com ZXPXBB:基于树莓派3B,利 ...

  4. MTCNN人脸及特征点检测--基于树莓派3B+及ncnn架构

    概述 本文尝试在树莓派3B+上用ncnn框架测试MTCNN. ncnn的基本编译和使用请参考<在树莓派3B+上编译ncnn并用benchmark和mobilenet_yolo测试>.本文在 ...

  5. 基于树莓派3b的嵌入式实验——蓝牙通信实验(python)

    1.实验内容 本实验以树莓派开发板作为控制板,通过树莓派的 USB 母座连接 USB 转串口模块,再使用 板载蓝牙连接蓝牙模块,通过蓝牙模块发送控制信息,板载蓝牙模块接收并点亮 LED 模块 上不同位 ...

  6. 土壤湿度使用详细教程(基于树莓派3b+)

    案列: 本案列是:根据土壤湿度自动打开水泵浇水 前言: 土壤湿度传感器,直接读取具体土壤湿度使用AO口,目前树莓派AO不能直接使用,所以需要借用PCF8591读取具体具体数值(PCF8591必须使用) ...

  7. 烟雾传感器(mq-2)使用详细教程(基于树莓派3b+实现)

    经验: 网上大部分关于mq-2的代码,实现的功能判断是否有烟雾值,而具体的烟雾值无法读取.由于树莓派无法直接读取模拟信号A0值,所以得借助PCF8591(读取烟雾值关键adc)读取,这个PCF8591 ...

  8. ARM汇编(基于树莓派3B)2

    第四章 控制程序流 无条件跳转 B label :最大允许跳转32MB范围 关于CPSR 条件标志位: • Negative(负数标志位): N is 1 if the signed value is ...

  9. 基于docker实现openwrt软路由与OMV(NAS)应用

    记录一下搭建过程 一.安装debian11 1.下载debian11安装光盘iso 建议下载DVD版本,netinst版本安装时比较慢 https://cdimage.debian.org/debia ...

最新文章

  1. Object #HTMLCanvasElement 的drawImage没有作用的原因
  2. nginx的hash表结构
  3. PostgreSQL MySQL 兼容性之 - bit 函数和操作符
  4. SyntaxError: Missing parentheses in call to 'print'
  5. 每日英语:Apple Unveils New iPads
  6. 线程的生命周期及五种基本状态介绍
  7. 交换机的RJ45端口和SFP端口有什么区别?
  8. 大众点评被合并至美团? 官方回应:不存在这种可能性
  9. 2013-8-9练习[多种方法制作一个计时器]
  10. 非平衡电桥电阻计算_双臂电桥(QJ44)的功能介绍与使用
  11. 1203.1——条件语句 之 if语句
  12. PDF虚拟打印机怎么保存文件
  13. 高等数学学习笔记——第十二讲——正项级数收敛性判别方法
  14. BSC智能链主网节点搭建-2022最新详细版文档
  15. 关于WEB服务器硬件配置,你了解多少
  16. 宣传片后期制作的要点介绍
  17. 辛东方重组百花园传媒 人员大调整
  18. Java高级特性 - 多线程练习题
  19. 网络安全自学入门:(超详细)从入门到精通学习路线规划,学完即可就业
  20. 【MATLAB】理解采样频率和信号频率的关系

热门文章

  1. 本地搭建个人云盘并可远程访问【内网穿透】
  2. 大数据平台核心技术 学堂在线 雨课堂 第七讲作业答案 人文交流月
  3. 关于Ontimer()函数
  4. 汉明码(海明码)解析
  5. Webots学习笔记 4.机器人控制器代码介绍
  6. 什么是智能微电网?智能微电网有什么特点?
  7. 手机便签APP下载安装
  8. docker容器网络的配置及常用操作
  9. css+JavaScript+html打造的非常简单漂亮的网站在线客服代码,鼠标划过可以弹出窗口
  10. 3dsMax制作动画导入到Unity会鬼畜,3Dmax制作的动画如何导入到Unity,Unity使用3dsmax的动画出现神奇的东西