将树莓派打造为无线中继
让树莓派进行wifi中继,最简单的方式是安装OpenWrt或者LEDE,然后通过Luci界面可以方便的进行操作,前提是你的无线网卡能够在OpenWrt下顺利驱动。
由于我需要中继5G信号,所以选购了一款支持双频的USB无线网卡,主控为RTL8812AU,Realtek实际上间接提供了Linux下网卡驱动的源码,在Github上可以搜索到很多,但是无奈这个驱动交叉编译完成后insmod到OpenWrt和LEDE并不能很好的驱动网卡,无奈之下只好使用Raspbian,通过相关配置来完成需求。
准备工作
- 已经安装完Raspbian的树莓派,且能够通过串口、SSH或者显示器登陆
- 网线
- 电脑
这里我假设你已经在树莓派上安装好了系统,因为树莓派安装系统并不复杂,所以这里不过多赘述。
配置网桥
可能很多人会不解:添加网桥的作用是什么,通过树莓派的以太网口不是已经可以很好的通信了吗?
不知道你有没有想过一个问题,为什么你把网线插到路由器上随便一个lan口,都可以ping通192.168.1.1(假设你的网关是这个),那几个lan口也有IP吗?路由器的lan口到底有什么特殊之处?
学过计算机网络的童鞋应该知道,网桥是一个工作在二层的设备,目的是分离不同的碰撞域,设备之间直接通过mac地址通信。
在Linux系统中,假设我们有4个以太网卡,一个网桥,并且将这4个以太网卡设置为网桥的4个接口,同时将网卡设置为混杂模式,那么我们就得到了一个虚拟的网桥设备,如果再为网桥设置一个IP,那么这个网桥就是传说中的lan了。
实际上基于Linux系统的路由器正是这么做的,在OpenWrt的终端下使用ifconfig命令可以看到一个br-lan的接口,那就是虚拟网桥。
明白了原理,接下来只要知道如何创建网桥并分配接口,配置IP就行了,首先需要安装网桥配置工具:
1 | sudo apt install bridge-utils |
然后输入如下命令,即可完成配置,更详细的使用方法可以参考man手册。
1 | brctl addbr br-lan |
配置IP转发
一般的Linux发行版默认都不会开启ip_forward,因为正常的计算机都是作为终端,没有转发数据报的需求,因此需要手动打开。
第一种方式
1 | echo 1 > /proc/sys/net/ipv4/ip_forward |
第二种方式
1 | vim /etc/sysctl.conf |
第三种方式
1 | sysctl net.ipv4.ip_forward = 1 |
配置iptables
如果我们中继的是运营商的wifi,那么可能会获得一个公网的IP,这种情况下想让内网的所有设备共享这一个公网IP,需要在wlan0网口启用nat。
1 | iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE |
安装DHCP/DNS服务器
作为一台准路由器,插在上面的设备最好能够自动获取IP,这里我选用的是dnsmasq,因为科学上网比较方便。
1 | apt install dnsmasq |
dnsmasq的功能很强大,这里我仅仅使用了基础的DNS/DHCP功能,你也可以根据自己的需求定制。
在树莓派上连接WiFi
通过图形界面连接wifi难度不大,这里主要说一下通过命令行连接wpa/wpa2加密的wifi。
在Linux发行版中,一般都会集成一套wireless-tools,但是在树莓派中,同时还提供了wpa_supplicant,它基于C/S模型,我们需要使用wpa_cli来和wpa_supplicant通信,完成相关设置。
1 | wpa_cli |
然后会出现下面这样的命令行界面
1 | wpa_cli v2.4 |
既然是命令行,就可以敲命令,首先扫描一下wifi
1 | scan |
然后读取一下扫描的结果
1 | scan_result |
当看到你需要中继的wifi的SSID后,记下来,然后新建一个空网络
1 | add_network |
此时会显示新建的网络的编号,如果没看清,可以查看一下当前所有配置过的热点信息
1 | list_network |
下面我们需要配置网络了,假设新建的网络编号为0
1 | set_network 0 ssid "OpenWrt" |
最后选择一个网络进行连接
1 | select_network 0 |
如果正常的话,就可以连接成功,可以查看当前状态
1 | status |
后续
此时,将无线路由器的wan口与树莓派的lan口连接,并设置为自动获取IP,就可以上网了。
这样可以将中继的接收方与发送方通过网线连接,因此灵活性更高,前提是你能给树莓派找到一个不会被偷的地方(¬、¬)