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

简介

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

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

veth pair

顾名思义,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

参考资料

  1. 《linux 网络虚拟化: network namespace 简介》author@cizixs

@山东·威海 2020.05.08

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值