IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux实现VXLAN点对点网络通信-实验 -> 正文阅读

[系统运维]Linux实现VXLAN点对点网络通信-实验

1. 点对点vxlan通信逻辑拓扑

在这里插入图片描述

1.1 目标

两台主机之间的ns1 namespace和 ns2 namespace之间通过vxlan相互通信。
描述网络结构图(包的构成和转发依据)

1.2 实现步骤

1.2.1 关闭防火墙

systemctl stop firewalld
systemctl disalbe firewalld

1.2.2 创建vxlan设备,并配置IP

ip link add vxlan1 type vxlan id 100 dstport 4789 \
 remote 10.33.30.151 local 10.33.30.150 dev ens160
 参数解释
id 100 : 指定 VNI 的值,有效值在 1 到 2^24 之间。
dstport : VTEP 通信的端口,IANA 分配的端口是 4789。如果不指定,Linux 默认使用 8472。ovs创建的vxlan port也是默认使用端口4789
remote : 对端 VTEP 的地址。
local : 当前节点 VTEP 要使用的 IP 地址,即当前节点隧道口的 IP 地址。
dev eth0 : 当前节点用于 VTEP 通信的设备,用来获取 VTEP IP 地址。这个参数与 local 参数目的相同,二选一即可

查看vxlan1的详细信息:

[root@ld-vxlan1 ~]#  ip -d link show vxlan1
3: vxlan1: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether f6:6b:60:7a:24:f2 brd ff:ff:ff:ff:ff:ff promiscuity 0 
    vxlan id 100 remote 10.33.30.151 local 10.33.30.150 dev ens160 srcport 0 0 dstport 4789 ageing 300 noudpcsum noudp6zerocsumtx noudp6zerocsumrx addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

同时会增加一条bridge FDB转发表

[root@ld-vxlan1 ~]# bridge fdb
00:00:00:00:00:00 dev vxlan1 dst 10.33.30.151 via ens160 self permanent

全零表项表示没有匹配的MAC地址时,就发送到该表项中的VTEP。这条表项的意思是,默认的VTEP对端地址为10.33.30.151,原始报文经过vxlan1后会添加vxlan头部,而外部UDP头的目的IP地址会被冠上10.33.30.151

为vxlan1配置IP地址并启用

ip link set dev vxlan1 up
ip addr add 192.168.1.254/32 dev vxlan1

问题1? 为什么是32位的,24位的不可以吗?
因为后边br1的ip也是192.168.1.0/24网段的,这里改成24位会无法正常路由,路由条目有两个1.0网段路由,ns1流量访问br1的192.168.1.1的出去流量会因为路由问题无法响应,导致不通。

1.2.3 创建bridge,并设置IP

brctl addbr br1
ip link set dev br1 up
ip addr add 192.168.1.1/24 dev br1

1.2.4 创建namespace,veth pair,分别移入bridge和ns中

ip netns add ns1
ip link add tap1 type veth peer name tap2
ip link set dev tap2 up
ip link set tap1 netns ns1
ip netns exec ns1 ip link set dev tap1 up 
ip netns exec ns1 ip addr add 192.168.1.100/24 dev tap1
brctl addif br1 tap2

1.2.5 系统网络内核参数修改

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/br1/rp_filter

问题2?上面两个参数不修改也可以通信?
只是本场景没有涉及到,其他场景有可能用到该内核参数,反向路径检测。

echo 1 > /proc/sys/net/ipv4/ip_forward

1.2.6 配置路由

ip netns exec ns1 ip route add default via 192.168.1.1
ip route add 192.168.2.0/24 via 192.168.2.254 dev vxlan1 onlink

若不设置onlink,会提示network is unreachable
onlink的意义在于协议栈虽然找不到链路层直连路由,但是还是会发布针对via网关的arp请求的.

1.2.7 状态截图

vxlan1 主机1
在这里插入图片描述
vxlan2主机2
在这里插入图片描述

