由于某些原因,用了一种新思路打造 Raspberry Pi 无线路由器。先将树莓派和一个usb有线网卡配置成有线路由器,再使用现成的无线路由(Router)提供无线信号。如果你的Raspberry Pi自带的无线网卡经常无法工作,可以试试这个思路。
关键词: Raspberry Pi , 无线路由
本项目隶属于趴会儿Project项目组,详见[企划]趴会儿Project–宿舍床上趴到底&解放双腿计划
项目编号005,分类为信息。
Table of Contents
0.引言
之前做了这个:
基于树莓派的ipv6+OpenVPN校园网免流量无线热点/路由器 -- https://steinslab.io/archives/1103
https://steinslab.io/archives/1103
结合一直以来应用出现的一些问题说一说我为什么要这么做。
0.1我为什么不用树莓派3自带的板载wifi?
因为某些未知的原因,我的树莓派(Raspberry Pi3 B)wifi经常断掉,切无法重启,必须切断电源才行。
结合系统的log,我尝试搜索了解决方案。在中文社区中没有发现报告wifi突然无效的帖子。不过在GitHub上发现了一个issue。
wlan freezes in raspberry pi 3
issue中,有大量的人报告存在wifi模块突然失灵,无法重启服务,只能使用切断电源重启。大家的方法我都试了,发现并没有用。
原wifi AP大概5个小时就会中断死掉。这给我带来了极大问题。这样的话我的设备并不能持续稳定的工作,文件分享、openvpn相关等都突然无法使用。
所以,我选择使用另一个小路由器作为wifi源。
0.2 为什么要用另一个无线路由器作为wifiAP?不是多此一举吗?
是的,很有可能,在你的所在环境或者需求中,用另外一个无线路由器(Router)既增加成本又麻烦。
但是对于下列情况,使用一个额外的路由器可能是很好的选择。
- 树莓派3b(Raspberry Pi 3B)自带的wifi模块工作不稳定时。
- 树莓派1,2等不自带wifi模块,但是由讨厌配置usb无线网卡驱动相关。
- 板载网卡和usb网卡信号过弱。
- 需要在树莓派上爬梯子、ipv6免流等等,单纯地分享网络(理解成360wifi模式),不想买openwrt等智能路由器的
等等。使用的无线路由器不必太过昂贵。比如我就是在tb弄到的20块钱的洋垃圾。这可能都要比tb买一块兼容的usb无线网卡都要便宜,而且不用考虑驱动和供电问题。
1 清单与连接
需要这些东西:
1.树莓派 * 1
约 ¥200。
2.usb有线网卡 * 1
约 ¥25。
建议:usb2.0即可,usb3.0对于树莓派意义不大。我之前有这个,试了试能直接兼容。
3.网线若干
约 ¥20。
CAT6意义不大,买速度稍微合适的就行。
4.无线路由器 * 1
约 ¥20。
买洋垃圾,二手即可。
附:我的路由器是在tb上找的一个洋垃圾,应该是日本AU电信过来的家庭送的路由。自带ipv6穿透。挺好用,有机会说说搞得这个玩意。
另外对速度显示感兴趣的可以看下这个
https://steinslab.io/archives/1164
连接大概是这个拓扑图:
Internet------(自带网卡,eth0)Raspberry Pi --------(usb网卡,eth1)Wireless Router
我是在上一篇文章直接改造的。因此我还有一个wlan0,不提了。可以按照本文直接添加eth1,不冲突。
2 配置
我是在上一篇文章,有无线AP情况下追加配置的。直接按照本章全新配置也可以。
基于树莓派的ipv6+OpenVPN校园网免流量无线热点/路由器 -- https://steinslab.io/archives/1103
2.1 编辑网络配置
sudo nano /etc/network/interfaces
插入的usb有限网卡是eth1,进行静态地址配置。
allow-hotplug eth1 auto eth1 iface eth1 inet static address 192.168.9.1 netmask 255.255.255.0
保存重启,或使用
sudo ifconfig eth1 192.168.9.1 netmask 255.255.255.0
使eth1的静态地址立即生效。
这步请一定要做,重启或者使其立即生效,否则配置dhcp时将报错。
2.2 安装isc-dhcp-server
需要安装dhcp服务以分配地址
安装isc-dhcp-server
sudo apt-get install isc-dhcp-server
配置文件
sudo nano /etc/dhcp/dhcpd.conf
注释掉所有所有文字,输入(或者追加)
subnet 192.168.9.0 netmask 255.255.255.0 { range 192.168.9.10 192.168.9.25; option routers 192.168.9.1; option broadcast-address 192.168.9.255; option domain-name-servers 114.114.114.114,8.8.8.8; default-lease-time 600; max-lease-time 7200; }
注意,网段如 192.168.9.X,应和上端配置的eth1静态地址一致。
以上内容建议手打并检查拼写和格式
开启服务
sudo service isc-dhcp-server start
一般情况下,之前的安装的服务,不需要在配置,已经可以开机自启动了。
2.3 开启转发、配置路由表
目的是让路由器以nat形式接入树莓派网络。
开启内核转发
sudo nano /etc/sysctl.conf
修改
net.ipv4.ip_forward=1
保存,用下列命令使命令生效
sudo sysctl -p
返回 net.ipv4.ip_forward=1
配置路由表
sudo iptables -A FORWARD -i eth1 -j ACCEPT sudo iptables -A FORWARD -o eth1 -j ACCEPT sudo iptables -t nat -A POSTROUTING ! -o eth1 -j MASQUERADE
此路由表的配置参考了
树莓派笔记(1) —— 无线路由器 - http://brieflyx.me/2015/raspberrypi/rpinote1-wifi/
以上规则配置openvpn后仍然有效。
可以加在/etc/rc.local 中,开机自动添加路由规则
!注意!:请一定在exit 0之前添加
sudo nano /etc/rc.local #在exit 0之前加入 sudo iptables -A FORWARD -i eth1 -j ACCEPT sudo iptables -A FORWARD -o eth1 -j ACCEPT sudo iptables -t nat -A POSTROUTING ! -o eth1 -j MASQUERADE
现在,用网线连接usb网卡和无线路由器的wan口,设置路由器为动态ip。
至此,无线路由器作为一个子设备连接到树莓派上。无线设备作为子设备连接在无线路由器上。
2.4 排查问题
遇到任何问题,包括之前的服务配置,都可以使用
sudo nano /var/log/syslog
调到最后一行查看,分析原因
3.完成
总结一下,思路就是先将树莓派配置成有线路由器,然后再将无线路由器接入。避免使用不稳定的无线网络。
此时,树莓派上的smb服务等,在路由器的子网络中仍然可以直接使用。
我在ovpn绕了地球一圈之后,无线网络大概还有20Mbps的速度,要是本地会更快了。就树莓派这个吞吐能力,我觉得这个速度可以接受。
[…] 2017-05-20 No.005 用一种“新思路”打造树莓派软无线路由器 […]
大佬好,我在按照这个方法配置完成后,发现这个树莓派本身无法连接互联网了,没办法安装别的软件,OPEN是挂着的,宿舍里别的设备连接路由器可以上网;请问应该怎么解决
@eee 你试试本身能ping通互联网ipv4地址吗?还是只有ping域名的时候不同?我怀疑是DNS设置问题。欢迎提供故障信息跟进
[…] [趴会儿project]No.005 用一种“新思路”打造树莓派软无线路由器 […]
[…] [趴会儿project]No.005 用一种“新思路”打造树莓派软无线路由器 […]
想问下,你树莓pi是拨号就有ipv6是么,需要特别的配置么。
我openwrt从16年就连不上ipv6了
@nl 我插上就有ipv6,什么都没动
我有个树莓派2,现在都吃灰了,都不知道拿来干嘛
@LiarOnce 不开发的话,当梯子路由器,离线下载玩具NAS都挺好,低功耗嘛。我前一段时间还拿它开原版minecraft服来着,虽然单核性能吃瘪
@SPtuan 我试过拿它当VPS开博客,后来才发现家里的宽带不可能每天24小时开着,于是弃坑。
不错诶,正好毕业了,我也想买个 Raspberry Pi 和 Arduino 回来玩 XD
看到你也在用粗粮家的台灯,我打算弄点有趣的东西来操控它(不想远程关个灯还要用那个米家 APP,也没有 HomeKit,很吃瘪):idea:
@printempw 这两个东西就是代码和现实世界入门级的纽带。其他行业用它们接触代码实现功能,写代码的用它们联系现实世界,很伟大的项目。
小米这个台灯,是我看够了美帝良心想的垃圾TN屏,眼睛快瞎时候,冲动消费的。觉得自己应该买个好台灯好好对待自己的眼睛,然而远控一次都没用过,他那个APP我也没动过。
@printempw 对啦,我最近调查了一下这个米家台灯,发现是由yeelink提供的。yeelink还提供了一份详尽的控制使用文档,可以在各个平台上用。在这个node.js都能用来硬件编程的时代,相信你一定能很快掌握啦
@SPtuan 我后来也发现啦 那个 Yeelight 有个「极客模式」,开启后就可以通过命令操控了