步骤开始

成功登陆到树莓派的 SSH 后,在拉取镜像之前,我们还需要进行一些额外的工作:

1.打开网卡混杂模式

sudo ip link set eth0 promisc on

2.创建网络

(须结合实际网络情况,不能照抄命令)

docker network create -d macvlan --subnet=192.168.123.0/24 --gateway=192.168.123.1 -o parent=eth0 macnet

这一条命令需要根据树莓派所处的网络环境来做修改,可以使用 sudo ifconfig命令来查看树莓派 eth0 网卡获得的 IP 地址,如果树莓派获得的 IP 地址为 192.168.2.154,那么说明树莓派处在 192.168.2.x网段,相应的,命令中的192.168.123.0192.168.123.1需要被替换成 192.168.2.0192.168.2.1

docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=eth0 macnet

此时,我们使用 docker network ls命令可以看到网络macnet已建立成功:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
10e676133746        bridge              bridge              local
f5308b94e8fa        host                host                local
16745ea66852        macnet              macvlan             local
5e72e41ea02a        none                null                local

3.拉取镜像

若身处国内,为提高拉取速度,请拉取阿里云仓库中的镜像:

docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest

同时小苏也提供存放在 Docker 官方仓库 中的镜像:

docker pull sulinggg/openwrt:latest

镜像拉取完成后,我们可以执行docker images命令查看现存镜像:

$ docker images
REPOSITORY                                              TAG                 IMAGE ID            CREATED             SIZE
registry.cn-shanghai.aliyuncs.com/suling/openwrt        latest              4f4bc5dca2d9        3 hours ago         112MB

可见,镜像已成功拉取到本地。

4.创建并启动容器

docker run --restart always --name openwrt -d --network macnet --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest /sbin/init

其中:

--restart always参数表示容器退出时始终重启,使服务尽量保持始终可用;

--name openwrt参数定义了容器的名称;

-d参数定义使容器运行在 Daemon 模式;

--network macnet参数定义将容器加入 maxnet网络;

--privileged 参数定义容器运行在特权模式下;

registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest为 Docker 镜像名,因容器托管在阿里云 Docker 镜像仓库内,所以在镜像名中含有阿里云仓库信息;

/sbin/init定义容器启动后执行的命令。

启动容器后,我们可以使用 docker ps -a命令查看当前运行的容器:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a26cee7cade6        openwrt:latest      "/sbin/init"        3 hours ago         Up 3 hours                              openwrt

若容器运行信息STATUS列为 UP状态,则说明容器运行正常。

5.进入容器并修改相关参数

(须结合实际网络情况,不能照抄配置)

docker exec -it openwrt bash

其中:

openwrt为容器名称;

bash为进入容器后执行的命令。

执行此命令后我们便进入 OpenWrt 的命令行界面,首先,我们需要编辑 OpenWrt 的网络配置文件:

vim /etc/config/network

我们需要更改 Lan 口设置:

config interface 'lan'option type 'bridge'option ifname 'eth0'option proto 'static'option ipaddr '192.168.123.100'option netmask '255.255.255.0'option ip6assign '60'option gateway '192.168.123.1'option broadcast '192.168.123.255'option dns '192.168.123.1'

其中:

所有的 192.168.123.x 需要根据树莓派所处网段修改,option gatewayoption dns填写路由器的 IP,若树莓派获得的 IP 为 192.168.2.154,路由器 IP 为192.168.2.1,则需要这样修改:

config interface 'lan'option type 'bridge'option ifname 'eth0'option proto 'static'option ipaddr '192.168.2.100'option netmask '255.255.255.0'option ip6assign '60'option gateway '192.168.2.1'option broadcast '192.168.2.255'option dns '192.168.2.1'

option ipaddr 项目定义了 OpenWrt 的 IP 地址,在完成网段设置后,IP最后一段可根据自己的爱好修改(前提是符合规则且不和现有已分配 IP 冲突)。

6.重启网络

/etc/init.d/network restart

7.进入控制面板

在浏览器中输入第 5 步option ipaddr 项目中的 IP 进入 Luci 控制面板,若option ipaddr 的参数为 192.168.123.100,则可以在浏览器输入 http://192.168.123.100进入控制面板。

用户名:root

密码:password

8.关闭 DHCP 服务

在 “网络 - 接口 - Lan - 修改” 界面中,勾选下方的 “忽略此接口(不在此接口提供 DHCP 服务)”,并“保存&应用”。

