背景

我的路由器本来都是一直使用中继模式来连接WiFi的,但是路由器突然连不上出租房的WiFi了。手机连接的上,所以我怀疑可能是路由器mac地址被阻断了,一开始我打算修改路由器的mac地址,但是发现好像不行,所以后面我就使用树莓派连接WiFi,然后通过网口共享网络给软路由。

修改路由器的mac地址

使用 ifconfig -a 可以查看所有网卡对应的mac地址

这里可以和路由器对应一下

这里我们可以看到那个对应的外部的ip地址

ifconfig apcli0 down
ifconfig apcli0 hw ether 00:0C:18:EF:FF:ED
ifconfig apcli0 up

但是这样做不行。。。一直报错,所以,这个东西暂时无解。。。

树莓派网络共享

无奈只能尝试下一个方法。。让树莓派连接WiFi,然后通过树莓派的网口来共享网络,首先我们让树莓派连接WiFi

进入网络工具 sudo wpa_cli -i wlan0

首先输入scan扫描WiFi

使用scan_result 获取我们扫描的结果,不过这个扫描的结果好像为空。。。

不过我们不管它,我们已经知道WiFi的名字和密码了,直接设置就行

我们可以使用 list_network 查看配置过的网络信息

下面我们新建一个新网络 add_network

下面设置一下WiFi和密码,这个数字要和那个add_network返回的数字对应

set_network 1 ssid "LHC102202"
set_network 1 psk "1234567890"
set_network 1 key_mgmt WPA-PSK
set_network 1 bssid 54:75:95:63:ba:c6

然后使用下面这个命令 select_network 1

然后我们默认使用这个WiFi

enable_network 1

保存配置 save_config

使用 status 查看链接状态

我们也可以这样使用

$ sudo wpa_cli -i wlan0 scan             // 搜索附近wifi网络
$ sudo wpa_cli -i wlan0 scan_result      // 打印搜索wifi网络结果
$ sudo wpa_cli -i wlan0 add_network      // 添加一个网络连接

无线桥接

注意,配置网桥前我们不能在通过网口来传递数据了,我们只能通过连接wifi的ip地址来连接树莓派

配置网桥

其实就是设置一个lan口

sudo apt install bridge-utils
brctl addbr br0
brctl addif br0 eth0
ifconfig br0 192.168.3.1 up
ifconfig eth0 0.0.0.0 up

在配置的时候出现了下面这个错误

可能是因为我之前配置过 /etc/resolv.conf,改成下面这个

nameserver 8.8.8.8

不过改了还是无效

切换为root用户就不报这个错了,是sudo的问题。。我们先不管这个。。

配置ip转发

vim /etc/sysctl.conf  
去掉net.ipv4.ip_forward=1的注释,保存退出
sysctl -p

配置iptables

想让内网的所有设备共享这一个公网IP,需要在wlan0网口启用nat

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

安装DHCP/DNS服务器

apt install dnsmasq
vim /etc/dnsmasq.conf
# 添加如下内容
interface=br0
dhcp-range=192.168.3.50,192.168.3.200,255.255.255.0,12h
# 重启一下
systemctl reload dnsmasq

开机启动

vim bridge-init.sh


#!/bin/sh
set -m
brctl addbr br0
brctl addif br0 eth0
ifconfig br0 192.168.3.1 up
ifconfig eth0 0.0.0.0 up
sysctl -p
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
service dnsmasq start

然后我们放到init.d里面去

cp bridge-init.sh /etc/init.d
chmod 755 /etc/init.d/bridge-init.sh
cd /etc/init.d
update-rc.d bridge-init.sh defaults 95

卸载脚本

cd /etc/init.d
update-rc.d -f  bridge-init.sh

这个开机脚本好像没用,不过算了,我们就自己手动启动吧。。

然后我们接上软路由,发现可以访问了

后记

最后我发现可以下面这样搞,我怀疑可能是mac地址有多个导致无法连接

参考文章

【树莓派】在Raspbian下将wifi中继为有线网络_colorfulshark-CSDN博客

使用wpa_cli命令行配置Wi-Fi无线网卡_记得最初的梦想-CSDN博客

wpa_supplicant及wpa_cli使用方法 - SegmentFault 思否

【树莓派】在Raspbian下将wifi中继为有线网络_colorfulshark-CSDN博客