Docker使用Macvlan
学习到了个新技术
为了完成导师布置给我的任务,需要实现内网中模拟多台设备,并且这些设备都要有IP地址和各自的MAC地址
刚开始,我想到了使用虚拟来实现这个任务,但是后来发现,这个方案不行,太消耗资源了,而且部署起来也不怎么灵活
找着找着,突然发现了Linux的Macvlan技术,这个技术可以实现内网中模拟多台设备,并且这些设备都要有IP地址和各自的MAC地址
经过实验后,成功的实现了要求,为此记录下这个新学习到的技术
Macvlan简介
以下是 Macvlan的介绍:
Macvlan是一种虚拟局域网技术,当需要为同一网络接口分配多个 IP 地址时,即可使用该技术。其本质是将物理网络接口分割为多个拥有独立 IP 地址的子接口。系统会根据随机生成的 MAC 地址来分配对应的IP地址,Macvlan 网络类型允许预先配置连接实例到父接口的预设参数,通过这种方式,实例网卡只需简单地将网络选项设置为所连接的网络名称,而无需了解任何底层配置细节即可完成网络连接
简而言之,Macvlan 可以将一个网卡分成多个网卡,而且这些网卡是互相隔离的,在其他网络设备看来,这些网卡是独立的,它们拥有独立的 IP 地址和 MAC 地址
Docker使用Macvlan
做一个简单的实验,在一个网卡上生成三个网卡,在这些网卡上分别使用 Docker 搭建 Nginx 服务器来验证是否搭建成功
首先,验证设备是否支持 Macvlan
1 |
|
如果设备支持,则继续
首先编辑在一个空目录中编辑 Dockerfile
1 |
|
这 个Dockerfile 安装了 Nginx 和 curl,并设置了一个默认的端口映射,Nginx 是为了验证是否搭建成功,curl 是为了验证能否正常访问互联网
然后再编辑 docker-compose.yaml 文件
1 |
|
这个 docker-compose.yml 文件定义了两个网络,default_net 和 macvlan_net,default_net 是一个 bridge 网络,用于访问互联网,macvlan_net 是一个 macvlan 网络,也就是实验需要验证的网络
编辑完成后后,即可启动容器
1 |
|
待容器创建完成后,可以通过命令查看容器是否正常启动
1 |
|
此时可以看到创建的三个容器已经在运行了,再通过命令查看 Docker 网络
1 |
|
此时可以看到两个网络,default_net 和 macvlan_net,且 Driver 分别是 bridge 和 macvlan
使用另外一台同局域网的设备,浏览器分别访问 192.168.242.101、192.168.242.102 和 192.168.242.103,可以成功访问到三个 Nginx 服务器
随意选择一个容器,进入容器内部,使用 curl 命令访问外网,可以正常访问
1 |
|
通过 Macvlan 技术,实现了内网中模拟多台设备,并且这些设备都要有IP地址和各自的MAC地址
如果应用到我自己的 NAS 上,可以解决我的多个 qBittorrent 下载器使用不同端口的问题,这样就可以解决端口冲突导致不得不更换使用其他端口的问题了
学到了新的技术并且可以解决实际问题,非常的高兴♫꒰・◡・๑꒱