计算机网络 lab4 Overlay Network 和 VXLAN
一、任务要求
用 mininet 创建两个 LAN,然后用 VXLAN 创建 overlay network,让两个局域网可以互相通信。
参考
基于 Open vSwitch 的 VxLAN 隧道实验网络
【Mininet 指令介紹】
SDN 第二次作业
Openvswitch 介紹
自定义 topo 文件解析
二、原理
1.Overlay Network
2. 虚拟机的连网方式
虚拟机三种网络模式
nat:enp0s3:上网
host-only:enp0s8:两个 LAN 通信
Linux - 网卡命名方式改变了 - enp0s3,enp0s8
配置 host-only 的静态 IP
3. 流表
idle_timeout,空闲时间,如值为 10,表示若某条流表在最近 10s 内没有被匹配过则删除。
hard_timeout,存活时间,如值为 10,则从该流表被安装经过 10s 后无论被使用情况如何,立即被删除。
而如果在交换机上查看流表,会发现除以上两个时间以外,还有两个:
idle_age,未命中时间,如值为 10,表示已经有 10s 没有匹配到过这条流表了。当这个值等于 idle_timeout 时,这条流表就真的失效了。
duration,流表年龄,指的是流表自从安装到交换机上总共所经过的时间。
作者:顽强的猫尾草
链接:https://www.jianshu.com/p/22e6feb2c662
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
三、常用指令
SDN 学习笔记
Open vSwitch 的 ovs-vsctl 命令详解
OVS 簡易常用指令
1. 网桥 ovs-vsctl 基本命令
1 | ovs-vsctl show |
(1) ovs-vsctl 用于控制 ovs db
1 | ovs-vsctl add-br br0 // 创建 bridge |
(2) ovs-ofctl 用于管理 OpenFlow switch 的 flow
(3) ovs-dpctl 用于管理 ovs 的 datapath
(4) ovs-appctl 用于查询和管理 ovs daemon
2. 流表
四、实作
1. 创建拓扑
在两台虚拟机上分别设置这样的拓扑
On VM 1:1
2
3mininet> h1 ifconfig h1-eth0 10.0.0.1 netmask 255.0.0.0
mininet> h2 ifconfig h2-eth0 10.0.0.2 netmask 255.0.0.0
$ sudo ifconfig s1 10.0.0.111/8 up
On VM 2:1
2
3mininet> h3 ifconfig h3-eth0 10.0.0.3 netmask 255.0.0.0
mininet> h4 ifconfig h4-eth0 10.0.0.4 netmask 255.0.0.0
$ sudo ifconfig s2 10.0.0.112/8 up
2. 网桥配置
On VM1:1
2
3
4
5
6
7
8
9// 在 VM1 上添加 br1 网桥
sudo ovs-vsctl add-br br1
// 在 br1 上添加一个端口,将 enp0s8 挂载到 br1 上
// 将 enp0s8 的 IP 指定给 br1,让虚拟机网络可以通过 br1 继续工作
//24 是掩码位数,up 是网卡启动的意思
sudo ovs-vsctl add-port br1 enp0s8
sudo ifconfig br1 192.168.56.101/24 up
// 根据实际情况配置 br1 的网关(可选)
sudo route add default gw 192.168.56.201
On VM2:1
2
3
4
5
6
7
8
9//// 在 VM2 上添加 br1 网桥
sudo ovs-vsctl add-br br1
// 在 br1 上添加一个端口,将 enp0s8 挂载到 br1 上
// 将 enp0s8 的 IP 指定给 br1,让虚拟机网络可以通过 br1 继续工作
//24 是掩码位数,up 是网卡启动的意思
sudo ovs-vsctl add-port br1 enp0s8
sudo ifconfig br1 192.168.56.102/24 up
// 根据实际情况配置 br1 的网关(可选)
sudo route add default gw 192.168.56.201
这时候查看网络的连通性,会发现 VM2 可以 ping 通 192.168.56.101,却 ping 不通 10.0.0.111
3. 搭建 VxLAN 隧道
On VM1:1
sudo ovs-vsctl add-port s1 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.56.102
On VM2:1
sudo ovs-vsctl add-port s2 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.56.101
五、遇到问题
1. 拓扑没有删除
1 | cd mininet/mininet/examples |
Exception: Error creating interface pair (XX-eth,XX-eth): RTNETLINK answers: File exists error
挂号里通常是 Switch 的某个 eth 连到另一台 Switch 的 eth,发生错误的原因是因为当第一次建立拓扑时出错,第二次建立相同拓扑时,第一次的拓扑没有完全消除。
解决方法:运行以下指令1
sudo mn -c
2. 局域网 pingall 不通
1 | mininet> sh ovs-ofctl dump-flows s1 // 查看 s1 的 flow table |
后来发现是自己用./miniedit 创建的拓扑都 ping 不通,要自己加上流表或是运行 ryu 才会通
后来就改用 sudo mn 创建拓扑,pingall 就可以直接成功,
但是不知道怎么把这种方式创建的拓扑存储成.py 文件 (?),或是修改 host 和 switch 名字
可以参考这个
3. 两台虚拟机 ping 不通原因
查到了很多原因,但后来发现我的原因是自己用./miniedit 创建的 LAN 有问题
(1) 虚拟机 mac 地址相同导致,复制虚拟的问题
https://blog.csdn.net/dlh_sycamore/article/details/64440134
(2) 虚拟机连接方式设置为桥接
Ubuntu 两台虚拟机之间 Ping 不通
(3) 防火墙
关闭虚拟机 linux 防火墙命令
两台虚拟机互相 ping 通(互相通讯)
ubuntu 查看防火墙状态
4. 如果想要配置的 IP 永久生效
5.ubuntu18.04 自带 python, 换成 python3
重装虚拟机,按照 ryu 的时候有一步是:python get-pip.py,出错,因为这个是 python3 的用法1
2
3
4
5// 下载并设置优先级
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
// 查看默认版本
python --version
5.wireshark 权限问题
wireshark 遇到 couldn’t run /usr/bin/dumpcap in child process: Permission Denied1
2
3sudo dpkg-reconfigure wireshark-common // 选组 “YES”
sudo adduser $USER wireshark // 添加当前用户到用户组
// 重啓,即可正常使用 wireshark
6.ryu 运行出错,所以想重新按照,但最后还是重装了虚拟机
(1) 运行 ryu 程序出现 ImportError: No module named XX.py
(2) 如何在 Ubuntu 中用 apt 命令删除 / 卸载软件包
apt-get remove 删除已安装的软件包(保留配置文件),不会删除依赖软件包,保留配置文件。
apt-get purge 删除已安装的软件包(不保留配置文件),删除软件包,同时删除相应依赖软件包。
如何在 Ubuntu 中用 apt 命令删除 / 卸载软件包(remove/clean/purge)
解决 apt-get remove 和 dpkg 删除出现 E: 无法定位软件包 XXXX
7.ovs 错误解决 could not open network device XXX (No such device)
网络上说设置好端口类型为 internal 就不会再出现这个问题
但我后来发现只是我命令输错,或是没有设置端口类型
8. 用自己./miniedit 创建的网络,add route 之后,ping 不上外网
这个时候进行 ping www.baidu.com 出现:
ping: www.baidu.com: Name or service not known
Linux 报错之 ping: www.baidu.com: Name or service not known
9.linux 中查看网卡 mac 地址
“ifconfig -a 其中 HWaddr 字段就是 mac 地址”,但是我没看到 HWaddr 字段
linux 中查看网卡 mac 地址
10.Unable to fetch some archives
Ubuntu 安装应用时报错:
Unable to fetch some archives, maybe run apt-get update or try with —fix-missing?1
2
3// 解决办法
sudo apt-get clean
sudo apt-get update
计算机网络系列
计算机网络 lab1
计算机网络 lab2 使用 Mininet 创建网络拓扑
计算机网络 lab3 使用 Socket 完成多人聊天室 — 原理
计算机网络 lab3 使用 Socket 完成多人聊天室 — 实作
计算机网络 lab4 Overlay Network 和 VXLAN