前置准备:
- 安装Docker
1. 开启网卡混杂模式
首先需要开启网卡混杂模式。 开启混杂模式后,网卡能够接收所以经过它的数据,而不只是目的地址是是它的数据。默认情况下,网卡都是工作在非混杂模式下,网卡只会接收目的地址指向自己的数据。当网卡工作在混杂模式的时候,网卡会将来自接口的所有数据都捕获交给相应的驱动程序。 通过下面的命令开启混杂模式,其中eth0是我的网卡名:
sudo ip link set eth0 promisc on
注意,这里的配置会在重启后失效,要重启后仍然生效,需要添加到启动参数中。
第一步:启动脚本
新建一个文件:/etc/rc.local
,并添加可执行权限:
sudo touch /etc/rc.local
sudo chmod u+x /etc/rc.local
添加“开启网卡混杂模式”的命令:
ip link set eth0 promisc on
exit 0
第二步:添加systemd启动服务 创建启动服务:
sudo touch /etc/systemd/system/rc-local.service
rc-local.service启动服务内容如下:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
第三步:启动systemd并设置开机启动
sudo systemctl enable rc-local
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
重启机器后,通过ifconfig查看对应的网卡是否开启了‘混杂模式’,即网卡flags中有PROMISC
。
eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> ....
2. 安装OpenWrt
2.1 创建网络
下面的命令中,subnet、gateway需要根据机器所在的网段做修改,通过ifconfig查看机器所在的网络。
docker network create -d macvlan --subnet 192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 macnet
可以通过sudo docker network ls
查看新创建的网络。
2.2 启动OpenWrt
首先,拉取OpenWrt的镜像,拉取之前通过arch
查看系统的内核架构,我是在树莓派查,架构是armv8:
sudo docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:armv8
启动OpenWrt:
sudo docker run --restart always --name openwrt -d --network macnet --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:armv8 /sbin/init
但是如果启动失败了,报错如下
docker: Error response from daemon: failed to create the macvlan port: operation not supported.
则可以通过如下指令来解决这个问题
sudo apt install linux-modules-extra-raspi sudo reboot
reboot后,可以通过执行docker container ps -a查看镜像是否启动成功。
2.3 修改OpenWrt参数
通过交互方式进入容器:
sudo docker exec -it openwrt bash
编辑OpenWrt的网络配置文件vim /etc/config/network
,修改lan的相关内容:
config interface 'lan'
option ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.31.110' #修改一个静态地址,可以通过这个地址访问到树莓派
option gateway '192.168.31.1' #修改为路由器地址
option dns '192.168.31.1' #修改为路由器地址
修改完成后保存,并重启OpenWrt的网络:
/etc/init.d/network restart
3. 配置OpenWrt
通过上面的配置后,我们可以通过OpenWrt的IP访问了,我的OpenWrt IP是192.168.31.110, 访问控制页面,用户名密码 root / password。
首先配置OpenWrt的网络: 网络 –> 接口 –> LAN –> 修改:
基本设置中,勾选忽略此端口
:
物理设置中,取消勾选“桥接接口”,否则会导致无法上网。
点击保存并应用。
4.设置OpenWrt作为旁理由
方法一: 配置路由器,对所有连接该路由器的设备生效 进入路由器后台,修改路由器默认网关和DNS服务器设置为树莓派静态IP,
方法二: 单个设备网络配置,仅对配置的机器生效 原理同上,修改网络连接的默认网关。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付