配置docker容器veth-pair---实现桥接模式

发布时间 2023-03-22 21:13:30作者: ooyls

前言:已知docker网络三种基础模式 bridge 、 host 、 none,

  · bridge :桥接模式,创建容器时默认的网络模式;docker安装时,在宿主机内创建一个虚拟网桥docker0,并自动给docker0分配一个和宿主机不同网段的IP,本质是依靠docker0转换借助宿主机的IP与外网联通。

  · host :主机模式,使用需要指定 --network  host;和宿主机共用一个网段,使用宿主机的IP和端口,直接访问外网。

  · none : 无网络模式,需要指定;安全性高,初始只有lo回环网络,其他需要自行配置。

· veth-pair : docker0在宿主机创建的一对虚拟设备接口/网卡(成对出现),一般以 vethxxx@数字 命名,且单数在宿主机,双数在容器内。

                    作用----链接两台设备,相互通信,访问外网

【宿主机】

 

【容器】

--------------------------开始操作---------------------------

目标 :为none模式添加veth-pair接口,并实现访问外网

1、创建none模式的容器

【容器内部】

2、创建veth对

  · ip link add test1 type veth peer name test2

3、使veth-pair可以正常运行的环境准备

(1)查看容器的PID

(2)在/var/run下创netns目录装容器网络的namespace文件,直接软连接/proc/PID/ns/net

【通过PID指定容器独立的namespace加入到/var/run里,/var/run目录包含系统运行时需要改变的数据】

(3)添加test2到容器中

【目录名必须是 netns = network namespace】

【检查容器内部,建议多多检查,以防某一步出错】

此时test2是DOWN状态,启动test2

  ·  ip netns exec 32956 ip link set test2 up

【还可以改名,建议改成eth0,我不改  · ip netns exec 32956  ip link set test2 name eth0】

4、给test2配IP和网关

【给test2配的IP和网关要在docker0默认网段内 docker0默认网段172.17.0.1,可以改配置文件改变默认网段】

5、配置test1(将test1和docker0连接,test2即可通过test1网段访问外网)

(1)下载brctl工具bridge-utils

  (2)连接test1和docker0

(3)启动test1

  · ip link set test1 up

5、测试验证

(1)ping 网关

(2)ping宿主机

 (3)ping百度