Openwrt Docker Macvlan
因为使用Openwrt作为宿主机运行Docker,因为他占用资源少,但总会出现需要使用的端口被Openwrt自身服务占用的事情,举个很常见的例子,比如自带的Upnp,Dlna接收器,Airplay接收器,他们都需要5000端口,Airplay其实还好,因为用的是udp和ipv6,所以可以和Upnp共存,这时候就需要使用Macvlan虚拟端口了。
首先来说说他的原理,通常一个端口会有一个mac地址,
ip会与这个mac地址绑定,当设备被通过ip地址访问时,会去查路由表应该往哪条路走,最后根据ip找到mac地址对应设备将包给他,Macvlan就是给一个端口虚拟多个mac地址,来实现给一个端口分配多个地址的方案,多个地址又可以以host模式分别给容器使用。
有些操作其实很简单,但是总没有人告诉咩咩应该怎么做,也没有任何相关资料,因此折腾了一个下午+一个晚上才搞定。
Docker -> 网络 -> 新建
名称lan
,驱动MAC VLAN
首先容器的Macvlan网络需要被局域网访问,因此是桥接到br-lan上
先说明一点,在同一个网段是不可能的,因为这是两个相同网段的路由表,他并不知道应该走虚拟的还是真实的路由,所以会导致外部可以访问容器,容器没外网,已经试过了不行就别再试了
虽然设置不同的网段,但是测试路由的通的,咩咩的局域网是192.168.1.1/24
,分配给它的子网是192.168.10.1/24
网关选择了子网的第一个ip,192.168.10.1
开启ipv6,因为像Airplay这种服务需要ipv6,子网用默认的fe80::/10
就行
请注意最重要的一点,使用这个Macvlan的容器必须是带着--net=lan
全新run的,不能修改现有容器加上这个网络,否则启动会报错网段冲突,无论网段是否真的冲突,绝对会报错
如果咩咩的文章对你有帮助,您可以 请我喝牛奶
害,没有软路由,玩不来,有一台小arm64小主机拿来跑docker挂各种账号的签到脚本了
什么架构什么系统不重要,主要是Docker的Macvlan,本质上如果不是主路由或者不是Openwrt,会更简单
不是,我这台小机器只有单网口,玩不出花样来,只能当单臂路由用
我n1用的op,做旁路由,只做网关不做dhcp,然后测试发现upnp有问题,我试着吧端口5000改成5200也一样。。。。
upnp的版本有两种,着两种互不兼容,看你编译的是哪个版本,旧版的兼容性好一点,但一般编译的都是新版的
这就难受了 不会编译只能用现成的。去找老的性能太低了,emmm
可以装支持旧版的upnp的ipk,但我的京东云就没成功申请过upnp(只支持旧版
对了 我尝试过做主路由 upnp就没有问题. 还有一个就是n1这个路由做主路由跑一些cdn就正常跑。做旁路就死活不行 甜汤网心感觉就像没有网一样 (甜汤)一直在部署, 网心可以到添加业务阶段 ,但是到点了刷新不出业务表,也不跑缓存。但是青龙面板网络啥的都是正常的就整的人脑瓜子嗡嗡的
甜糖可以在手机上netstart -anp | grep ttnode来找到他那3个监听端口,手动配一下端口转发就完事了
今天又碰一个奇葩问题,单网口机器做主路由必须要拓展网口才能做主路由吗,比如我lan是eth0,我wan口也eth0就是会拨不出号,然后我把wan口该dhcp看看会不会获取上级路由ip,两个结果lan的dnch会打架,然后我用交换机划分了一个网口出来,
wan改成eth0.5就不冲突了,我vlan划的5,
就很麻,看别人两个eth0都能正常获取,我到底是什么姿势没对
你可以把物理端口绑在lan,然后在wan里绑定br-lan(是的就是在输入框里直接输入)
就是看不到 emmm
博主您好,我按照你的教程设置了macvlan,可以独立分配ip了,但是没有公网ipv6,我的宿主机是有公网ipv6地址的,请问您知道怎么设置吗
没试过诶,但如果需要v6dhcp应该还需要配一些东西,毕竟lan的dhcp是完全透不进去的
hi,分享一下我的经验
根据你的教程设置macvlan之后,如果开启IPv6,会出现IPv6“泄露”的情况
具体来说就是我的lan接口没有开启IPv6,但是因为macvlan使用br-lan作为base,所以如果在macvlan生成的接口上开启IPv6,lan接口上的所有设备都会分配到IPv6
实际上我尝试使用eth0.x作为base,也一样可以访问macvlan上的设备,供参考
还有就是macvlan上DHCPv6有状态无论如何都不成功,只能用SLAAC无状态,这个真是搞不明白,希望有大佬可以解答
因为我会给lan口分配v6,所以这对我没有影响