docker实际网络和虚拟网络分析

1.

以下是针对 ifconfig 输出中网络接口的详细分析,解释实际 IP 和虚拟 IP 的产生原因及作用:


一、网络接口分类

根据输出内容,网络接口可分为以下几类:

接口类型示例接口名IP 地址产生原因
物理网卡ens33192.168.188.131宿主机的真实物理网卡,连接到外部网络(如局域网或互联网)。
Docker 默认网桥docker0172.17.0.1Docker 安装时自动创建的默认网桥,用于容器与宿主机通信。
自定义 Docker 网桥br-4947c39a808e172.18.0.1用户创建自定义 Docker 网络时生成的网桥,用于容器间的隔离通信。
虚拟以太网(veth)veth0b818fc 等无 IPv4,仅有 IPv6Docker 容器与网桥之间的虚拟网络接口对(veth pair),一端在容器内,一端在宿主机。
Libvirt 虚拟网桥virbr0192.168.122.1Libvirt(KVM 虚拟化工具)创建的默认虚拟网桥,用于虚拟机通信(未激活)。
本地环回接口lo127.0.0.1本地回环接口,用于本机内部通信。

二、关键接口解析

1. 物理网卡 ens33
  • IP 地址192.168.188.131

  • 作用

    • 宿主机的真实网络接口,连接到物理网络(如路由器或交换机)。

    • 外部通过此 IP 访问宿主机及映射的容器端口(如 HBase Web UI、HiveServer2 的 JDBC 端口)。

2. Docker 默认网桥 docker0
  • IP 地址172.17.0.1

  • 作用

    • Docker 默认创建的虚拟网桥,所有未指定自定义网络的容器默认连接到此处。

    • 容器通过 NAT 规则访问外部网络,宿主机通过 172.17.0.0/16 网段与容器通信。

  • 示例

    • 若容器 IP 为 172.17.0.2,可通过宿主机 172.17.0.1 路由到该容器。

3. 自定义 Docker 网桥 br-4947c39a808e
  • IP 地址172.18.0.1

  • 作用

    • 用户通过 docker network create 创建的自定义网络,用于容器间隔离通信(如 Hadoop 集群内部通信)。

    • 提供更灵活的网络配置(如自定义子网、DNS 设置)。

  • 示例

    • 若容器 IP 为 172.18.0.2,其他容器在同一网桥内可直接通过此 IP 通信。

4. 虚拟以太网接口(veth)
  • 接口名:如 veth0b818fcveth2862dee 等

  • 作用

    • 每个 Docker 容器会创建一对 veth pair(虚拟以太网设备对):

      • 一端在容器内(命名为 eth0)。

      • 另一端连接到 Docker 网桥(如 br-4947c39a808e),在宿主机上显示为 veth* 接口。

    • 通过 veth pair 实现容器与宿主机及其他容器的网络通信。

  • 示例

    • 容器通过 eth0 发送数据 → 宿主机通过对应的 veth 接口接收 → 网桥转发到目标容器或外部网络。

5. Libvirt 虚拟网桥 virbr0
  • IP 地址192.168.122.1

  • 作用

    • Libvirt(KVM 虚拟化管理工具)创建的默认 NAT 网络,用于虚拟机与宿主机通信。

    • 未激活:当前无流量,说明未运行 KVM 虚拟机。


三、IP 地址产生机制

1. 实际 IP(物理网卡)
  • 产生方式

    • 由 DHCP 服务器自动分配(如家庭路由器)或手动静态配置。

    • 示例中 ens33 的 192.168.188.131 是宿主机在局域网中的实际 IP。

2. 虚拟 IP(Docker 网桥与容器)
  • 产生方式

    • Docker 网桥:启动 Docker 服务时自动生成(如 docker0 的 172.17.0.1)。

    • 自定义网桥:通过 docker network create --subnet=172.18.0.0/16 mynet 指定子网。

    • 容器 IP:容器启动时从所属网桥的子网中动态分配(如 172.18.0.2)。

3. veth 接口
  • 产生方式

    • 创建容器时,Docker 自动生成 veth pair,一端挂载到网桥,另一端放入容器的网络命名空间。

    • 无 IPv4 地址:veth 接口在宿主机侧仅用于数据转发,无需配置 IP。


四、网络流量路径示例

