类似PantherX2或者树莓派 等 一个有线接口,一个无线接口的 设备

设定参数如下:

  1. 主机有线接口所在网段为 192.168.x.0/24
  2. 主机热点网段为 192.168.y.0/24 openwrt lan口ip为 192.168.y.1

操作步骤如下

  • 将eth0和wlan0打开混杂模式
# 建议开机执行 添加到 /etc/rc.local
ip link set eth0 promisc on
ip link set wlan0 promisc on
  • 由于docker容器存在多个网络,需要先安装docker-compose

安装 hostapd

apt install hostapd

此时应该可以搜到名为 ARMBIAN 密码为 12345678 的热点,但无法连接

导入openwrt的docker镜像

wget https://downloads.openwrt.org/releases/22.03.5/targets/armvirt/64/openwrt-22.03.5-armvirt-64-default-rootfs.tar.gz
gunzip openwrt-22.03.5-armvirt-64-default-rootfs.tar.gz
docker import openwrt-22.03.5-armvirt-64-default-rootfs.tar openwrt:22.03.05

创建macvlan(将ip中的 x y 按参数设定中替换)

docker network create -d macvlan --subnet=192.168.x.0/24 --gateway=192.168.x.1 -o parent=eth0 openwrt_wan
docker network create -d macvlan -o parent=wlan0 openwrt_lan

启动容器

新增docker-compose.yml 文件

#docker-compose.yml
version: "3"

#network使用已创建的macvlan
networks:
  lan:
    external:
      name: openwrt_lan
  wan:
    external:
      name: openwrt_wan

services:
  openwrt:
    image: openwrt:22.03.05
    container_name: openwrt    
#    restart: always
#    volumes:
#      - /root/openwrt/config:/etc/config
#      - /root/openwrt/dnsmasq.conf:/etc/dnsmasq.conf
    networks:
      - lan #eth0
      - wan #eth1
#必须以特权模式启动      
    privileged: true
    command: /sbin/init
#在docker-compose.yml文件所在目录执行
docker-compose up -d

编辑配置文件

可以进入容器内编辑配置文件,但更建议将配置文件从容器内复制到主机,不仅更方便配置(nano比vi简单),而且重置容器不会丢失配置

#cp配置文件
docker cp openwrt:/etc/config /root/openwrt
docker cp openwrt:/etc/dnsmasq.conf /root/dnsmasq.conf

编辑 config/network (将ip中的 x y 按参数设定中替换)

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'wan'
        option proto 'dhcp'
        option device 'eth1'

config interface 'lan'
        option device 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ipaddr '192.168.y.1'

重启容器

更新docker-compose.yml

#docker-compose.yml
version: "3"

#network使用已创建的macvlan
networks:
  lan:
    external:
      name: openwrt_lan
  wan:
    external:
      name: openwrt_wan

services:
  openwrt:
    image: openwrt:22.03.05
    container_name: openwrt    
#    restart: always
   volumes: # 使用容器外的配置
     - /root/openwrt/config:/etc/config
     - /root/openwrt/dnsmasq.conf:/etc/dnsmasq.conf
    networks:
      - lan
      - wan   
    privileged: true
    command: /sbin/init
docker-compose down
docker-compose up -d

此时应该可以成功连上热点,并访问通过192.168.y.1打开openwrt

额外:主机容器互通

按照上面流程主机(x2)是无法访问openwrt的,需要新建macvlan并设定好才能实现互通
建议完成上述步骤后使用以下脚本启动openwrt, 该脚本可以添加到rc.local开机执行

#!/bin/sh
#删除互通网桥 假定命名为 br-openwrt
#不删除启动openwrt可能出现设备忙的报错无法启动openwrt
#将ip中的 x y 按参数设定中替换
ip link del br-openwrt
#启动openwrt
docker start openwrt
#创建互通网桥 
ip link add br-openwrt link wlan0 type macvlan mode bridge
#将主机以 192.168.y.z 加入网桥
ip addr add 192.168.y.z dev br-openwrt
#启动网桥
ip link set br-openwrt up
#添加路由 访问openwrt(192.168.y.1)时的路由
ip route add 192.168.y.1 dev br-openwrt
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。