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默认就是路由器自己
在这里插入图片描述

### 如何在QNAP NAS 使用 Docker 容器部署 OpenWRT 实现软路由 #### 准备工作 为了确保顺利安装并运行 OpenWRT 软路由环境,需确认 QNAP 设备已启用 Docker 功能,并更新至最新固件版本。建议提前备份重要数据以防意外情况发生。 #### 创建 Docker 容器 进入 QTS 操作系统的应用商店找到 Docker 并启动该应用程序。点击左侧菜单中的「容器」选项卡,再按右上方的「创建」按钮来新建一个容器实例。搜索 `openwrt` 或者特定版本标签如 `v19.07.7` 的官方镜像文件下载到本地仓库中[^1]。 ```bash docker pull openwrt:v19.07.7 ``` #### 设置网络模式 对于希望充当路由器角色使用的 OpenWRT 来说,推荐采用桥接(Bridge)方式连接物理网卡以便于管理和维护内部局域网结构;如果仅用于测试目的也可以考虑使用宿主机(Host)模式共享同一张外网接口。 #### 启动参数配置 当选择了合适的镜像之后就可以继续设置启动参数了。这里需要注意的是要给定足够的资源限制(CPU/Memory),并且正确指定挂载点使得能够持久保存配置文件以及日志记录等信息。另外还需要开放必要的端口转发规则让外部流量可以正常访问内网服务。 ```json { "Image": "openwrt:v19.07.7", "Cmd": [ "/sbin/init" ], "ExposedPorts": { "22/tcp": {}, "80/tcp": {} }, "HostConfig": { "PortBindings": { "22/tcp": [ { "HostPort": "2222" } ], "80/tcp": [ { "HostPort": "8080" } ] }, "Binds": [ "/path/to/config:/etc/config:rw" ] } } ``` #### 初始化与基本设定 首次登录 SSH 进入新建立好的容器环境中,默认用户名为 root 密码为空白可以直接回车跳过验证过程。按照提示完成初始向导操作,比如更改管理员账户的安全凭证、调整时间区域与时区等等基础属性定制化处理。 #### DHCP 服务器管理 由于存在其他设备已经在提供相同功能的服务,因此为了避免冲突应该先关闭当前LAN侧自动分配 IP 地址的功能。编辑 `/etc/config/dhcp` 文件添加如下所示的一行代码以达到忽略本机作用范围内的请求效果: ```ini config dhcp 'lan' option interface 'lan' option ignore '1' ``` #### 测试连通性 最后一步就是检验整个架构是否能稳定运作啦!尝试从 WAN 口 ping 一下公网目标节点看看能否成功返回响应包;同时也要检查 LAN 下面各个客户端获取到了预期之内的 IPv4/IPv6 编号才行哦~
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值