Docker部署OpenWrt,实现旁路由功能
下载
docker pull sulinggg/openwrt
1.打开网卡混杂模式
eth0默认第一个以太网口
sudo ip link set eth0 promisc on
正常模式 vs 混杂模式
正常模式
在正常模式下,网络接口只接收目的地址是它自身的数据包。这样可以减少主机处理不相关数据包的负担,提升网络效率。
混杂模式
在混杂模式下,网络接口会接收它所能看到的所有网络流量,无论数据包的目的地址是什么。这个模式常用于网络监控、数据包捕获和安全分析等需要全面了解网络流量的场景。
2.使用 Docker 创建 Macvlan 网络
什么是macvlan
Macvlan 是一种用于创建虚拟网络接口的技术,可以让多个虚拟网络接口共享一个物理网络接口。这些虚拟接口每个都有一个独立的 MAC 地址,从而使每个虚拟接口都能像独立的物理接口一样进行网络通信。Macvlan 适用于需要高性能网络连接的容器和虚拟机环境。
创建macvlan
# --subnet
# 作用: 指定网络的 IP 地址范围(子网)。
docker network create -d macvlan \
--subnet=192.168.10.0/24 \
--gateway=192.168.10.1 \
-o parent=eth0 \
openwrt
查看macvlan网络
docker network ls
docker network inspect <network_name>
docker network rm openwrt
启动openwrt镜像
docker run --restart always \
--name openwrt \
-d \
--network openwrt \
--privileged \
sulinggg/openwrt:latest \
/sbin/init
解释
docker run:运行 Docker 容器的命令。
--restart always:设置容器总是自动重启。这意味着,一旦容器停止(不管是正常退出还是异常退出),Docker 将自动重新启动容器。
--name my_openwrt:给容器指定一个名称为 my_openwrt。
-d:在后台运行容器(detached mode),即使容器启动后,你可以继续使用当前的命令行窗口。
--network my_openwrt:将容器连接到名为 my_openwrt 的 Docker 网络。前提是 my_openwrt 网络已经存在或者将会被创建。
--privileged:赋予容器特权。这允许容器在宿主机上执行一些特权操作,如访问硬件设备或者修改宿主机上的网络配置。
arm64v8/openwrt:指定要使用的 Docker 镜像,这里是一个适用于 ARM64 架构的 OpenWrt 镜像。
/sbin/init:指定容器启动时执行的命令。在这里,/sbin/init 是容器的初始化进程,它负责启动和管理其他进程。这对于使用类似于 systemd 的系统初始化进程来管理容器中的服务非常有用。
3配置容器网络
docker exec -it openwrt bash
vim /etc/config/network
## 配置网络接口 start
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.10.160'
option netmask '255.255.255.0'
option gateway '192.168.10.1'
option dns '8.8.8.8 8.8.4.4'
## 配置网络接口 end
# 重启网络
/etc/init.d/network restart
路由器手动设置dhcp
0.0.0.0默认就是路由器自己