文章目录
利用Bridge创建虚拟网络连通两个命名空间
1. 配置yum源
先检查虚拟机设置是否挂载镜像。
创建文件夹,镜像挂载,备份原来的yum源文件到home文件。
# mkdir /opt/centos
# mount -o loop /dev/cdrom /opt/centos
# mv /etc/yum.repos.d/* /home/
编辑yum配置文件
# vi /etc/yum.repos.d/local.repo
添加内容如下:
[centos]
name=centos
baseurl=file:///opt/centos/
gpgcheck=0
enable=1
保存退出::wq
2. 安装网桥模块
yum install -y bridge-utils
3. 查询网桥模块
# modinfo bridge
4. 加载网桥模块,检查网桥挂载情况,检查网桥
# modprobe bridge
# lsmod |grep bridge
# brctl show
5. 创建逻辑网段,名称为br0
# brctl addbr br0
# brctl show
6. 创建两个不同的网络
Bridge 是用来连接两个不同的虚拟网络的,所以在准备实验 bridge 之前我们得先需要用 net namespace 构建出两个不同的网络空间来。
net1:
# ip netns add net1
接下来创建一对儿 veth 出来,设备名分别是 veth1 和 veth1_p。并把其中的一头 veth1 放到这个新的 netns 中。
# ip link add veth1 type veth peer name veth1_p
# ip link set veth1 netns net1
因为我们打算是用这个 veth1 来通信,所以需要为其配置上 ip,并把它启动起来。
# ip netns exec net1 ip addr add 192.168.0.101/24 dev veth1
# ip netns exec net1 ip link set veth1 up
查看一下,上述的配置是否成功。
# ip netns exec net1 ip link list
# ifconfig
(如命令无法使用,则需安装net-tools)
# yum -y install net-tools
# ip netns exec net1 ifconfig
重复上述步骤,在创建一个新的 netns出来,命名分别为。
netns: net2
veth pair: veth2, veth2_p
ip: 192.168.0.102
这样我们就在一台 Linux 就创建出来了两个虚拟的网络环境。
7. 把两个网络连接到一起
在上一个步骤中,我们只是创建出来了两个独立的网络环境而已。这个时候这两个环境之间还不能互相通信。我们需要创建一个虚拟交换机 - bridge, 来把这两个网络环境连起来。
创建过程如下。
创建一个 bridge 设备, 把刚刚创建的两对儿 veth 中剩下的两头“插”到 bridge 上来。
# ip link set dev veth1_p master br0
# ip link set dev veth2_p master br0
# ip addr add 192.168.0.100/24 dev br0
再为 bridge 配置上 IP,并把 bridge 以及插在其上的 veth 启动起来。
# ip link set veth1_p up
# ip link set veth2_p up
# ip link set br0 up
查看一下当前 bridge 的状态,确认刚刚的操作是成功了的。
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.4e931ecf02b1 no veth1_p
veth2_p
8 网络连通测试
我们在 net1 里(通过指定 ip netns exec net1 以及 -I veth1),ping 一下 net2 里的 IP(192.168.0.102)
# ip netns exec net1 ping 192.168.0.102 -I veth1
PING 192.168.0.102 (192.168.0.102) from 192.168.0.101 veth1: 56(84) bytes of data.
64 bytes from 192.168.0.102: icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from 192.168.0.102: icmp_seq=2 ttl=64 time=0.008 ms
64 bytes from 192.168.0.102: icmp_seq=3 ttl=64 time=0.005 ms
这样,我们就在一台 Linux 上虚拟出了 net1 和 net2 两个不同的网络环境。我们还可以按照这种方式创建更多的网络,都可以通过一个 bridge 连接到一起。这就是 Docker 中网络系统工作的基本原理。
文章中部分内容借鉴微信公众号《张彦飞allen》大神的帖子,特此声明。