linux查看网卡bridge还是tap,Linux 虚拟网络——namespace、veth pair、bridge 说明和命令实操...

namespace

前言

namespace是Linux虚拟网络的一个重要概念,传统的Linux的许多资源是全局的,如果进程id资源。而namespace的目的首先就是讲这些资源做资源隔离。Linux可以在一个Host内创建许多namespace,于是那些原本是linux的全局资源,就变成了namespace范围内的“全局”资源,而且不同namespace的资源相互不可见,彼此透明。

Linux namespace 可以隔离的资源有:uts_ns(内存、版本等底层信息)、ipc_ns(所有与进程通信的信息)、 mnt_ns(当前装载的文件系统)、 pid_ns(有关进程id的信息)、 user_ns(资源配额的信息)、 net_ns(网络信息)。

一个设备(Linux Device)只能位于一个namespace中,不同namespace中的设备可以利用veth pair进行桥接。

命令实操

Linux 操作namespace的命令是ip netns。

# ip netns help

142636762_1_20180829071940520

首先创建一个namespace:

# ip netns list

# ip netns add ns_test

142636762_2_20180829071940614

当创建一个namespace后,就可以将一些虚拟设备迁移到这个namespace中去了,比如上一篇中介绍的tap。

# tunctl -t tap_test

# ip addr add local 10.0.0.190/24 dev tap_test

# ip a show

142636762_3_20180829071940786

142636762_4_20180829071940895

创建namespace后,将前面创建的tap_test迁移到这个namespace中。

迁移之后,在外直接 ip a s 已经看不到这个虚拟设备了

# ip link set tap_test netns ns_test

# ip netns exec ns_test ip a s

142636762_5_2018082907194120

veth pair

前言

veth pair 不是一个设备,而是一对设备,以连接两个虚拟以太端口。操作veth pair,需要跟namespace一起配合,不然就没有意义。

简单的拓扑图:

142636762_6_2018082907194198

两个namespace ns1/ns2 中各有一个tap组成veth pair,两个tap 上配置的ip进行互ping。

命令实操

创建 veth pair:

# ip link add tap1 type veth peer name tap2

# ip a s

142636762_7_20180829071941192

创建namespace,并将tap迁移至namespace中:

# ip netns add ns1

# ip netns add ns2

# ip link set tap1 netns ns1

# ip link set tap2 netns ns2

# ip netns exec ns1 ip addr add local 192.168.10.200/24 dev tap1

# ip netns exec ns2 ip addr add local 192.168.10.201/24 dev tap2

# ip netns exec ns1 ifconfig tap1 up

# ip netns exec ns2 ifconfig tap2 up

142636762_8_20180829071941317

根据ip进行ping操作,验证连通性:

# ip netns exec ns1 ping 192.168.10.201

142636762_9_20180829071941395

通过以上的测试用例,可以了解通过veth pair连接两个namespace的方法。

下面就要依靠Bridge/Switch 实现三个或多个namespace进行互通。

Bridge

前言

在Linux的语境中,Bridge和Switch是一个概念。Bridge是一个虚拟网络设备,所以具有网络设备的特征,可以配置IP、MAC地址等;Bridge是一个虚拟交换机,和物理交换机有类似的功能。对于普通的网络设备来说,只有两端,从一端进来的数据会从另一端出去,如物理网卡从外面网络中收到的数据会转发给内核协议栈,而从协议栈过来的数据会转发到外面的物理网络中。 而Bridge不同,Bridge有多个端口,数据可以从任何端口进来,进来之后从哪个口出去和物理交换机的原理差不多,要看mac地址。

命令实操

Linux实现Bridge功能是brctl模块。可以直接在命令行上查看,如果没有回显的话,可直接使用yum进行安装。

# yum -y install bridge-utils

142636762_10_20180829071941567

142636762_11_20180829071941629

根据如下拓扑图,我们模拟创建相应的虚拟网络设备,进行实现:

142636762_12_20180829071941739

命令操作:

# ip link add tap1 type veth peer name tap1_peer

# ip link add tap2 type veth peer name tap2_peer

# ip link add tap3 type veth peer name tap3_peer

# ip link add tap4 type veth peer name tap4_peer

142636762_13_20180829071941848

创建namespace:

142636762_14_20180829071941926

将设备迁移至namespace:

142636762_15_2018082907194220

创建 Bridge,并tap 添加到 Bridge中:

# brctl addbr br1

# ip a s | grep br1

# brctl addif br1 tap1_peer

142636762_16_20180829071942129

配置 tap 对应的ip地址:

# ip netns exec ns1 ip addr add local 192.168.10.200/24 dev tap1

142636762_17_20180829071942192

将 Bridge 以及所有 tap 状态设置为 up:

# ip link set br1 up

# ip link set tap1_peer up

# ip netns exec ns1 ip link set tap1 up

142636762_18_20180829071942286

相互进行ip 互ping ,验证网络连通:

142636762_19_20180829071942457

142636762_20_20180829071942614

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值