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

  • Post author:
  • Post category:其他




前言

本人是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=nl80211

hw_mode=a
ieee80211n=1
ieee80211ac=1
ieee80211d=1
ieee80211h=1
require_ht=1
require_vht=1
wmm_enabled=1
country_code=US

vht_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=CCMP

ssid=热点名字
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.d

auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth0 up
provider dsl-provider

#auto lo
#iface lo inet loopback
 
auto eth0
iface eth0 inet manual

auto 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



结束语

到这里为止基本上是完成了。

丢在角落里的树莓派终于派上用场了。

寝室断电时,树莓派连上充电宝,秒变软路由美滋滋!

只可惜快要毕业了,可能以后也用不到了吧!



版权声明:本文为qq408029164原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。