场景:从外部访问 HiveServer2(端口 31000 映射到容器 10000 端口)

  1. 外部请求192.168.188.131:31000 → 宿主机物理网卡 ens33

  2. DNAT 转发:宿主机 iptables 将请求转发到 Docker 容器 IP(如 172.17.0.2:10000)。

  3. 容器响应:数据通过 veth pair 和网桥返回给外部客户端。


五、管理建议

1. 查看 Docker 网络

bash

docker network ls
docker network inspect br-4947c39a808e
2. 清理无用接口
  • 删除未使用的 Docker 网络

    bash

    docker network prune
  • 停止 Libvirt 服务(若不需要 KVM 虚拟机):

    bash

    systemctl stop libvirtd
3. 自定义网络优化
  • 指定子网:避免 IP 冲突。

    bash

    docker network create --subnet=10.1.0.0/24 my-custom-net
  • 启用 IPv6(如需):

    bash

    docker network create --ipv6 --subnet=2001:db8::/64 my-ipv6-net

总结

  • 实际 IP:宿主机物理网卡(如 ens33)的 IP,用于外部通信。

  • 虚拟 IP:由 Docker 网桥(如 docker0br-*)分配,用于容器间及容器与宿主机的内部通信。

  • veth 接口:连接容器与网桥的虚拟通道,实现网络隔离与数据转发。

  • 管理工具:通过 Docker 命令和 iptables 规则控制网络行为。

分析过程:

用户运行了`ifconfig`命令,看到很多网络接口,其中一些是物理的,比如`ens33`,而其他如`docker0`、`br-4947c39a808e`和各种`veth`开头的接口是虚拟的。用户可能对这些接口的来源和用途感到困惑,想知道它们是如何产生的,特别是为什么会有这么多虚拟接口。

我需要从基础知识开始分析。物理接口通常是服务器或虚拟机上的实际网卡,比如`ens33`在这里有IP地址`192.168.188.131`,这应该是宿主机的实际IP地址。而虚拟接口,如`docker0`和以`veth`开头的接口,通常与容器技术如Docker相关。用户之前的问题中提到了在虚拟机中运行Docker容器,部署了Hadoop、Hive、HBase等组件,因此这些虚拟接口很可能与Docker的网络配置有关。

接下来,我需要回忆Docker的网络模式。Docker默认使用桥接网络,会创建一个名为`docker0`的虚拟网桥,容器通过这个网桥连接到宿主机的网络。当创建自定义网络时,Docker会生成新的网桥,比如`br-4947c39a808e`,这可能是用户自定义的Docker网络。每个容器连接到这些网桥时,会创建一对veth(虚拟以太网)设备,一端在容器内,另一端连接到网桥上,这就是为什么会有那么多`veth`接口的原因。

然后,我需要解释每个接口的作用。例如,`docker0`是默认的Docker网桥,而`br-4947c39a808e`可能是用户自定义的网桥,用于隔离不同的容器网络。每个veth接口对应一个容器的网络连接,提供容器与宿主机之间的通信通道。

用户可能还想知道为什么会有这么多不同的IP地址。宿主机有一个物理IP(`192.168.188.131`),而Docker网桥(如`docker0`和`br-4947c39a808e`)会分配私有IP段(如172.17.0.1和172.18.0.1),这些是内部使用的虚拟IP,用于容器之间的通信。每个容器会获得这些子网中的IP地址,并通过NAT或端口映射与外部网络通信。

另外,`virbr0`接口是Libvirt(通常用于KVM虚拟机)创建的默认虚拟网桥,用于虚拟机的网络连接,但看起来用户并没有使用KVM,所以这个接口可能处于未激活状态。

用户可能的问题还包括如何管理这些接口,或者为什么需要这么多虚拟接口。需要解释Docker的网络模型,以及每个容器如何通过veth对连接到网桥,实现网络隔离和通信。

最后,总结这些接口的产生原因:物理接口对应实际硬件,虚拟接口由Docker、Libvirt等虚拟化技术创建,用于容器或虚拟机的网络通信。每个Docker网络使用不同的网桥和子网,veth设备对连接容器和网桥,确保网络隔离和连通性

 附录信息

