计算机系统应用教程网站

网站首页 > 技术文章 正文

linux网络虚拟化:network namespace之间的通信

btikc 2024-12-02 15:34:52 技术文章 51 ℃ 0 评论

简介

network namespace 是实现网络虚拟化的重要功能,可以创建多个隔离的网络空间,各自拥有独立的网络栈信息。

network namespace 是 linux 内核提供的功能。

veth pair

顾名思义,veth-pair 就是一对的虚拟设备接口,它都是成对出现的。一端连着协议栈,一端彼此相连,如图所示:


正因为有这个特性,它常常充当着一个桥梁,连接着各种虚拟网络设备,典型的例子像“两个 namespace 之间的连接”,“Bridge、OVS 之间的连接”,“Docker 容器之间的连接” 等等,以此构建出非常复杂的虚拟网络结构,比如 OpenStack Neutron。

创建 network namespace

我们的操作均基于 ip 命令,一般系统会默认安装,如果没有的话,请自行安装。

network namespace 有关的操作都是在子命令 ip nents 下进行的。在操作前,我们需要获取 root 权限,便于创建 network namespace。

sudo -i

默认情况下,使用 ip netns 是没有网络 namespace 的。我们先创建两个 network namespace。

[root@localhost ~]ip netns add net0

[root@localhost ~]ip netns add net1

查看 network namespace 的情况。

[root@localhost ~]ip netns ls

ip netns 命令创建的 network namespace 会出现在 /var/run/netns/ 目录下。

同一子网内的通信

接下来我们需要创建veth pair,veth pair 是成对出现的,删除一个时,另一个也会随之删除。

[root@localhost ~]ip link add eth0 type veth peer name eth1

查看 veth 的情况。

[root@localhost ~]ip link

将 veth 添加到 network namespace 中。

[root@localhost ~]ip link set eth0 netns net0

[root@localhost ~]ip link set eth1 netns net1

设置 IP 地址,这里我们先设为同一子网内的地址。

[root@localhost ~]ip netns exec net0 ip link set eth0 up

[root@localhost ~]ip netns exec net0 ip addr add 10.0.0.1/24 dev eth0
[root@localhost ~]ip netns exec net1 ip link set eth1 up

[root@localhost ~]ip netns exec net2 ip addr add 10.0.0.2/24 dev eth1

用 ping 检查两个 network namespace 是否可以通信。

[root@localhost ~]ip netns exec net0 ping -c 3 10.0.0.2

跨子网间的通信

这里我们将 IP 地址设为不同子网下的。

[root@localhost ~]ip netns exec net0 ip link set eth0 up

[root@localhost ~]ip netns exec net0 ip addr add 10.0.0.1/24 dev eth0
[root@localhost ~]ip netns exec net1 ip link set eth1 up

[root@localhost ~]ip netns exec net2 ip addr add 10.0.1.1/24 dev eth1

需要借助路由去进行跨子网间通信,下一步就是设置路由。

[root@localhost ~]ip netns exec net0 ip route add default via 10.0.0.1

[root@localhost ~]ip netns exec net1 ip route add default via 10.0.1.1

最后用 ping 检查是否可以通信。

[root@localhost ~]ip netns exec net0 ping -c 3 10.0.1.1

[root@localhost ~]ip netns exec net1 ping -c 3 10.0.0.1

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表