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相关推荐

  1. Linux网络虚拟化基石 network namespace

    1 网络虚拟化基石 network namespace Linux的namespace的作用就是"隔离内核资源". 在Linux的世界里,文件系统挂载点.主机名.POSIX进程间通 ...

  2. Linux Namespace系列(06):network namespace (CLONE_NEWNET)

    network namespace用来隔离网络设备, IP地址, 端口等. 每个namespace将会有自己独立的网络栈,路由表,防火墙规则,socket等. 每个新的network namespac ...

  3. linux网络命名空间详解,Linux Network Namespace (netns) 详解

    Linux Network Namespace (netns) 详解 Network Namespace (以下简称netns)是Linux内核提供的一项实现网络隔离的功能,它能隔离多个不同的网络空间 ...

  4. linux 的ip 设置lo_linux网络虚拟化: network namespace 简介及实验

    namespace(命名空间)和cgroup是软件容器化(想想Docker)趋势中的两个主要内核技术.简单来说,cgroup是一种对进程进行统一的资源监控和限制,它控制着你可以使用多少系统资源(CPU ...

  5. ip netns的使用及network namespace 简介

    network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中.这篇文章介绍 networ ...

  6. Connectify错误“Internet Connection Sharing is currently unavailable.”解决方法不要有多重的网桥连接

    1.在"控制面板"--"服务"中确保"Internet Connection Sharing"启动 2.不要有多重的网桥连接 3.在&quo ...

  7. Network Namespace

    在linux上,网络的隔离是通过network namespace来管理的,不同的network namespace是互相隔离的 ip netns list:查看当前机器上的network names ...

  8. Linux namespace之:network namespace

    理解network namespace network namespace用来隔离网络环境,「在network namespace中,网络设备.端口.套接字.网络协议栈.路由表.防火墙规则等都是独立的 ...

  9. 亚马逊的PuTTY连接AWS出现network error connection refused,终极解决方案。

    亚马逊的PuTTY连接AWS出现network error connection refused,终极解决方案. 参考文章: (1)亚马逊的PuTTY连接AWS出现network error conn ...

最新文章

  1. opt eclipse jre bin java_Linux下安装JDK和Eclipse的配置方法
  2. 你真的会vue-router吗?
  3. .17-浅析webpack源码之compile流程-入口函数run
  4. 开发日记-20190706 关键词 读书笔记 《Perl语言入门》Day 3
  5. linux让数值依次递增的快捷键,如何将文件名批量修改成上一级文件夹的名字。如:A(文件夹名)-01这样依次递增?...
  6. linux如何查看git安装路径,Git - 如何验证Ubuntu上是否安装Git以及在何处安装Git - Ubuntu问答...
  7. java jar包示例_Java包getSpecificationVendor()方法和示例
  8. 阿里P8亲自讲解!java实例变量和类变量
  9. winform 分页控件分享(二)
  10. 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关
  11. WINDOWS访问虚拟机RedHat搭配的Apache2服务器
  12. 95-20-025-启动器-AbstractBootstrap
  13. 如何清除web 服务器的缓存
  14. mysql之查询最近7天的数据
  15. 123f是什么c语言,123RF博客
  16. 十折交叉验证python_k折交叉验证(matlab和python程序实现)
  17. ifonts提取下载ttf文件
  18. 隧道场景人员车辆定位系统-帮助隧道施工实现智能化管理
  19. php人民币转换,PHP转换,如何实现人民币中文大写与数字相互转换?
  20. (一)Word中如何将表格断开,并且增加空的一行

热门文章

  1. spin lock自旋锁
  2. Java synchronized到底锁住的是什么?
  3. openfire过滤脏话插件,控制消息是否发送
  4. asp.net Core 中间件Hello world
  5. 从前M个字母中取N个的无重复排列(回溯)
  6. [转]RegOpenKeyEx函数失败的问题
  7. ORA-02266错误处理
  8. MPLS/×××江湖恩仇录笔记
  9. SpaceEmacs Rocks Day8 学习笔记
  10. PowerDesigner 15生成数据字典