群晖DSM7实现Docker的macvlan

这篇具有很好参考价值的文章主要介绍了群晖DSM7实现Docker的macvlan。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考:NAS相关 篇十二:群晖DSM7下,docker中macvlan网络模式配置简单教程 实现macvlan与host网络互通,及互通服务自启动_NAS存储_什么值得买

感谢转身就买大佬,群晖教程本来就少,写的这么详细的更是难得。 

MACVLAN的作用

macvlan网络模式的docker容器,可以看作是局域网内的一个独立设备,它会有一个独立的内网IP。每个macvlan下的docker容器,都有自己一套完整的端口可用,不会互相冲突。

创建macvlan 

启用Open vSwitch 。

路径:控制面板-网络-网络界面-管理-Open vSwitch 设置

群晖DSM7实现Docker的macvlan

Open vSwitch就是虚拟交换机。可以简单这样理解,docker容器接入这台交换机,就可以连上你的,相当于一台手机or平板or盒子接入你家网络。

确认打开Open vSwitch开关以后,我们进入SSH控制台。

输入

ip addr 查看NAS网卡情况 确认Open vSwitch功能是否打开。

群晖DSM7实现Docker的macvlan

图中列出了NAS的所有网卡,其中有一个ovs_eth0的网口,对应NAS物理网口信息。这个网口就是开启了Open vSwitch以后的联网网口。如果你的联网网口是其他口(eth*),这里的ovs_eth*也可能不一样,自行注意。等会创建macvlan网络需要使用这个端口,一定记好,不要搞错。

下一步输入

docker network ls

查看docker的网络详情

群晖DSM7实现Docker的macvlan

目前默认只有三种网络模式

bridge、host、none三种网络模式是什么原理作用,大家自行百度即可。

如果已经有driver为macvlan的docker网络,可以执行 docker network rm name 来进行删除,name为macvlan网络实际名称,即图上的NAME栏参数。

确认docker网络中没有macvlan网络,我们再进行下一步。

创建自定义macvlan网络。 


创建命令很简单,和创建docker容器类似。

我这里内网网段是 192.168.50.0/24 ,主路由网关 192.168.50.1 ,旁路由网关 192.168.2.1 。

我的目的是让qB和TR不经过旁路由网关,直接走主路由网关,所以要把macvlan的网关设置成 192.168.50.1。

创建macvlan网络命令如下


仅ipv4

docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 -o parent=ovs_eth0 name


ipv4&ipv6双栈

docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 --ipv6 --subnet=2008::/60 --gateway=2008::1 -o parent=ovs_eth0 name


# 我的创建 macvlan
docker network create -d macvlan --subnet=192.168.50.1/24 --gateway=192.168.50.1 -o parent=ovs_eth0 macv

简单解释一下

docker network create -d macvlan #指定创建的网络类型是macvlan

--subnet=192.168.50.0/24 #macvlan的ipv4网段,这里写你的内网网段即可。

--gateway=192.168.50.1 #macvlan的ipv4网关,这里写您需要容器走的网关。

--ipv6 #启用ipv6支持

--subnet=2408::/60 #macvlan的ipv6前缀

--gateway=2408::1 #macvlan的ipv6网关

-o parent=ovs_eth0 #桥接网络走的是ovs_eth0接口,如果你的接口不是这个,请自行更改。

name #macvlan网络的名称(可以自定义)

参数怎么填大家按照自己实际需求情况来


创建完之后在 Docker - 网络中可以看到自定义的 macvlan

群晖DSM7实现Docker的macvlan

创建Docker

命令创建 

我这里部署的是甜糖 ttnode

#通过macvlan 启动docker
docker run -d --name=ttnode3 --net=macv --ip=192.168.50.23 -v  /volume4/data/m/node3:/mnt/data/ttnode  tiptime/ttnode:latest

--net=macv #为容器使用名为macv的docker网络模式

--ip=192.168.50.23 #指定容器IP

其余部分跟普通创建容器一致。

创建其他容器只要 --net 配置为macvlan网络名称即可,大家自行举一反三。

图形创建

群晖DSM7实现Docker的macvlan

从映像点击启动,直接可以选择自己创建的自己的 macvlan 。

