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

这篇具有很好参考价值的文章主要介绍了配置Docker OpenWrt与宿主机网络互通且作为宿主机网关。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


背景

最近需要用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 1500
        inet 192.168.5.2  netmask 255.255.255.0  broadcast 192.168.5.255
        inet6 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 0
        TX packets 6366329  bytes 10052966588 (10.0 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 65  

创建macvlan网络

开启桥接网卡的混淆模式

在宿主机输入下面命令

ip link set eth0 promisc on

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

eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet 192.168.5.2  netmask 255.255.255.0  broadcast 192.168.5.255
        inet6 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 0
        TX packets 6366329  bytes 10052966588 (10.0 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device 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文章来源地址https://www.toymoban.com/news/detail-773373.html

到了这里,关于配置Docker OpenWrt与宿主机网络互通且作为宿主机网关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pod,docker启动使用宿主机网络的方案

    这是一个Docker命令,用于在主机网络模式下运行一个名为\\\"identity\\\"的容器,并将容器内部的端口18092映射到主机上的端口18092。 解析该命令的各个部分: docker run :运行一个新的容器。 --net=host :使用主机网络模式,这意味着容器将与主机共享网络命名空间,可以直接使用主机

    2024年02月11日
    浏览(52)
  • Docker Compose网络系列--docker-compose连接到宿主机网络

    原文网址:Docker Compose网络系列--docker-compose连接到宿主机网络_IT利刃出鞘的博客-CSDN博客 说明 本文介绍如何实现docker-compose连接到宿主机网络。 需求场景 docker-compose.yml中的services下的容器是无法与宿主机网络连接的,让多个应用进行网络连接的方法:docker-compose.yml设置netwo

    2024年02月15日
    浏览(49)
  • 最简单配置jenkins容器使用宿主机的docker方法

    构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可 设置宿主机docker.sock权限 chown root:root /var/run/docker.sock chmod o+rw /var/run/docker.sock 添加数据卷 version: \\\"3.1\\\" services:   jenkins:     image: jenkins/jenkins     container_na

    2024年02月11日
    浏览(42)
  • docker macvlan虚拟化网络与宿主机通信问题解决——筑梦之路

    默认情况下各个macvlan之间可以通讯,但是不能与宿主机进行通讯!! 主要原因:为了安全而禁止互通 如宿主机ping容器的ip,尽管他们属于同一网段,但也是ping不通的,反过来也是。 这里用两个实例来说明如何解决这个问题。 实例一  实例二 参考资料: 解决Docker macvlan网络

    2024年02月07日
    浏览(51)
  • Docker Desktop使用宿主机Windows的配置文件持久化存储数据

    《微软官网Windows 上的 Docker 引擎帮助文档》 以Nginx为例 把Nginx的配置文件复制到Windows 注意:Windows的盘符是小写的,以及目录直接是用反斜杠的!(我掉这坑里好久!!!) 修改宿主机的nginx.conf配置文件 删除nginx容器 重启启动一个新的Nginx容器 访问localhost

    2024年02月09日
    浏览(52)
  • ubuntu20.04中安装配置docker nvidia容器来实现宿主机GPU的调用

    在 Ubuntu 上安装 Docker 非常直接。我们将会启用 Docker 软件源,导入 GPG key,并且安装软件包。 (这里指推荐使用官方的安装方法,snap的方法不推荐,各种命令不是很通用) 1、首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源: 2、使用下面的

    2024年03月16日
    浏览(64)
  • 【Docker】docker容器内获取宿主机的信息和执行宿主机的脚本

    我们可以通过在容器内远程连接宿主机,然后对宿主机进行操作。 注意: 要先安装 sshpass命令才行。 Dockerfile文件可以在你部署容器的时候自动安装。 docker部署springboot项目

    2024年02月11日
    浏览(61)
  • Docker】容器里面拷文件到宿主机[或]宿主机拷文件到容器里面

    【Docker】容器里面拷文件到宿主机[或]宿主机拷文件到容器里面 - 知乎 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例: 假设容器名为webnphp,要从容器里面拷贝的文件路为: 现在要将tox.ini从容器里面拷到宿主

    2024年02月06日
    浏览(59)
  • docker使用宿主机代理

    我是在ubuntu虚拟机里面装的docker,尝试过docker里面装clash,但是失败了。使用上面的方法,docker容器内可以ping通github.com。ALL_PROXY里面的端口号因人而异。 docker 容器内使用宿主机的代理配置 | Zach Ke\\\'s Notes (kebingzao.com)

    2024年02月16日
    浏览(60)
  • Docker:挂载宿主机的目录

    可以在docker run时通过: -v 宿主机目录:容器内目录 ,挂载宿主机的文件到容器: $ docker run -it -v /tmp/docker_share/:/tmp/share ubuntu /bin/bash 容器启动后,可以在容器里看到目录/tmp/share root@9d2d19b4923c:/tmp/share# touch test root@9d2d19b4923c:/tmp/share# ls test 在宿主机的/tmp/docker_share目录下也可以

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包