网络 namespace

声明:所有文章只作为学习笔记用,转载非原创

---- 概念
overlay underlay
https://blog.csdn.net/fy_long/article/details/85317981 

https://blog.csdn.net/chenleiking/article/details/88142580
二层网络通常是指能直接使用Mac地址进程通讯的网络
三层网络更简单:由几个二层网络和路由器组成的网络就是三层网络。
#怎么理解
生成树一般指生成树协议。生成树协议(英语:Spanning Tree Protocol,STP
https://www.zhihu.com/question/21327750 
网络科学家发现了这个规律,有一个大胆设想,既然二层网络里有物理环路,那用一种逻辑的方法将物理的环路斩断,斩成一个发散的树状架构,是不是Frame就不会无限循环下去了?答案是肯定的,也是这么做的。

https://blog.csdn.net/u012503639/article/details/85018730
BPDU代价STP利用BPDU(Bridge Protocol Data Unit,网桥协议数据单元)中三个字段:路径开销、网桥ID、端口优先级/端口ID来确定到根桥的最佳路径顺序,从而决定一个生成树实例。
Unicast 单播

#堆叠
https://www.cnblogs.com/oo_o/p/7256774.html 
http://www.360doc.com/content/16/0916/13/35248368_591240893.shtml 

#大二层
https://www.cnblogs.com/bakari/p/11131268.html
https://www.zhihu.com/question/24393680/answer/132219127 
简单点说:VXLAN就是使用UDP连接多个二层网络,使之成为一个更大的二层网络的技术。
Trill ( Transparent Interconnect Lots of Link)
SPB(Short Path Bridge)
Stack & Port Channel


#VXLAN(Virtual eXtential LAN)意为虚拟可拓展局域网
核心概念如下:

VTEP:VXLAN Tunnel Endpoints,VXLAN的边缘设备。负责将MAC打包为UDP,或者将UDP拆包为MAC。左边VM在一个真实的二层网络中,MAC协议报文传递给VTEP之后,VTEP将其作为原始报文打包到UDP报文里面,通过三层网络传递到右侧VTEP,右侧VTEP收到UDP报文之后,将其拆包,获得原始MAC报文,传递给右侧VM。
VXLAN隧道:隧道是一个逻辑概念。对于两边的VM来说,中间的三层网络是透明的,好像有一条隧道将两个二层网络打通一样,可以直接通讯。隧道两端的VTEP需要知道彼此的IP地址,UDP报文会根据这个IP地址发送出去。
VNI:VNI配置在VTEP上,类似VLAN ID,用来划分VXLAN的广播域,不同VNI的VXLAN不能直接进行二层通讯。且相比VLAN ID的12字节空间(4096),VNI支持海量区域的隔离。VNI所代表的广播域称之为Bridge-Domain。

VXLAN Header:增加VXLAN头(8字节),其中包含24比特的VNI字段,用来定义VXLAN网络中不同的租户。此外,还包含VXLAN Flags(8比特,取值为00001000)和两个保留字段(分别为24比特和8比特)。
UDP Header:VXLAN头和原始以太帧一起作为UDP的数据。UDP头中,目的端口号(VXLAN Port)固定为4789,源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值。
Outer IP Header:封装外层IP头。其中,源IP地址(Outer Src. IP)为源VM所属VTEP的IP地址,目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址。
Outer MAC Header:封装外层以太头。其中,源MAC地址(Src. MAC Addr.)为源VM所属VTEP的MAC地址,目的MAC地址(Dst. MAC Addr.)为到达目的VTEP的路径上下一跳设备的MAC地址。

前面说过,VXLAN是在二层外面包三层,从报文内容也可以看出来:首先,是二层网络的实际报文,经过VTEP之后,现在前面增加VXLAN头;然后,VTEP使用UDP协议在外面的三层网络上传输,将VXLAN报文当作UDP报文的原始数据;最后,UDP就像正常的三层网络报文一样传递到目的地;


示例
[https://www.cnblogs.com/xinghen1216/p/11813422.html](https://www.cnblogs.com/xinghen1216/p/11813422.html)



---- 练习

#添加 ns
sudo ip netns add docker0
sudo ip netns add docker1

 ls -l /var/run/netns
-r--r--r-- 1 root root 0 7月  30 17:09 docker0
-r--r--r-- 1 root root 0 7月  30 17:10 docker1

#创建Veth pairs
sudo ip link add veth0 type veth peer name veth1
sudo ip link add veth2 type veth peer name veth3
#创建 bridge  br0
brctl addbr br0

将Veth的另一端接入bridge
sudo brctl addif br0 veth1
sudo brctl addif br0 veth3

为"容器“内的网卡分配IP地址,并激活上线
docker0容器:
sudo ip netns exec docker0 ip addr add 172.18.0.2/24 dev veth0
sudo ip netns exec docker0 ip link set veth0 up

docker1容器:
sudo ip netns exec docker1 ip addr add 172.18.0.13/24 dev veth2
sudo ip netns exec docker1 ip link set veth2 up


Veth另一端的网卡激活上线
sudo ip link set veth1 up
sudo ip link set veth3 up

为bridge分配IP地址,激活上线
sudo ip addr add 172.18.0.1/24 dev br0
sudo ip link set br0 up


[root@zabbix3 ~]# ip netns exec docker0 ip addr show 

1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
4: veth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 72:28:81:3d:7d:06 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.18.0.2/24 scope global veth0
       valid_lft forever preferred_lft forever
    inet6 fe80::7028:81ff:fe3d:7d06/64 scope link 
       valid_lft forever preferred_lft forever

[root@zabbix3 ~]# ip netns exec docker1 ip addr show 
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: veth2@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether fe:7e:70:87:7c:18 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.18.0.13/24 scope global veth2
       valid_lft forever preferred_lft forever
    inet6 fe80::fc7e:70ff:fe87:7c18/64 scope link 
       valid_lft forever preferred_lft forever
#抓包
tcpdump -i br0 -n
从容器docker0 ping 容器docker1:
sudo ip netns exec docker0 ping -c 3 172.18.0.3

场景二:从宿主机访问“容器”内网络
在“容器”docker0内启动服务,监听80端口:
sudo ip netns exec docker0 nc -lp 80
在宿主机上执行telnet,可以连接到docker0的80端口:
telnet 172.18.0.2 80

场景三:从“容器”内访问外网
配置内核参数,允许IP forwarding
sudo sysctl net.ipv4.conf.all.forwarding=1
配置iptables FORWARD规则
首先确认iptables FORWARD的缺省策略:

sudo iptables -L
[https://www.linuxidc.com/Linux/2016-09/134832.htm](https://www.linuxidc.com/Linux/2016-09/134832.htm)

#route -n
https://blog.csdn.net/Miss_Audrey/article/details/78771326 
192.168.0.0   10.77.238.254  255.255.0.0     UG    0     0    0  eth0
表示去往192.168.0.0网段的数据包由网关10.77.238.254通过网卡eth0来转发


#overlay实验
[https://blog.csdn.net/a363344923/article/details/98033856?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param](https://blog.csdn.net/a363344923/article/details/98033856?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param)

https://github.com/mz1999/blog/blob/master/docs/docker-overlay-networks.md
VXLAN(Virtual Extensible LAN)是一种网络虚拟化技术,它将链路层的以太网包封装到UDP包中进行传输。VXLAN最初是由VMware、Cisco开发,主要解决云环境下多租户的二层网络隔离。我们常听到公有云厂商宣称支持VPC(virtual private cloud),实际底层就是使用VXLAN实现的。

我们可以看到,最内部是原始的二层网络包,外面加上一个VXLAN header,其中最重要的是VNI(VXLAN network identifier)字段,它用来唯一标识一个VXLAN。也就是说,使用不同的VNI来区分不同的虚拟二层网络。VNI有24位,基本够公用云厂商使用了。要知道原先用来网络隔离的虚拟局域网VLAN只支持4096个虚拟网络。

VTEP 叫做 VxLAN 隧道端点(VxLAN Tunnel Endpoint),是 VxLAN 协议中将对原始数据包进行封装和解封装的设备,它可以由硬件设备实现,也可以由软件实现。



分别在Node-1、Node-2上执行:
sudo sysctl net.ipv4.conf.all.forwarding=1

在Node-1上执行:

sudo ip netns add docker1
在Node-2上执行:

sudo ip netns add docker2

创建Veth pairs
分别在Node-1、Node-2上执行:

sudo ip link add veth0 type veth peer name veth1
将Veth的一端放入“容器”
在Node-1上执行:
sudo ip link set veth0 netns docker1
在Node-2上执行:
sudo ip link set veth0 netns docker2

创建bridge
分别在Node-1、Node-2上创建bridge br0:
sudo brctl addbr br0


将Veth的另一端接入bridge
分别在Node-1、Node-2上执行:
sudo brctl addif br0 veth1

为"容器“内的网卡分配IP地址,并激活上线
在Node-1上执行:
sudo ip netns exec docker1 ip addr add 172.18.10.2/24 dev veth0
sudo ip netns exec docker1 ip link set veth0 up

在Node-2上执行:
[root@zabbix keepalived]# ip netns exec docker3 ip addr add 172.18.10.2/24 dev veth0
[root@zabbix keepalived]# ip netns exec docker3 ip link set veth0 up


为bridge分配IP地址,激活上线
在Node-1上执行:
ip addr add 172.18.10.1/24 dev br0
 ip link set br0 up
在Node-2上执行:
 ip addr add 172.18.20.1/24 dev br0
 ip link set br0 up
 ip addr add 172.18.10.1/24 dev br0

将bridge设置为“容器”的缺省网关
在Node-1上执行:
 ip netns exec docker1 route add default gw 172.18.10.1 veth0
在Node-2上执行:
 ip netns exec docker3 route add default gw 172.18.20.1 veth0
ip netns exec docker3 route add default gw 172.18.10.1 veth0

在Node-1创建vxlan100:

ip link add vxlan100 type vxlan \
    id 100 \
    local 192.168.31.183 \
    dev eth0 \
    dstport 4789 \
    nolearning

 ip addr add 172.18.0.0/32 dev vxlan100
 ip link set vxlan100 up
#添加路由
ip route add 172.18.10.0/24 dev vxlan100


在Node-2上执行相应的命令:

 ip link add vxlan100 type vxlan \
    id 100 \
    local 192.168.31.192 \
    dev eth0 \
    dstport 4789 \
    nolearning
 ip addr add 172.18.10.0/32 dev vxlan100
 ip link set vxlan100 up
 ip route add 172.18.10.0/24 dev vxlan100 scope global


首先在两个节点上查询到设备vxlan100的MAC地址,例如在我当前的环境:

Node-1上vxlan100的MAC地址是3a:8d:b8:69:10:3e Node-2上vxlan100的MAC地址是0e:e6:e6:5d:c2:da

然后在Node-1上增加ARP和FDB的记录:

 ip neighbor add 172.18.10.2 lladdr 02:8e:53:f1:a3:9e dev vxlan100
 bridge fdb append 02:8e:53:f1:a3:9e dev vxlan100 dst 192.168.31.192


e2:ea:8a:51:25:1f
 ip neighbor add 172.18.0.2 lladdr e2:ea:8a:51:25:1f dev vxlan100
 bridge fdb appende2:ea:8a:51:25:1f dev vxlan100 dst 192.168.31.183

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354