Linux 虚拟网络:namespace、veth pair、bridge

概述

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

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

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

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。

[root@ip-172-31-43-53 ~]# ip netns help
Usage: ip netns list
       ip netns add NAME
       ip netns set NAME NETNSID
       ip [-all] netns delete [NAME]
       ip netns identify [PID]
       ip netns pids NAME
       ip [-all] netns exec [NAME] cmd ...
       ip netns monitor
       ip netns list-id

创建namespace

# 创建namespace
[root@ip-172-31-43-53 ~]# ip netns add ns_test

# 查看namespace
[root@ip-172-31-43-53 ~]# ip netns list
ns_test

veth pair

简单的拓扑图:
image
两个namespace ns1/ns2 中各有一个tap组成veth pair,两个tap 上配置的ip进行互ping。

命令

Bridge

命令实操

yum -y install bridge-utils

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

命令操作:
# 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

参考链接

链接:http://www.360doc.com/showweb/0/0/995566870.aspx

posted @ 2021-09-15 10:57  Star-Hitian  阅读(383)  评论(0)    收藏  举报