配置Docker OpenWrt与宿主机网络互通且作为宿主机网关

目录

  • 背景
    • 环境
  • 操作步骤
    • Docker安装OpenWrt
      • 确认宿主机网络接口名
      • 创建macvlan网络
        • 开启桥接网卡的混淆模式
        • 为docker创建macvlan网络
      • 创建OpenWrt容器
        • 登录容器更改ip网段
        • 重启network生效配置
    • 与宿主机网络互通
      • 宿主机创建新的macvlan接口
      • 为新接口分配ip并启用
      • 添加静态路由使宿主机与容器使用新接口通信
      • 配置新接口的默认网关为容器地址
      • 测试是否能ping通
      • 加入启动项自启动
  • 备注


背景

最近需要用Docker版的Openwrt作为旁路由(网关),在配置过程中遇到一些问题,通过查阅资料,最终完美解决。现在将整体方案和具体操作步骤贴到这里分享给大家

环境

这里我使用的环境如下:

  • 宿主机操作系统:Armbian
  • 宿主机ip:192.168.5.2
  • 宿主机新macvlan接口ip:192.168.5.3
  • Docker镜像:unifreq/openwrt-aarch64
  • Docker ip(macvlan):192.168.5.10
  • 网段:192.168.5.0/24
  • 主路由ip:192.168.5.1

操作步骤

Docker安装OpenWrt

这里我使用docker macvlanbridge网络模式提升性能

确认宿主机网络接口名

ifconfig

以我的返回为例,这里是eth0