9.主路由 DHCP 设置

进入路由器后台中,将主路由的 DHCP 的默认网关和 DNS 服务器设置为第 5 步中option ipaddr 项目中的 IP。

10.重新连接路由器

完成以上操作后,断开设备(如手机,电脑)与路由器的连接,重新连接路由器,连接路由器的设备将获取到我们设置到的 IP。

其他修复

1.关闭 WLAN 硬件加速

设置旁路路由后,若出现访问国内网站网速慢,不稳定的情况(多见于 Pandavan 及其改版固件,如华硕老毛子固件),请在路由器的控制面板中关闭有关 WLAN 的硬件加速,比如选择“Offload TCP/UDP for LAN”(若未出现此现象请忽略):

2.宿主机网络修复

OpenWrt 容器运行后,宿主机内可能无法正常连接外部网络,需要修改宿主机的 /etc/network/interfaces 文件以修复:

(须结合实际网络情况,不能照抄配置)

cp /etc/network/interfaces /etc/network/interfaces.bak # 备份文件
vim /etc/network/interfaces # 使用 vim 编辑文件

以“树莓派爱好者基地”64 位 Debian 为例,向文件末尾添加:

auto eth0
iface eth0 inet manualauto macvlan
iface macvlan inet staticaddress 192.168.123.200netmask 255.255.255.0gateway 192.168.123.1dns-nameservers 192.168.123.1pre-up ip link add macvlan link eth0 type macvlan mode bridgepost-down ip link del macvlan link eth0 type macvlan mode bridge

其中,所有的 192.168.123.x都需要按照树莓派所处网段更改,gatewaydns-nameservers填写路由器的 IP,若树莓派获得的 IP 为 192.168.2.154,路由器 IP 为192.168.2.1,则需要这样修改:

auto eth0
iface eth0 inet manualauto macvlan
iface macvlan inet staticaddress 192.168.2.200netmask 255.255.255.0gateway 192.168.2.1dns-nameservers 192.168.2.1pre-up ip link add macvlan link eth0 type macvlan mode bridgepost-down ip link del macvlan link eth0 type macvlan mode bridge

修改后重启树莓派,之后树莓派的局域网 IP 地址将会固定为/etc/network/interfaces文件中address参数中的地址。

3.手动指定网关

如果路由器固件不支持自定义 DHCP 服务的网关及 DNS 地址(常见于路由器官方固件),或者只希望局域网下的个别设备接入旁路网关时,须在接入设备上做以下配置:

安卓:

需要在安卓的 WIFI 设置内将 IP 获取方式更改为“静态”或“手动”,其中:

“IP 地址”项目需要更改为网段内不冲突的地址;

“网关”或“路由器”项目需要更改为旁路网关 IP 地址;

“前缀长度”项目填写“24”;

“DNS”项目需要更改为旁路网关 IP 地址(两个 DNS 输入框填写一个就可以)。

完成并提交设置后,关闭 WIFI 开关再打开,连接设置的 WIFI 热点,若当前网络参数为设定值,则证明设置成功。

Windows:

在无线热点的“属性”界面下,点击 “IP 设置 - 编辑”按钮,在弹出框中更改 IP 分配模式为“手动”,打开 IPV4 的开关,根据所处网段及上文安卓的相关设置填写相关参数即可。

注意事项

  1. 文章所述方案适用于光猫或路由器已完成宽带拨号的网络环境,未测试也不推荐使用 Docker 内的 OpenWrt 进行宽带拨号

  2. OpenWrt 容器跟随树莓派系统启动,无需手动干预;

  3. 由于容器内系统内核共享宿主机内核,所以在 Luci 面板的 “内核版本”项与宿主机内核版本一致;

  4. 在对容器进行停止或删除操作时,树莓派可能会发生卡顿现象,SSH 可能会断开,1~2 分钟后会恢复正常,目前原因不明;

  5. 经测试,发现 Adblock 不工作,UnblockNeteaseMusic 需要自行设置代理,除此之外容器中的 OpenWrt 多数应用工作正常,如有发现不能正常工作的应用请评论反馈~

功能展示

参考资料

1.OpenWrt By Lean · coolsnowwolf/lede - GitHub

https://github.com/coolsnowwolf/lede

2.【小狮子编译贴】抛砖引玉,为打造N1路由神器 - 恩山无线论坛

