OpenWrt Club OpenWrt Club
  • 首页
  • OpenWrt系统
  • OpenWrt插件
  • OpenWrt固件
  • 友人帐
  • OpneWrt 论坛
  • 注册
  • 登录
首页 › OpenWrt系统 › Docker上运行Lean大源码编译的OpenWRT(初稿)

Docker上运行Lean大源码编译的OpenWRT(初稿)

raiuka
3年前OpenWrt系统阅读 9,526

其实,我一直想把ESXi这样的hypervisor换掉,使用Linux作为宿主机,将所有的服务全部docker化,移动到我的软路由上,所以我第一步就需要将OpenWRT先移植到Docker上了。随便搜了一下,发现大部分都是官方版OpenWRT运行在Docker上的教程,所以一咬牙一跺脚还是自己把L大版本的OpenWRT移植到Docker上吧,如果有幸这篇教程被看到,希望能抛砖引玉为各位提供思路。

安装 docker

Docker的安装过程我想应该不用详述了,放命令:

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.shzh

准备工作

为了在之后可以在Docker中运行L大的OpenWRT,所以我们在编译固件的时候,需要选中如下选项,废话不多说上图:

Docker上运行Lean大源码编译的OpenWRT(初稿)-OpenWrt Club

编译完成后,留下openwrt-x86-64-generic-rootfs.tar.gz文件备用。

宿主机Linux的基本配置

由于需要将Linux配置为宿主机,所以Linux上需要进行一些基本的设置。

  • 打开所需要使用的网卡的混杂模式
ip link set ens33 promisc on
ip link set ens34 promisc on
  • 加载pppoe内核模块
modprobe pppoe

Docker容器的网络配置

为 docker 创建 macvlan 模式的虚拟网卡,并关联到宿主机。涉及到ipv4,ipv6地址请自行修改

  • LAN 口
docker network create -d macvlan --subnet=172.16.60.0/24 --gateway=172.16.60.254 --ipv6 --subnet=fe80::/16 --gateway=fe80::1 -o parent=ens33 -o macvlan_mode=bridge openwrt-LAN
  • WAN 口
docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.254 --ipv6 --subnet=fe81::/16 --gateway=fe81::1 -o parent=ens34 -o macvlan_mode=bridge openwrt-WAN

建立以及启动容器

  • 创建容器镜像
docker import openwrt-x86-64-generic-rootfs.tar.gz lean_openwrt
  • 启动容器
docker run -it -d --restart always --network openwrt-LAN --privileged --name openwrt lean_openwrt /sbin/init
  • 将第二块网卡的挂接到 openwrt
docker network connect openwrt-WAN openwrt

修改OpenWRT配置

  • 进入容器
docker exec -it openwrt /bin/sh
  • 编辑 /etc/config/network
config interface 'lan'
    option type 'bridge'
    option ifname 'eth0'  
    option proto 'static'
    option ipaddr '172.16.60.1'
    option netmask '255.255.255.0'
    option ip6assign '64'

config interface 'wan'
        option ifname 'eth1'  
        option proto 'dhcp'
        option ip6assign '64'
  • 重启OpenWRT网络服务
/etc/init.d/network restart

将OpenWRT作为宿主机的网关

由于容器网络采用 macvlan 的 bridge 模式,即使宿主机与容器在同一网段,相互之间也是无法通信的。为了解决这个问题,需利用多个 macvlan 接口之间是互通的原理,新建macvlan虚拟接口:

ip link add link ens33 vLAN type macvlan mode bridge   
ip addr add 172.16.60.253/24 brd + dev vLAN   
ip link set vLAN up
ip route del default                
ip route add default via 172.16.60.1 dev vLAN     

#设置宿主机的dns服务器为OpenWRT
echo "nameserver 172.16.60.1" > /etc/resolv.conf  

将宿主机的网络配置加入到自启动脚本中

为了保证在Linux重启后,网络依然可以生效,我们将上一步中的配置加入到启动脚本(例如rc.local)。

剩下的事情就是OpenWRT的基本配置了,在这里就不在详述了。

Docker OpenWrt
赞(23) 收藏(0)
树莓派 OpenWrt 利用 Docker 安装 Adguard Home
上一篇
如何在 OpenWrt 中安装Docker Compose
下一篇
再想想
所有评论(8)
  • lewis

    大佬,我用你的方法完成后,openwrt自己的命令行里可以ping通baidu.com但是宿主机ping不通baidu.com.
    这是为什么呢

    3年前 回复
    • Luobo

      @lewis: 双网卡?

      3年前 回复
    • lewis

      @Luobo: 是的,我是在真机上装的,后来用其他人的固件有时候也这样,但是重启一下就好了,不知道原因

      3年前 回复
  • lewis

    在宿主机traceroute跟踪,结果如下,出了openwrt全是星号,看起来是没有从路由出去?
    traceroute to baidu.com (39.156.69.79), 30 hops max, 60 byte packets
    1 _gateway (172.16.60.1) 0.121 ms 0.058 ms 0.048 ms
    2 * * *
    3 * * *
    4 * * *
    5 * * *
    6 * * *
    7 * * *
    8 * * *
    9 * * *
    10 * * *
    11 * * *
    12 * * *

    3年前 回复
  • 啸天

    请问你解决了吗

    3年前 回复
  • imEgo

    感觉最简单的方案还是PVE + LXC运行OpenWRT吧,使用了一段时间除了内网通过DDNS域名直接访问(外网访问正常,内网设备只能通过IP)有问题外其他都正常,当然还有Fullcone NAT这种跟内核有关的功能不能用以外,但整体来说跑满千兆CPU占用也远远好于qemu + virtIO

    3年前 回复
  • JJ

    换了个新手机,旧手机就root了,装了 linuxdeploy,在 linuxdeploy里装了 ubuntu
    现在能用 ubuntu了,基本的一些 linux 应用也能运行
    不知道能不能 ubuntu里装 Docker,运行openwrt,能不能出个教程

    3年前 回复
  • IvanM

    BOSS,我是单网卡做旁路由的,我觉得都是大同小异的,但是我启动容器的时候错误提示
    Error Start container openwrtorg-rootfs failed: {“message”:”failed to create the macvlan port: device or resource busy”}.
    这个是什么意思,什么原因造成的,要怎么查看和解决呢?

    2年前 回复
聚合文章
OpenWrt 使用 Luci-app-frpc 配合Docker 内网穿透
OpenWrt 利用Docker 搭建Cloud Torrent 下载BT/PT种子
Ubuntu 18.04 编译OpenWRT遇到libwebsockets 重复问题
Ubuntu 18.04 编译OpenWRT遇到错误和解决办法
云标签
Adguard BT下载 Compose Docker LEDE OpenSSL OpenWrt OpenWrt功能 PassWall PT下载 Torrent Ubuntu 个性修改 内网穿透 固件编译 服务器 树莓派 端口映射 网站环境
OpenWrt 使用 Luci-app-frpc 配合Docker 内网穿透
3年前
5,659 1 1
OpenWrt 利用Docker 搭建Cloud Torrent 下载BT/PT种子
3年前
3,123 0 5
Ubuntu 18.04 编译OpenWRT遇到libwebsockets 重复问题
3年前
2,420 0 0
Ubuntu 18.04 编译OpenWRT遇到错误和解决办法
3年前
4,015 0 2
8 23
  • 23
  • 8
Copyright © 2019-2023 OpenWrt Club. Designed by nicetheme.
  • 首页
  • OpenWrt系统
  • OpenWrt插件
  • OpenWrt固件
  • 友人帐
  • OpneWrt 论坛
raiuka
1
文章
1
评论
23
喜欢