HDU寝室断电快乐上网指南(基于树莓派3B+的软路由
前言
本人是HDU的一枚学生,众所周知,每逢春夏、秋冬之交,寝室会迎来夜晚的停电,目的是让学生拥有良好的作息时间。
每当这时,我就不能在夜晚快乐的学习了。
于是到了夜晚的断电时间,大家的手机都在争抢着流量,真没想到连使用手机移动数据都有卡顿的一天。
犹记得以前看S赛时卡的真是一顿一顿的非常影响体验…
然鹅,虽然断电,
但是每个寝室的网口却是不断网的!
我的小脑袋瓜子开始了思考…
准备工作
- 树莓派3B+(其它树莓派版本应该皆可
- 一个宽带账号
- 若干网线
- 一个充电宝
- 一个善于解决问题的大脑
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. 题外话
- 路由规则等树莓派重启就消失了。
-
拨号连接重启后会自动拨号,不需要
sudo pppoeconf
重新拨号,否则容易出现
7.2 多个ppp连接,例如有ppp0、ppp1等
这样的问题。 -
为了避免出现
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
结束语
到这里为止基本上是完成了。
丢在角落里的树莓派终于派上用场了。
寝室断电时,树莓派连上充电宝,秒变软路由美滋滋!
只可惜快要毕业了,可能以后也用不到了吧!