1.3 点对点VXLAN通信过程

主机1 ns1向主机2 ns2发送第一个包,各个接口抓包状态。
在这里插入图片描述

1.3.1 主机1 br1接口抓包

9a:9d:8a:71:77:a9 是 ns1 namespace tap1设备的mac,
4a:a4:77:8f:e7:90 是br1设备的mac.
(1)当ns1中的tap1网卡去ping另一个主机的ns2中的网卡192.168.2.100时,跨网段访问会将请求发给网关,先发送arp请求获取网关192.168.1.1的mac。

arp请求报文:
sender IP:192.168.1.100
sender mac:9a:9d:8a:71:77:a9
target IP:192.168.1.1
target mac:全0
以太二层封装:
源MAC:NS1中tap1设备(192.168.1.100)的mac
目的MAC:全F
arp广播请求报文会通过tap1–>tap2达到宿主机,本地MAC地址表会学习记录该报文的源MAC和接受接口的对应关系。
在这里插入图片描述
收到该arp广播请求,解封装之后查看arp请求的IP是本地的,那么构建arp单播响应,根据先前学习记录的对应mac表项出接口是br1设备上的tap2口到达ns1。
arp响应报文:
sender IP:192.168.1.1
sender mac:4a:a4:77:8f:e7:90
target IP:192.168.1.100
target mac:9a:9d:8a:71:77:a9
以太二层封装:
源MAC:br1网桥设备的mac(192.168.1.1网关的mac)
目的MAC:NS1中tap1网卡设备(192.168.1.100)的mac

(2)ns1收到网关的arp响应之后,缓存到本地
在这里插入图片描述
然后继续构建icmp请求报文

  • 源IP:192.168.1.100 目的IP:192.168.2.100 源MAC:9a:9d:8a:71:77:a9
  • 目的MAC:4a:a4:77:8f:e7:90

在这里插入图片描述

(3)ICMP请求报文通过tap1–tap2设备从ns1到达宿主机1时也就是到达默认的namespace时,

  • 查看报文目的MAC是本机的br1设备MAC,解封装拆掉二层帧头,露出IP报文。
    (br设备的MAC地址是它所有从设备中最小的MAC地址),在这里br1设备只有一个从设备tap2,所以br1的mac和tap2的mac一致.

在这里插入图片描述

  • 查看宿主机(default namespace)路由表,匹配路由,发现去往192.168.2.0/24的下一跳为192.168.2.254,出接口为vxlan1
  • 不是发往本机的,需要判断本地是否开启了路由转发功能,如果开启则发送arp请求192.168.2.254的mac地址.
  • 出接口是vxlan1,需要进行vxlan封装,会使用出接口的IP,MAC作为报文的源地址。

vxlan1收到报文截图,vxlan接口抓的包是未封装之前或解封装之后的报文。
6:6b:60:7a:24:f2 --> vxlan1(192.168.1.254)的MAC
52:8f:7f:a6:f4:b1 --> vxlan2(192.168.2.254)的MAC

在这里插入图片描述
ens160接口抓包截图,是vxlan封装之后的报文
原始arp请求报文

  • send MAC:f6:6b:60:7a:24:f2(vxlan1设备的mac)
  • send IP:192.168.1.254(vxlan1设备的IP)
  • target MAC:全0
  • target IP:192.168.2.254

内层以太二层帧

  • 源MAC:VXLAN1设备的mac
  • 目的MAC:全F

vxlan封装

  • vni为100

UDP封装:

  • 源端口随机端口,目的端口4789

外层VtepIP封装:

  • 源IP:10.33.30.150
  • 目的IP:10.33.30.151