[root@localhost ~]# ifconfig
br-4947c39a808e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        inet6 fe80::42:c4ff:fe73:ef89  prefixlen 64  scopeid 0x20<link>
        ether 02:42:c4:73:ef:89  txqueuelen 0  (Ethernet)
        RX packets 51433  bytes 5728307 (5.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 102730  bytes 19538100 (18.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:a0:19:63:f9  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.188.131  netmask 255.255.255.0  broadcast 192.168.188.255
        inet6 fe80::ff8b:14e:7907:8449  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ef:22:be  txqueuelen 1000  (Ethernet)
        RX packets 52917  bytes 15341506 (14.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 54941  bytes 85088415 (81.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 204  bytes 22476 (21.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 204  bytes 22476 (21.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0b818fc: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::c037:a7ff:fe95:9f92  prefixlen 64  scopeid 0x20<link>
        ether c2:37:a7:95:9f:92  txqueuelen 0  (Ethernet)
        RX packets 11653  bytes 4510087 (4.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5979  bytes 637568 (622.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth2862dee: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::3827:78ff:fef5:cfb7  prefixlen 64  scopeid 0x20<link>
        ether 3a:27:78:f5:cf:b7  txqueuelen 0  (Ethernet)
        RX packets 2473  bytes 262420 (256.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1741  bytes 174394 (170.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth3a2e986: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::d403:beff:fec0:be7c  prefixlen 64  scopeid 0x20<link>
        ether d6:03:be:c0:be:7c  txqueuelen 0  (Ethernet)
        RX packets 10354  bytes 2114843 (2.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6994  bytes 7633449 (7.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth3f76a80: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::821:cbff:fe1f:e70a  prefixlen 64  scopeid 0x20<link>
        ether 0a:21:cb:1f:e7:0a  txqueuelen 0  (Ethernet)
        RX packets 818  bytes 267949 (261.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 699  bytes 54577 (53.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth4b709f5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::bc10:caff:fe8a:3247  prefixlen 64  scopeid 0x20<link>
        ether be:10:ca:8a:32:47  txqueuelen 0  (Ethernet)
        RX packets 10734  bytes 1417026 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10456  bytes 1597159 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth621d312: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::6032:73ff:fe02:5291  prefixlen 64  scopeid 0x20<link>
        ether 62:32:73:02:52:91  txqueuelen 0  (Ethernet)
        RX packets 7351  bytes 532326 (519.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7367  bytes 393618 (384.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth71abf80: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::84f3:40ff:fece:e2d2  prefixlen 64  scopeid 0x20<link>
        ether 86:f3:40:ce:e2:d2  txqueuelen 0  (Ethernet)
        RX packets 51433  bytes 5728307 (5.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 102730  bytes 19538100 (18.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth80c2646: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::54cb:45ff:feac:3f26  prefixlen 64  scopeid 0x20<link>
        ether 56:cb:45:ac:3f:26  txqueuelen 0  (Ethernet)
        RX packets 34139  bytes 6495057 (6.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17121  bytes 1881929 (1.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth80f2a5a: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::2894:eeff:fef8:909c  prefixlen 64  scopeid 0x20<link>
        ether 2a:94:ee:f8:90:9c  txqueuelen 0  (Ethernet)
        RX packets 19371  bytes 9444209 (9.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 34737  bytes 10961880 (10.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth9e4a1da: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::e8da:18ff:fe13:620d  prefixlen 64  scopeid 0x20<link>
        ether ea:da:18:13:62:0d  txqueuelen 0  (Ethernet)
        RX packets 11663  bytes 4510093 (4.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5981  bytes 637704 (622.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vetha960784: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::e8f1:49ff:fe4b:47bd  prefixlen 64  scopeid 0x20<link>
        ether ea:f1:49:4b:47:bd  txqueuelen 0  (Ethernet)
        RX packets 34255  bytes 6517213 (6.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17181  bytes 1888413 (1.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethbfe500d: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::9cbc:7cff:fe33:917a  prefixlen 64  scopeid 0x20<link>
        ether 9e:bc:7c:33:91:7a  txqueuelen 0  (Ethernet)
        RX packets 7344  bytes 532032 (519.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7360  bytes 393324 (384.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethc525878: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::acc9:fcff:fe59:4b31  prefixlen 64  scopeid 0x20<link>
        ether ae:c9:fc:59:4b:31  txqueuelen 0  (Ethernet)
        RX packets 22054  bytes 1178148 (1.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22067  bytes 1598614 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethc2992a5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::a062:44ff:fe75:7b13  prefixlen 64  scopeid 0x20<link>
        ether a2:62:44:75:7b:13  txqueuelen 0  (Ethernet)
        RX packets 16  bytes 2498 (2.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 46  bytes 3725 (3.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethce3798f: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::e8f4:98ff:fe00:85b2  prefixlen 64  scopeid 0x20<link>
        ether ea:f4:98:00:85:b2  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17  bytes 1074 (1.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethe098193: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::78fa:59ff:feba:feff  prefixlen 64  scopeid 0x20<link>
        ether 7a:fa:59:ba:fe:ff  txqueuelen 0  (Ethernet)
        RX packets 12693  bytes 2059945 (1.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14623  bytes 1980203 (1.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethe1506e6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::801f:98ff:fe8c:1b5f  prefixlen 64  scopeid 0x20<link>
        ether 82:1f:98:8c:1b:5f  txqueuelen 0  (Ethernet)
        RX packets 34322  bytes 6710146 (6.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17302  bytes 1902704 (1.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethe8dded2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::476:51ff:fea6:2930  prefixlen 64  scopeid 0x20<link>
        ether 06:76:51:a6:29:30  txqueuelen 0  (Ethernet)
        RX packets 7329  bytes 531370 (518.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7345  bytes 392682 (383.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:67:da:b9  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]#   解决这些实际ip和虚拟ip怎么产生的

kimi总结的如下

以下是关于ifconfig命令输出中显示的IP地址来源和产生方式的详细分析:
1. 物理接口(ens33)
IP地址:192.168.188.131
来源:这是物理网络接口的IP地址,通常由网络管理员或DHCP服务器分配。
产生方式:
静态分配:通过手动配置/etc/sysconfig/network-scripts/ifcfg-ens33文件中的BOOTPROTO=static和IPADDR参数来设置。
动态分配:通过DHCP服务器自动分配,BOOTPROTO=dhcp。
2. Docker网络接口(docker0)
IP地址:172.17.0.1
来源:这是Docker默认的桥接网络接口,用于容器之间的通信。
产生方式:
Docker在启动时自动创建docker0接口,并分配一个默认的子网(通常是172.17.0.0/16)。
可以通过修改/etc/docker/daemon.json文件来更改默认的子网。
3. Docker桥接网络(br-4947c39a808e)
IP地址:172.18.0.1
来源:这是用户自定义的Docker桥接网络。
产生方式:
使用docker network create命令创建自定义网络,Docker会自动分配一个子网(通常是172.18.0.0/16)。
可以通过--subnet参数指定自定义的子网。
4. 虚拟接口(veth)*
IP地址:无(仅显示IPv6链路本地地址)
来源:这些是Docker容器的虚拟接口,用于容器与宿主机之间的通信。
产生方式:
Docker在创建容器时,会自动创建一对虚拟接口(veth pair),一个在宿主机上,一个在容器内。
容器的虚拟接口通过桥接网络连接到宿主机的桥接接口(如docker0或自定义桥接网络)。
5. 虚拟机网络(virbr0)
IP地址:192.168.122.1
来源:这是虚拟机管理工具(如libvirt)创建的虚拟网络接口,用于虚拟机之间的通信。
产生方式:
通过virsh net-start default命令启动默认的虚拟网络,libvirt会自动创建virbr0接口,并分配一个默认的子网(通常是192.168.122.0/24)。
可以通过修改/etc/libvirt/qemu/networks/default.xml文件来更改默认的子网。
6. 回环接口(lo)
IP地址:127.0.0.1
来源:这是系统的回环接口,用于本地进程之间的通信。
产生方式:
回环接口是系统默认创建的,无需手动配置。
总结
物理接口:由网络管理员或DHCP服务器分配。
Docker网络接口:由Docker自动创建和管理。
虚拟接口:由Docker在创建容器时自动生成。
虚拟机网络接口:由虚拟机管理工具(如libvirt)自动创建。
回环接口:系统默认创建。
这些接口和IP地址的配置可以根据实际需求进行调整,例如通过修改配置文件或使用命令行工具来更改网络设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值