ericrao's blog

方瞳博客


  • 首页
  • 归档
  • 分类
  • 标签
  •     

© 2025 ericrao

Theme Typography by Makito

Proudly published with Hexo

使用Docker容器搭建OpenWrt旁路由

发布于 2025-02-06 技术分享  计算机 Docker 容器化 网络 

前言

近期我需要搭建一个旁路由以满足我日常使用的需求,但是我并不想单独购买硬件,也不想使用ESXi或者Proxmox等类型的Hypervisor安装在本地的服务器上,于是便有了使用Docker来运行一个OpenWrt实例的想法,以下我将用简洁易懂的语言记录我的过程,以便大家参考

步骤一:配置网卡混杂模式

  1. 确认网卡名称
    在宿主机终端执行 ip link,找到物理网卡名称(如 eno1、eth0)。

  2. 开启混杂模式

    sudo ip link sudo ip link set <网卡名称> promisc on

    示例:sudo ip link set eno1 promisc on

  3. 验证模式
    再次执行 ip link,确认网卡信息中包含 PROMISC 标志。

步骤二:创建Docker Macvlan网络

假设主路由网关为 192.168.124.1,子网为 192.168.124.0/24,执行以下命令创建网络:

docker network create -d macvlan \
  --subnet=192.168.124.0/24 \
  --gateway=192.168.124.1 \
  -o parent=<网卡名称> \
  openwrt_net

示例:-o parent=eno1

步骤三:获取与处理OpenWrt镜像

1. 镜像获取途径

  • 编译自定义镜像(仅限赞助用户)
    访问 openwrt.ai,配置以下内容构建专属镜像:
    ✅ 旁路由IP地址(如 192.168.124.50)
    ✅ 网关指向主路由IP(如 192.168.124.1)
    ✅ 预装常用插件(如广告过滤、网络加速等)
    ✅ 旁路由模式
    ✅ ROOTFS.TAR.GZ (用于Docker或LXC等容器)

  • 下载预编译镜像
    在openwrt.ai页面底部找到含 rootfs 关键字的 .tar.gz 压缩包(如 kwrt-02.05.2025-x86-64-generic-rootfs.tar.gz),直接下载使用。

2. 镜像导入

  • 镜像导入命令

    docker import <当前目录下的镜像文件名称> <你希望命名的镜像名称>

    示例:

    docker import kwrt-02.05.2025-x86-64-generic-rootfs.tar.gz modwrt

3. 两类镜像的配置差异

镜像类型 网络预配置 软件包预装 开箱即用性
自定义编译镜像 ✅ 完整配置 ✅ 按需集成 无需二次配置
预编译镜像 ❌ 需手动配置 ❌ 基础功能 需登录后调整

步骤四:创建Docker容器

如果你与上文配置的一致,可以通过以下指令轻松的创建docker容器

docker run -d \
--restart always \
--name openwrt \
--network openwrt_net \
--privileged=true \
modwrt \
/sbin/init

步骤五:配置OpenWrt网络(补充)

如果你通过自定义构建固件提前设置了网络配置便可以跳过这一步

  1. 进入容器终端

    docker docker exec -it openwrt bash
  2. 修改网络配置
    然后使用你所熟悉的文本编辑器(例如vim)编辑网络配置文件

    vim /etc/config/network

    以下是我的配置文件示例,只需要修改ipaddr为你期望的OpenWrt实例IP,gateway为主路由(即网关)的IP,netmask为子网掩码,dns为DNS服务器IP即可

    config interface 'loopback'
            option device 'lo'
            option proto 'static'
            option ipaddr '127.0.0.1'
            option netmask '255.0.0.0'
    
    config globals 'globals'
            option ula_prefix 'fd0d:c0bc:30d7::/48'
            option packet_steering '1'
    
    config device
            option name 'br-lan'
            option type 'bridge'
            list ports 'eth0'
            option promisc '1'
    
    config interface 'lan'
            option device 'br-lan'
            option proto 'static'
            option ipaddr '192.168.124.50'
            option netmask '255.255.255.0'
            option ip6assign '60'
            option gateway '192.168.124.1'
            option dns '192.168.124.1'
  3. 重启网络服务

    /etc/init.d/network restart

步骤六:验证与使用

浏览器访问 http://192.168.124.50,使用设置的用户名密码登录,预构建镜像密码为root。

常见问题

  1. IP冲突或无法访问

    • 检查旁路由IP是否与局域网其他设备冲突。
    • 确认宿主机防火墙未阻断流量。
  2. DHCP冲突
    务必关闭OpenWrt的DHCP服务,避免与主路由冲突。

  3. 容器启动报错

    • 现象:docker: Error response from daemon: No command specified.
      解决方案:确保启动命令包含 /sbin/init
    • 现象:Failed to create macvlan port
      解决方案:检查宿主机网卡混杂模式是否开启

结语

通过Docker容器运行OpenWrt旁路由,既节省硬件资源,又保持灵活性。若需扩展功能,可在OpenWrt中安装插件(如广告过滤、科学上网),但需注意容器资源分配。

分享到 

 上一篇: 无题 下一篇: 退役记:我和计算机的故事 

© 2025 ericrao

Theme Typography by Makito

Proudly published with Hexo