https://www.right.com.cn/forum/thread-588747-1-1.html

3.docker openwrt 踩坑的几个小问题解决过程分享 - 恩山无线论坛

https://www.right.com.cn/forum/thread-1048535-1-1.html

4.N1刷入LEAN OPENWRT做旁路网关,导致访问国内网站卡顿 - 恩山无线论坛

https://www.right.com.cn/forum/thread-506510-1-1.html

在Docker 中运行 OpenWrt 旁路网关相关推荐

  1. N1刷Armbian系统并在Docker中安装OpenWrt旁路由的详细教程

    最近入手了个传说中的N1,CPU.内存.存储卡的配置还不错,但只有1个网口(不过是千兆的),USB接口又是2.0的,实在没有想好到底能干啥.本来想只刷个openwrt路由固件来测试哈的,但又觉得浪费了 ...

  2. docker保护python源码_Tensorflow在Docker中运行和源码编译

    本文分享在在Docker中运行Tensorflow和进行源码编译的方法和步骤,包括:编译.构建docker镜像.创建和运行Docker容器.部署完的容器可以通过Jupyter Notebook进行访问 ...

  3. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  4. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  5. 在Docker中运行ASP.NET Web API解决方案

    目录 介绍 先决条件 如何容器化现有项目 添加docker-compose项目 带有docker-compose的容器化解决方案 添加环境变量 后端 前端 不使用Visual Studio运行您的应用 ...

  6. 如何在docker中运行MySQL实例(转载)

    如何在docker中运行MySQL实例 转自:https://blog.csdn.net/siying8419/article/details/79670246 通常初学者学习docker时,不太清楚 ...

  7. zkeacms mysql_在Docker中运行纸壳CMS并配置使用MySql

    纸壳CMS是基于ASP .Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. 方式一 直接运行以下命令即可在docker中运行纸 ...

  8. k3d入门指南:在Docker中运行K3s

    在本文中,我们将简单了解k3d,这是一款可让您在安装了Docker的任何地方运行一次性Kubernetes集群的工具,此外在本文中我们还将探讨在使用k3d中可能会出现的一切问题. 什么是k3d? k3 ...

  9. 在Docker中运行EOS(MAC版)

    在Docker中运行EOS(MAC版) 在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河.记录如下: 安装依赖 Docker 版本 17.05或者更高 tes ...

最新文章

  1. python脚本调度程序_Windows 任务调度程序定时执行Python脚本
  2. 4.1.9 文件系统的层次结构
  3. 在国企当程序员是什么体验?
  4. oracle 如何数组变成表,Oracle从零开始19——表的管理09——嵌套表和可变数组
  5. STM32F10x随笔(gcc+scons)
  6. ofbiz webservice 例解
  7. 火山PC_POST教程
  8. Wannafly Winter Camp 2019 Day4 G 置置置换 (oeis/DP)
  9. python怎么对excel进行排序_python – 使用openpyxl对Excel进行排序和自动过滤
  10. java机票编程_携程预订机票后台java开发编程
  11. 【论文解读 WSDM 2020 | KRF】Integrating Knowledge Relations into Style Correlations for 多标签音乐风格分类
  12. 代码主题darcula_设置 IntelliJ IDEA 的彩色代码主题
  13. 量子有什么特性计算机,量子是什么、量子具有什么特性、又有什么作用?
  14. 霍华德:二呆青年勤修苦练终成一代大侠记
  15. 计算机考试感受作文,关于考试感受作文5篇
  16. 等我怎么怎了,就如何如何
  17. 回首2015年小文codeRoad
  18. 少年不惧岁月长,奋楫笃行国学香
  19. CocoaPods添加和删除某个库
  20. 关于使用多普达windows mobile 手机使用联通卡不能上网的问题

热门文章

  1. mysql客户端栏目变灰色,MySQL看这一篇就够了
  2. 2018中国公有云厂商排名第三:中国联通 154.3亿元
  3. Unity中利用柏林噪音生成随机地图
  4. 102. 二叉树的层次遍历(C语言)
  5. 正定国际物流园项目正式签约
  6. vue 一直加载_vue加载中loading提示信息(iView Spin)
  7. AsyncTask使用及解析
  8. 发掘潜在用户利用xgboost进行产品营销响应预测
  9. 代码之美——Doom3源代码赏析1
  10. 使用个人招行专业版键盘失灵