缺点就是无法指定ip了。但是可以从前面的 subnet 里面获取到ip。

ps. 这个貌似是不接受DHCP的,我DHCP 设置的是 192.168.50.200-192.168.50.240,但是爱快显示的是192.168.50.2 。分流等功能都正常


macvlan网络模式下容器与宿主机互通

由于我没有这个需求,所以直接复制了

“一般在macvlan模式下同网段的其他机器可以和容器互通,但宿主不能和容器互通,这是在macvlan模式设计的时候为了安全而禁止了宿主机和容器直接通信。”援引Rehtt大佬的话。

打个比方就是你用host模式创建的iyuu,默认情况下是访问不了ping不通macvlan模式下的qB客户端的,反之也一样。

群晖DSM7实现Docker的macvlan

群晖DSM7实现Docker的macvlan

尝试宿主机直接ping容器qB-down1的IP ,无法ping通。

不过我们还有曲线救国的办法

具体直接看Rehtt大佬的教程,里面有详细原理方法介绍。

【Docker】macvlan网络模式下容器与宿主机互通 - Rehtt's Blog

群晖DSM7实现Docker的macvlan

“如果想要实现互通,有个曲线救国的方法,就是macvlan与macvlan之间可以互通,只需要在宿主机再创建一个macvlan网络,然后修改路由,让数据经过这个macvlan达到互通的目的。”同样援引Rehtt大佬的话。

命令也很简单

以我前面的配置环境举例就是以下几条命令即可

ip link add TTTTT link ovs_eth0 type macvlan mode bridge

ip addr add 11.0.0.160 dev TTTTT

ip link set TTTTT up

ip route add 11.0.0.151 dev TTTTT

ip route add 11.0.0.152 dev TTTTT

ip route add 11.0.0.153 dev TTTTT

以下为简单解释

ip link add TTTTT link ovs_eth0 type macvlan mode bridge #创建一个名为TTTTT的macvlan接口,名字随意你可以设置为你喜欢的名字。ovs_eth0和之前一样,需要写为开启了Open vSwitch以后的联网网口。

ip addr add 11.0.0.160 dev TTTTT #设置TTTTT接口的IP为11.0.0.160,需要和你之前设置的第一个macvlan(GGGGG)同网段。

ip link set TTTTT up #启动TTTTT接口。

ip route add 11.0.0.151 dev TTTTT #让IP11.0.0.151(qB-down1)到宿主机的路由经过TTTTT接口。

ip route add 11.0.0.152 dev TTTTT #让IP11.0.0.152(qB-down2)到宿主机的路由经过TTTTT接口。

ip route add 11.0.0.153 dev TTTTT #让IP11.0.0.153(qB-down3)到宿主机的路由经过TTTTT接口。

群晖DSM7实现Docker的macvlan

创建完成后输入 ip addr 可以发现新建的TTTTT接口已经生效。

尝试在宿主机ping容器IP

群晖DSM7实现Docker的macvlan

均可ping通,说明配置已经生效。

到这里就完成了整套macvlan配置,可以正常使用没有问题了。

群晖DSM7实现Docker的macvlan


不过!还没完

群晖DSM7实现Docker的macvlan

那就是上面macvlan网络模式下容器与宿主机互通的相关配置,默认情况下重启后会重置。

每次重启后就要重新执行一遍

ip link add TTTTT link ovs_eth0 type macvlan mode bridge

ip addr add 11.0.0.160 dev TTTTT

ip link set TTTTT up

ip route add 11.0.0.151 dev TTTTT

ip route add 11.0.0.152 dev TTTTT

ip route add 11.0.0.153 dev TTTTT

手动输入,作为一个懒人,这能忍?

群晖DSM7实现Docker的macvlan

所以最后就是配置开机启动自动配置。

群晖DSM7实现Docker的macvlan

因为群晖7.0变动比较大,不能简单地用系统自带的开机执行脚本方法实现。

我们需要把命令配置为systemd服务,通过systemd来实现开机启动自动配置。

我们先创建一个新的systemd服务,取名 macvlan.service

进入SSH执行

vi /usr/local/lib/systemd/system/macvlan.service