eth0: flags=4419<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.5.2  netmask 255.255.255.0  broadcast 192.168.5.255inet6 xxxxxxxxxxx  prefixlen 64  scopeid 0x20<link>ether d2:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)RX packets 10762458  bytes 10675054731 (10.6 GB)RX errors 0  dropped 164956  overruns 0  frame 0TX packets 6366329  bytes 10052966588 (10.0 GB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0device interrupt 65  

创建macvlan网络

开启桥接网卡的混淆模式

在宿主机输入下面命令

ip link set eth0 promisc on

再一次ifconfig接口名查看是否成功开启。如果对应接口有PROMISC证明已成功开启

eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500inet 192.168.5.2  netmask 255.255.255.0  broadcast 192.168.5.255inet6 xxxxxxxxxxx  prefixlen 64  scopeid 0x20<link>ether d2:xx:xx:xx:xx:xx  txqueuelen 1000  (Ethernet)RX packets 10762458  bytes 10675054731 (10.6 GB)RX errors 0  dropped 164956  overruns 0  frame 0TX packets 6366329  bytes 10052966588 (10.0 GB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0device interrupt 65  
为docker创建macvlan网络
docker network create -d macvlan --subnet=192.168.5.0/24 --gateway=192.168.5.1 -o parent=eth0 macnet

创建OpenWrt容器

在宿主机执行

docker run --restart always --name openwrt -d --network macnet --privileged unifreq/openwrt-aarch64:latest /sbin/init
登录容器更改ip网段

宿主机执行下面命令进入容器终端

docker exec -it openwrt bash

在容器终端下,修改/etc/config/network文件,修改ipaddr为宿主机网段,并增加gatewaydns配置,指向主路由地址,配置如下:

config interface 'lan'option type 'bridge'option ifname 'eth0'option proto 'static'option ipaddr '192.168.5.10'option dns '192.168.5.1'option gateway '192.168.5.1'option netmask '255.255.255.0'
重启network生效配置

容器下执行,

/etc/init.d/network restart

然后ifconfig相应的接口名,看配置是否生效,并测试是否可以访问互联网

ping -c 3 baidu.com

与宿主机网络互通

在用上述配置创建完OpenWrt docker后,虽然宿主机和容器在同一网段,但是因为macvlan模式的限制,宿主机与容器是无法互相通信的(但与同网段下的其他机器是可以相互通信的),所以需要在宿主机创建一个新的macvlan接口,然后增加一条宿主机macvlan访问容器macvlan的静态路由。

在宿主机终端执行下面代码,
注:macvlan-proxy这个接口名称可以随便起,只需要每条命令的名字保持一致即可

宿主机创建新的macvlan接口

ip link add macvlan-proxy link eth0 type macvlan mode bridge

为新接口分配ip并启用

ip addr add 192.168.5.3 dev macvlan-proxy
ip link set macvlan-proxy up

添加静态路由使宿主机与容器使用新接口通信

ip route add 192.168.5.10 dev macvlan-proxy

配置新接口的默认网关为容器地址

route add default gw 192.168.5.10 macvlan-proxy

测试是否能ping通

在宿主机执行,

# 宿主机-->OpenWrt容器
ping 192.168.5.10 -c 3
# OpenWrt容器-->宿主机
docker exec -it openwrt bash -c "ping 192.168.5.3 -c 3"

如果可以相互ping通,则证明设置没问题。

加入启动项自启动

上述命令会在宿主机重启后失效,为了每次重启宿主机均可自动运行上述命令,需要编辑/etc/rc.local文件,将上面的命令粘贴到exit 0之前

ip link set eth0 promisc on > /dev/null 2>&1
ip link add macvlan-proxy link eth0 type macvlan mode bridge
ip addr add 192.168.5.3 dev macvlan-proxy
ip link set macvlan-proxy up
ip route add 192.168.5.10 dev macvlan-proxy
route add default gw 192.168.5.10 macvlan-proxy

最后,确保为/etc/rc.local文件增加了可执行权限且rc-local.service是自启动的状态

chmod a+x /etc/rc.local
systemctl enable rc-local

至此,Docker OpenWrt与宿主机网络互通配置已完成,可重启后验证是否生效。

备注

本文只介绍了如何配置Docker OpenWrt与宿主机网络互通,以及如何作为宿主机网关,至于OpenWrt如何配置作为旁路由(网关),还需要其他的设置,详见此文章


参考资料1
参考资料2
参考资料3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【银行测试】第三方支付功能测试点+贷款常问面试题(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、第三方支付功能…

华为快应用中自定义Slider效果

文章目录 一、前言二、实现代码三、参考链接 一、前言 在华为快应用中官方提供了<slider>控件&#xff0c;但是这个控件的限制比较多&#xff0c;比如滑块无法自定义&#xff0c;所以这里进行下自定义&#xff0c;自己修改样式。 二、实现代码 整体效果如下: 源码如下…

SL6015B降压恒流60V耐压1.5A高辉调光LED芯片 电路简单 元器件少

SL6015B是一款专为LED照明应用设计的降压恒流芯片&#xff0c;具有60V的耐压能力&#xff0c;最大输出电流可达1.5A。它采用高辉调光方式&#xff0c;通过改变输入电压或电流来调节LED的亮度。此外&#xff0c;SL6015B还具有电路简单和元器件数量少的特点&#xff0c;使其成为一…

QT-在ui界面中给QWidget增加Layout布局的两种方法

QT-在ui界面中给QWidget增加Layout布局的两种方法 方式一 在UI界面&#xff0c;用拖拽的方式加入Layout方式二 用notepad软件打开.ui文件&#xff0c;手动加入Layout代码 目标&#xff1a;去除右下角红标&#xff0c;给tab标签增加Layout属性。 方式一 在UI界面&#xff0c;用…

leetcode:前序遍历

题目描述 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目分析 这道题的难点在于&#xff0c;前序遍历一遍之后需要将数值存在数组里&#xff0c;returnsize就是数组的大小 所以我们先构建一个函数来计算节点的个数 然后我…

中国AI大模型,应该如何商业化?

虽然大模型商业化的路径较为清晰&#xff0c;目前国内厂商也都在积极探索&#xff0c;但大模型的商业化之路&#xff0c;不能仅限于商业模式的探索尝试&#xff0c;更在于解决大模型发展的底层问题。 作者|斗斗 编辑|皮爷 出品|产业家 如今&#xff0c;大模型的商业化问题再…

深度观察|近视防控乱象下,角膜塑形镜撬动百亿市场的背后…

前不久&#xff0c;“晒眼皮”莫名上了热搜。顾名思义&#xff0c;就是在太阳底下闭眼&#xff0c;让眼皮享受日光浴。 不少近视患者相信&#xff0c;这种做法可以延缓近视&#xff0c;甚至可以让近视度数“清零”。毫无疑问&#xff0c;这是一个收割智商税的做法&#xff0c;…

敏捷开发迭代缺陷统计的重要性

在敏捷开发中&#xff0c;迭代缺陷统计具有重要性&#xff0c;对团队和项目具有多方面的影响&#xff1a; 早期发现和解决问题&#xff1a; 迭代缺陷统计允许团队及时识别和定位在迭代中出现的问题。这有助于早期解决问题&#xff0c;避免问题扩大化&#xff0c;并最大程度地减…

待处理的基本数据结构的一些知识

1 堆的理解&#xff0c;以及堆排序 对应 day2中的堆排序的Code 参考链接树与二叉树】堆的时间复杂度详解以及堆的应用—堆排序、TOP - K问题 大顶堆、小顶堆及其建堆过程、堆排序 2 对于用数组表示的一个数字&#xff0c;在不将其转化为数字的情况下&#xff0c;将该数字加1后…

谈一谈柔性数组

文章目录 什么是柔性数组柔性数组有什么用 什么是柔性数组 柔性数组是一种动态可变的数组&#xff0c;也许你从来没有听说过这个概念&#xff0c;但是它确实是存在的&#xff0c;是在C99标准底下支持的一种语法。想要使用柔性数组需要满足3个条件&#xff1a; 柔性数组只能存在…

Oracle连接错误:ORA-28040:没有匹配的验证协议

一、产生原因&#xff1a;oci动态库版本太低&#xff0c;无法连接高版本的数据库 二、解决办法 1、下载高版本的oci库 https://www.oracle.com/database/technologies/instant-client/winx64-64- downloads.html 2、解压并复制oci动态库 3、粘贴到相应的目录

中国移动联合玻色量子打造“人人可用的量子计算”——恒山光量子算力平台公测上线

2023年12月1日&#xff0c;中国移动云能力中心&#xff08;简称“移动云”&#xff09;联合北京玻色量子科技有限公司&#xff08;简称“玻色量子”&#xff09;共同打造的“五岳量子计算云平台——恒山光量子算力平台”在苏州正式发布。这是玻色量子继2023年5月16日成功发布自…

3、引用的应用、显示类型转换、面向对象

引用的应用 引用作为实参 引用型形参函数的形参是实参的别名,避免了对象复制的开销非常引用型的参数&#xff0c;在函数内部可以修改参数的值常引用型的参数&#xff0c;可以防止函数内对实参的意外修改 // 当定义一个函数时&#xff0c;只要可以确定在函数内部绝对不修改实…

QtCreator调试时遇到中文时会卡住

参考帖子&#xff1a; https://bbs.csdn.net/topics/604917742 例如&#xff1a; 1.代码中有中文 btn->setText("开始"); 2.注释中有中文 btn->setText("strart"); // 开始

常见的关于vcruntime140.dll丢失的解决方法,找不到vcruntime140.dll丢失的问题

vcruntime140.dll文件是Microsoft Visual C Redistributable for Visual Studio 2015的一部分&#xff0c;它是运行使用Visual Studio 2015 开发的应用程序所必需的。如果你在尝试打开某些游戏或应用程序时遇到“vcruntime140.dll丢失”或“找不到vcruntime140.dll”这样的错误…

计算机网络入侵检测技术研究

摘 要 随着网络技术的发展&#xff0c;全球信息化的步伐越来越快&#xff0c;网络信息系统己成为一个单位、一个部门、一个行业&#xff0c;甚至成为一个关乎国家国计民生的基础设施&#xff0c;团此&#xff0c;网络安全就成为国防安全的重要组成部分&#xff0c;入侵检测技术…

论文解读:EfficientViT-提高吞吐量

摘要 要解决的问题 Vision transformers have shown great success due to their high model capabilities. However, their remarkable performance is accompanied by heavy computation costs, which makes them unsuitable for real-time applications. vit计算开销大&a…

热点新闻 | 许战海:零食行业的革新之道

2023年11月29日&#xff0c;华糖万商大会在南京国际会展中心隆重举行。著名战略定位咨询专家许战海受邀出席&#xff0c;在“量贩零食产业年度盛典”上发表了主题为《如何通过竞争战略布局年度规划》的精彩演讲&#xff0c;吸引了众多业界关注。 演讲中&#xff0c;许战海老师指…

网页开发 CSS

目录 CSS 概述 CSS 引入方式 CSS 选择器 基本选择器 组合选择器 伪类选择器 样式继承 选择器优先级 CSS 属性操作 文本属性 背景属性 边框属性 列表属性 dispaly属性 盒子模型&#xff08;重点&#xff09; float属性&#xff08;重点&#xff09; CSS 概述 C…

RPG项目01_UI面板Game

基于“RPG项目01_技能释放”&#xff0c;将UI包导入Unity场景中&#xff0c; 将图片放置 拖拽 取消勾选&#xff08;隐藏攻击切片&#xff09; 对技能添加蒙版 调节父子物体大小一致 将子类蒙版复制 执行5次 运行即可看到技能使用完的冷却条 在Scripts下创建UI文件夹 写代码&am…