使用openvswitch网桥连接不同的network namespace
Namespace是Linux提供的一种内核级别环境隔离的方法,在Linux中Namespace实际上有6中,这里只是单纯的说明一下网络命名空间(Network Namespace)。在实际应用中,Network NameSpace为kvm、容器等虚拟化所打造的一个虚拟化网络环境,他使得你可以创建不同的命名空间,并且每个命名空间都是相对独立的,有自己的ip、arp、route,并且每个命名空间都相互不影响。
在内核中的支持如下:
相关内容可参考:ip netns的使用及network namespace 简介
下面将介绍使用openvswitch创建网桥,连接两个不同的Network Namespace。网络拓扑如下:
1. 创建两个Network Namespace
# ip netns add ns0
# ip netns add ns1
# ip netns
ns1
ns0
2. 创建两组veth
两组veth成对出现,两个相互连接的命名空间(两个设备间相当于用网线直接连接在一起)。
默认会创建下面两对点到点的veth:
veth0—veth1
veth2—veth3
或者这样创建自定义命名设备:
ip link add veth0 type veth peer name veth1
ip link add veth2 type veth peer name veth2
# ip link add type veth
# ip link add type veth
# ip addr
1: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether ea:25:dd:b8:1d:77 brd ff:ff:ff:ff:ff:ff
2: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop master ovs-system state DOWN group default qlen 1000link/ether ee:e9:83:72:bf:08 brd ff:ff:ff:ff:ff:ff
3: veth2@veth3: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 46:dc:09:03:fe:b1 brd ff:ff:ff:ff:ff:ff
4: veth3@veth2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop master ovs-system state DOWN group default qlen 1000
3. 把veth0/veth2划到ns0/ns1中,并配置ip
# ip link set veth0 netns ns0
# ip netns exec ns0 ip addr add 10.0.0.1/24 dev veth0
# ip netns exec ns0 ip link set veth0 up
# ip netns exec ns0 ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
5: veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether ea:25:dd:b8:1d:77 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.0.0.1/24 scope global veth0valid_lft forever preferred_lft foreverinet6 fe80::e825:ddff:feb8:1d77/64 scope link valid_lft forever preferred_lft forever# ip link set veth2 netns ns1
# ip netns exec ns1 ip addr add 10.0.0.2/24 dev veth2
# ip netns exec ns1 ip link set veth2 up
# ip netns exec ns1 ip addr
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
7: veth2@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 46:dc:09:03:fe:b1 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.0.0.2/24 scope global veth2valid_lft forever preferred_lft foreverinet6 fe80::44dc:9ff:fe03:feb1/64 scope link valid_lft forever preferred_lft forever
4. 创建网桥vswitch0,并将把veth1/veth3加入到网桥
# ovs-vsctl add-br vswitch0
# ovs-vsctl add-port vswitch0 veth1
# ovs-vsctl add-port vswitch0 veth3
# ip link set dev veth1 up
# ip link set dev veth3 up
# ovs-vsctl show
9f5877b0-14c0-41bd-a5c7-627e8d1aac24Bridge "vswitch0"Port "veth1"Interface "veth1"Port "vswitch0"Interface "vswitch0"type: internalPort "veth3"Interface "veth3"ovs_version: "2.12.0"
5. 分别进入ns0/ns1,ping一下对方,查看效果
# ip netns exec ns0 /bin/bash --rcfile <(echo "PS1=\"ns0> \"")
ns0> ip addr show veth0
5: veth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether ea:25:dd:b8:1d:77 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.0.0.1/24 scope global veth0valid_lft forever preferred_lft foreverinet6 fe80::e825:ddff:feb8:1d77/64 scope link valid_lft forever preferred_lft forever
ns0> ping 10.0.0.2 -c 3
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.409 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.083 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.079 ms--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 87ms
rtt min/avg/max/mdev = 0.079/0.190/0.409/0.155 ms
# ip netns exec ns1 /bin/bash --rcfile <(echo "PS1=\"ns1> \"")
ns1> ip addr show veth2
7: veth2@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 46:dc:09:03:fe:b1 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 10.0.0.2/24 scope global veth2valid_lft forever preferred_lft foreverinet6 fe80::44dc:9ff:fe03:feb1/64 scope link valid_lft forever preferred_lft forever
ns1> ping 10.0.0.1 -c 3
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.254 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.079 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.079 ms--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 39ms
rtt min/avg/max/mdev = 0.079/0.137/0.254/0.083 ms
参考:
https://www.jianshu.com/p/df3931c2ec8a
https://www.cnblogs.com/zqyanywn/p/10491916.html
使用openvswitch网桥连接不同的network namespace相关推荐
- Linux网络虚拟化基石 network namespace
1 网络虚拟化基石 network namespace Linux的namespace的作用就是"隔离内核资源". 在Linux的世界里,文件系统挂载点.主机名.POSIX进程间通 ...
- Linux Namespace系列(06):network namespace (CLONE_NEWNET)
network namespace用来隔离网络设备, IP地址, 端口等. 每个namespace将会有自己独立的网络栈,路由表,防火墙规则,socket等. 每个新的network namespac ...
- linux网络命名空间详解,Linux Network Namespace (netns) 详解
Linux Network Namespace (netns) 详解 Network Namespace (以下简称netns)是Linux内核提供的一项实现网络隔离的功能,它能隔离多个不同的网络空间 ...
- linux 的ip 设置lo_linux网络虚拟化: network namespace 简介及实验
namespace(命名空间)和cgroup是软件容器化(想想Docker)趋势中的两个主要内核技术.简单来说,cgroup是一种对进程进行统一的资源监控和限制,它控制着你可以使用多少系统资源(CPU ...
- ip netns的使用及network namespace 简介
network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中.这篇文章介绍 networ ...
- Connectify错误“Internet Connection Sharing is currently unavailable.”解决方法不要有多重的网桥连接
1.在"控制面板"--"服务"中确保"Internet Connection Sharing"启动 2.不要有多重的网桥连接 3.在&quo ...
- Network Namespace
在linux上,网络的隔离是通过network namespace来管理的,不同的network namespace是互相隔离的 ip netns list:查看当前机器上的network names ...
- Linux namespace之:network namespace
理解network namespace network namespace用来隔离网络环境,「在network namespace中,网络设备.端口.套接字.网络协议栈.路由表.防火墙规则等都是独立的 ...
- 亚马逊的PuTTY连接AWS出现network error connection refused,终极解决方案。
亚马逊的PuTTY连接AWS出现network error connection refused,终极解决方案. 参考文章: (1)亚马逊的PuTTY连接AWS出现network error conn ...
最新文章
- opt eclipse jre bin java_Linux下安装JDK和Eclipse的配置方法
- 你真的会vue-router吗?
- .17-浅析webpack源码之compile流程-入口函数run
- 开发日记-20190706 关键词 读书笔记 《Perl语言入门》Day 3
- linux让数值依次递增的快捷键,如何将文件名批量修改成上一级文件夹的名字。如:A(文件夹名)-01这样依次递增?...
- linux如何查看git安装路径,Git - 如何验证Ubuntu上是否安装Git以及在何处安装Git - Ubuntu问答...
- java jar包示例_Java包getSpecificationVendor()方法和示例
- 阿里P8亲自讲解!java实例变量和类变量
- winform 分页控件分享(二)
- 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关
- WINDOWS访问虚拟机RedHat搭配的Apache2服务器
- 95-20-025-启动器-AbstractBootstrap
- 如何清除web 服务器的缓存
- mysql之查询最近7天的数据
- 123f是什么c语言,123RF博客
- 十折交叉验证python_k折交叉验证(matlab和python程序实现)
- ifonts提取下载ttf文件
- 隧道场景人员车辆定位系统-帮助隧道施工实现智能化管理
- php人民币转换,PHP转换,如何实现人民币中文大写与数字相互转换?
- (一)Word中如何将表格断开,并且增加空的一行