群晖DSM7实现Docker的macvlan

按i键,进入编辑模式,输入以下内容。


[Unit]

Description=Macvlan shim to allow docker to route to host

# After=pkgctl-Docker.service

# BindsTo=pkgctl-Docker.service

ReloadPropagatedFrom=pkgctl-Docker.service

PartOf=pkgctl-Docker.service

[Service]

Type=oneshot

ExecStart=/bin/bash /usr/local/bin/macvlan_start.sh

ExecStop=/bin/bash /usr/local/bin/macvlan_stop.sh

RemainAfterExit=yes

Restart=no

[Install]

WantedBy=pkgctl-Docker.service


直接复制的同学请注意格式,参考截图。

群晖DSM7实现Docker的macvlan

然后按 esc 键入 :wq 保存修改

可以利用 cat 检查一下是否正常

cat /usr/local/lib/systemd/system/macvlan.service

群晖DSM7实现Docker的macvlan

文件内容如图即为正确

然后我们要配置两个bash脚本。

也就是要对应macvlan.service服务配置内容中,start服务和stop服务两个脚本的路径。

群晖DSM7实现Docker的macvlan


 


先配置start服务执行脚本

执行

vi /usr/local/bin/macvlan_start.sh

同样按i进入编辑模式,输入需要开机执行的命令,也就是我们的macvlan与宿主机互通需要的命令。


ip link add TTTTT link ovs_eth0 type macvlan mode bridge

ip addr add 11.0.0.160 dev TTTTT

ip link set TTTTT up

ip route add 11.0.0.151 dev TTTTT

ip route add 11.0.0.152 dev TTTTT

ip route add 11.0.0.153 dev TTTTT


群晖DSM7实现Docker的macvlan

确定无误后,按 Esc 键入 :wq 保存脚本。

接下来配置stop脚本

同样道理

执行

vi /usr/local/bin/macvlan_stop.sh

输入对应的停止服务命令,如下。


ip route del 10.0.0.151 dev TTTTT || true

ip route del 10.0.0.152 dev TTTTT || true

ip route del 10.0.0.153 dev TTTTT || true

ip link set TTTTT down || true

ip addr del 11.0.0.160 dev TTTTT || true

ip link del TTTTT || true


同样操作,保存脚本。

群晖DSM7实现Docker的macvlan

这样就配置好了启动和停止脚本。

以后只要macvlan.service在运行中,就会检测docker服务运行状态。当docker服务启动完成后,macvlan.service服务会执行start脚本。当docker服务关闭后,macvlan.service服务会执行stop脚本。


然后我们重新加载一下systemd服务

执行

systemctl daemon-reload

群晖DSM7实现Docker的macvlan

这样macvlan.service服务已经在systemd服务列表中了。

最后执行

systemctl enable macvlan

开启macvlan.service服务开机启动,这样就OK啦。

如果想取消开机自启动,执行

systemctl disable macvlan

即可

同时可以用


systemctl start macvlan

systemctl stop macvlan

systemctl status macvlan


这三个命令,分别为立即启动服务、立即停止服务、查看服务运行状态。

为了验证一下自启动是否成功。

我们重启群晖测试。

群晖DSM7实现Docker的macvlan

开机后输入

systemctl status macvlan

查看macvlan.service服务运行状态

群晖DSM7实现Docker的macvlan

服务运行正常

直接ping容器IP测试

群晖DSM7实现Docker的macvlan

完美ping通。

说明开机执行脚本成功,完美。

群晖DSM7实现Docker的macvlan

如果大家有新增的macvlan容器,或者需要修改自动执行的命令。

以后只需要修改

/usr/local/bin/macvlan_start.sh

/usr/local/bin/macvlan_stop.sh

这俩个脚本即可文章来源地址https://www.toymoban.com/news/detail-469035.html