外层以太二层帧:

  • 源MAC:本端Vtep(10.33.30.150)接口的MAC
  • 目的MAC:对端Vtep(10.33.30.151)接口的MAC
    在这里插入图片描述
    在这里插入图片描述
    主机2 ens160抓取的报文和主机1 ens160抓取的报文一样
    在这里插入图片描述
    (4)报文到达主机2,解封装,
    主机2 vxlan2抓取报文.
    vxlan2这里的报文是已经解封装之后的报文。
    在这里插入图片描述
    根据原始arp广播报文发现(主机本地fdb mac地址表会记录该广播包的源MAC和入接口绑定) 请求的是本机的192.168.2.254的MAC,
    构建ARP单播响应,目的MAC是f6:6b:60:7a:24:f2,源MAC是52:8f:7f:a6:f4:b1
    根据fdb转发表查看发给f6:6b:60:7a:24:f2这个MAC表项出接口是Vxlan2.
    三层路由出接口和二层的出接口必须一致,三层路由表项和二层转发表项都得有,不然会不通(两个表都会查)
    在这里插入图片描述
    在这里插入图片描述
    arp单播响应也会进行vxlan封装
    在这里插入图片描述

(5)主机1收到192.168.2.254的arp响应之后,开始构建发送icmp请求报文。
根据三层路由表和fdb转发表得知发往aa:f4:53:6c:aa:a6这个MAC的数据包需要走Vxlan1通道,进行vxlan封装:

在这里插入图片描述
ICMP报文
IP封装

  • 源IP:192.168.1.100
  • 目的IP:192.168.2.100
    内层以太二层封装:
  • 源MAC:vxlan1设备MAC
  • 目的MAC:vxlan2设备MAC

vxlan封装

  • vni为100

UDP封装:

  • 源端口随机端口,目的端口4789

外层VtepIP封装:

  • 源IP:10.33.30.150
  • 目的IP:10.33.30.151

外层以太二层帧:

  • 源MAC:本端Vtep接口的MAC
  • 目的MAC:对端Vtep接口的MAC

在这里插入图片描述
(6)vxlan封装的ICMP请求报文到达主机2 VTEP设备,解封装之后二层目的MAC是vxlan设备的MAC(192.168.2.254/32),发现原始报文访问的是192.168.2.100,与本地不是同一网段(vxlan设备32位主机路由),查找路由表发现去往192.168.2.0/24网段的出接口是br2,使用src 192.168.2.1作为广播源,arp广播请求192.168.2.100的mac。
在这里插入图片描述
(7)ns2的tap1网卡收到arp请求会返回arp响应。
ce:25:e7:db:28:a0 --> br2 192.168.2.1网关的MAC
在这里插入图片描述
(8)得到mac之后,构建ICMP报文,目的MAC是192.168.2.100的MAC,根据br2转发表将数据从br2网桥的tap2设备转发出去,最终ns2中的tap1网卡会受到请求包。
在这里插入图片描述
报文封装如下:
ICMP报文
IP封装

  • 源IP:192.168.1.100
  • 目的IP:192.168.2.100

内层以太二层封装:

  • 源MAC:br2设备MAC(192.168.2.1MAC)
  • 目的MAC:192.168.2.100的MAC
    在这里插入图片描述
    回包逻辑大体同上。

问题3?为什么还要在vxlan设备上在配置IP地址,直接使用VTEP的地址可以吗?
问题3实验测试结果:
vxlan的地址是必须要配置的,如果vxlan设备不配置IP,那么arp请求中的sender IP 是10.33.30.150(vxlan设备配置的local端VTEP地址),那么对端Vtep收到之后不会回复arp响应,如果配置了IP 192.168.1.254,那么ARP请求中的sender IP是192.168.1.254,那么对端VTEP会回复arp响应,指向对端网络的路由无论下一跳是对端Vtep地址还是对端vxlan地址都可以通信。vxlan设备配置IP和不配置IP前后的报文中就这一个字段sender IP有区别。

通信后状态
在这里插入图片描述
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 22:09:38  更:2021-11-14 22:12:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:58:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码