[docker]macvlan实现双vlan互通

本文介绍VLAN的基础知识及特殊编号含义,并通过实验演示如何在CentOS上配置VLAN,利用Docker搭建不同VLAN间的通信环境,实现跨VLAN的通信,最后展示了在Ubuntu环境下重复该实验的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于vlan的冷知识

vlan范围:0~4095
    0,4095 保留 仅限系统使用 用户不能查看和使用这些VLAN
    1 正常 Cisco默认VLAN 用户能够使用该VLAN,但不能删除它
    2-1001 正常 用于以太网的VLAN 用户可以创建、使用和删除这些VLAN
    1002-1005 正常 用于FDDI和令牌环的Cisco默认VLAN 用户不能删除这些VLAN
    1006-1024 保留 仅限系统使用 用户不能查看和使用这些VLAN
    1025-4094 扩展 仅用于以太网VLAN

9e792b8fgy1fmoewrjjpgj20jr07740d.jpg

9e792b8fgy1fmoex0v66sj20s907ggmk.jpg

实验环境

9e792b8fgy1fmm9vsq5x9j20hd096wf1.jpg
发现在workstation上不支持混杂模式,导致vlan不通

在centos上

- 在no1 no2上开启vlan功能
modprobe --first-time 8021q
modinfo 8021q

- 在no1和no2上添加2个vlan
ip link add link eth0 name eth0.10 type vlan id 10
ip link set dev eth0.10 up

ip link add link eth0 name eth0.20 type vlan id 20
ip link set dev eth0.20 up


- 在no1上操作docker
docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=eth0.10 mac_net10
docker network create -d macvlan --subnet=172.16.20.0/24 --gateway=172.16.20.1 -o parent=eth0.20 mac_net20

docker run -itd --name b1 --ip=172.16.10.10 --network mac_net10 busybox
docker run -itd --name b2 --ip=172.16.20.10 --network mac_net20 busybox


- 在no2上操作docker
docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=eth0.10 mac_net10
docker network create -d macvlan --subnet=172.16.20.0/24 --gateway=172.16.20.1 -o parent=eth0.20 mac_net20

docker run -itd --name b3 --ip=172.16.10.11 --network mac_net10 busybox
docker run -itd --name b4 --ip=172.16.20.11 --network mac_net20 busybox

- 测试
通
$ docker exec b3 ping 172.16.10.10
PING 172.16.10.10 (172.16.10.10): 56 data bytes
64 bytes from 172.16.10.10: seq=0 ttl=64 time=0.434 ms
64 bytes from 172.16.10.10: seq=1 ttl=64 time=0.516 ms
^C

不通
$ docker exec b3 ping 172.16.20.10

9e792b8fgy1fmm9eynfxhj20dr03lq30.jpg

查看802.1q的数据包

https://github.com/lannyMa/scripts/blob/master/802.1q-vlan.pcap

806469-20171220095510209-1376552347.png

806469-20171220100007053-533565770.png

使用单臂路由的模式使得2个vlan相通

9e792b8fgy1fmmyzf0xbrj20kz07zn0c.jpg

9e792b8fgy1fmmz2zxu6sj20kl091jsz.jpg

- 配置no3-容器的网关
ip link add link eth0 name eth0.10 type vlan id 10
ip link set dev eth0.10 up
ip link add link eth0 name eth0.20 type vlan id 20
ip link set dev eth0.20 up
ifconfig eth0.10 172.16.10.1 netmask 255.255.255.0 up
ifconfig eth0.20 172.16.20.1 netmask 255.255.255.0 up

- 用n3的vlan10 ping n1的vlan20的地址
$ docker exec b3 ping 172.16.20.10
PING 172.16.20.10 (172.16.20.10): 56 data bytes
64 bytes from 172.16.20.10: seq=0 ttl=63 time=0.573 ms
64 bytes from 172.16.20.10: seq=1 ttl=63 time=0.576 ms
64 bytes from 172.16.20.10: seq=2 ttl=63 time=0.555 ms

Ubuntu版-vbox里做的,因为他的网卡支持混杂模式

806469-20171220090959318-729774090.png

参考: Ubuntu16.04的docker阿里云安装: https://yq.aliyun.com/articles/110806

apt-get install vlan

ip link add link enp0s8 name enp0s8.10 type vlan id 10
ip link set dev enp0s8.10 up

ip link add link enp0s8 name enp0s8.20 type vlan id 20
ip link set dev enp0s8.20 up


docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=enp0s8.10 mac_net10
docker network create -d macvlan --subnet=172.16.20.0/24 --gateway=172.16.20.1 -o parent=enp0s8.20 mac_net20

docker run -itd --name b1 --ip=172.16.10.10 --network mac_net10 busybox
docker run -itd --name b2 --ip=172.16.20.10 --network mac_net20 busybox


docker network create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=enp0s8.10 mac_net10
docker network create -d macvlan --subnet=172.16.20.0/24 --gateway=172.16.20.1 -o parent=enp0s8.20 mac_net20

docker run -itd --name b3 --ip=172.16.10.11 --network mac_net10 busybox
docker run -itd --name b4 --ip=172.16.20.11 --network mac_net20 busybox

转载于:https://www.cnblogs.com/iiiiher/p/8067226.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值