到了这里,关于群晖DSM7实现Docker的macvlan的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 黑群晖从入门到入土,自编译适合自己硬件的黑群晖7.1.x引导(黑群晖DSM7.X引导用arpl编译教程)

    没啥好说的,只需要感谢在GitHub上开源代码的巴西老哥就好,好了废话不多说直接开始。 一个完成硬件安装的nas 下载arpl镜像,截止目前最新版是v1.0-beta3,这个可以增加进入系统的速度 写盘功能具:rufus、img写盘工具 两个u盘,一个用来制作PE,一个用来做引导盘,我用的是

    2023年04月08日
    浏览(72)
  • [黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程

    鉴于网上几乎没有志强cpu安装的教程,我走了相当多的弯路,不一定适合你的cpu,但是有一些小问题的解决办法,可能提供你解决思路,为了帮助更多的人能更快安装上故出此教程。 ** 我也是受到了很多帖子的帮助,结尾会挂上链接 之前使用的是j1900做了ddns映射,发现了好

    2023年04月24日
    浏览(57)
  • 群晖DSM 7.1环境下docker安装DooTask

    DooTask是国人开发的一款轻量级的开源在线项目任务管理工具,提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具。 大家感兴趣的话可以去他的官网详细了解。 这个软件默认docker环境下安装,但是要求docker-compose的版本是2.

    2024年02月04日
    浏览(41)
  • DSM7下套件迁移

    重要提示:数据无价,进行任何操作前请妥善备份好数据 2023.08.01 更新v0.2 添加套件外部链接检测功能。 提示:部分套件会链接到套件文件夹外部的文件(夹),迁移后一般还能正常运行,如果外部的文件(夹)在需要调整的存储空间上,你可能需要手动移动它们,同时修改

    2024年02月10日
    浏览(34)
  • DSM7.1.1-42962 + Unraid 6.11.5

    记录一下自己是如何操作在Unraid 6.11.5上安装DSM7.1.1 首先,引导工具下载:https://github.com/pocopico/tinycore-redpill 自动引导【arpl】,和上面二选一:GitHub - fbelavenuto/arpl: Automated Redpill Loader 在Unraid上找到“虚拟机” 菜单,进入后创建一个Linux虚拟机: 也可以选择CentOS VM,但是不重要

    2023年04月21日
    浏览(33)
  • 群晖搭建LDAP服务器实现一个账号登录DSM、Gitea、jellyfin

    LDAP(轻量级目录访问协议)是一种用于访问和管理分布式目录服务的协议,它具有以下好处: 集中管理用户身份认证和授权:LDAP提供了一种方法,使组织能够集中管理用户的身份认证和授权。通过将用户信息存储在一个中心化的目录服务中,管理员可以更轻松地管理用户账

    2024年01月21日
    浏览(51)
  • [NAS] Synology (群晖) DSM同步数据到阿里云盘

    群晖NAS通过webDAV同步阿里云盘的一些方法会因为某些开源项目的开发者放弃维护而失效,这里介绍一个最新同步到阿里云盘的方法 点击“注册表”,搜索aliyundrive,找到“messense/aliyundrive-webdav”下载安装 选择桥接模式 (默认) 点击“高级设置”,勾选“启用自动重新启动”,

    2024年02月06日
    浏览(129)
  • [NAS] Synology (群晖) DSM 7.X 挂载NTFS硬盘

    群晖默认支持的文件系统有btrfs和ext4,对于一些媒体影音游戏等比较大的文件,组RAID做热备对于笔者个人来说不太划算, 而在系统升级或者换设备备份时候把这些挟裹进去,备份文件则是巨大无比. 笔者的分盘策略是RAID5只存系统软件类电子书之类的软件, 挂载NTFS做云备份 + 冷备

    2024年02月05日
    浏览(65)
  • 群晖DSM下套件及系统网页服务器ssl证书自动更新

    : DSM ssl  证书 群晖下自建服务(alist3)和系统服务在外部网络访问需要加ssl安全证书来实现基础的传输保护。 申请证书和续期手动操作都还好,不算太麻烦,但是每个应用单独证书需要复制和重启,再配合服务重启一套下来就比较麻烦了,于是有了这篇文章和末尾的

    2024年02月10日
    浏览(75)
  • 在群晖NAS(DSM 7)使用 Nginx 安装 HTTP Git 服务器

    详细配置可参考:如何在 Debian 11 上使用 Nginx 安装 HTTP Git 服务器 有两个配置NAS与linux系统不同:

    2024年02月14日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包