网站首页 > 技术文章 正文
简介
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
猜你喜欢
- 2024-12-02 Docker容器网络实操教程
- 2024-12-02 Docker笔记:Docker网络知识介绍
- 2024-12-02 容器网络二-docker网桥原理
- 2024-12-02 Docker + Wasm 入门讲解
- 2024-12-02 新手学Docker:关于网络
- 2024-12-02 Docker 容器安全风险和防御综述
- 2024-12-02 网络包是如何在主机以及网络上进行流转的
- 2024-12-02 在Docker中安装ipsec-vpn过程记录
- 2024-12-02 docker 容器能访问宿主机上的 mysql 服务
- 2024-12-02 K8S的网络之Docker容器网络
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)