Docker 网络基础

1.0 网络的命名空间

1.0.0 Linux中的网络命名空间到Docker容器的网络隔离

为了支持网络协议械的多个实例,Linux在网络梳中引入了网络命名空间( Network Namespace),这些独立的协议械被隔离到不同的命名空间中,处于不同命名空间的网络栈是无法直接通信的。
以上就是Docker不同容器可以进行网络隔离的原因

1.0.1 命名空间之间的网络连接

Veth设备对可以连接两个协议栈,在两个命名空间之间通信

1.0.1.0 设备对

1.0.1.0.0 创建设备对
ip netns exec ns1 ip link add vethO type veth peer name veth1
1.0.1.0.1 查看命名空间设备
ip netns exec ns1 ip link show
1.0.1.0.2 将一个设备放到另一个命名空间
ip netns exec ns1 ip link set veth1 netns ns2

查看设备

ip netns exec ns1 ip link show
1.0.1.0.3 给两个设备添加ip地址
ip netns exec ns1 ip addr add 10.0.2.20/24 dev vethO
ip netns exec ns2 ip addr add 10.0.2.21/24 dev veth1
1.0.1.0.4 启动veth设备
ip netns exec ns2 ip link set dev veth1 up
ip netns exec ns1 ip link set dev vethO up
1.0.1.0.5 测试连接
ip netns exec ns1 ping 10.0.2.21
ip netns exec ns2 ping 10.0.2.20
1.0.1.0.6 查看对端设备
ip netns exec ns1 ethtool -S veth0
ip netns exec ns2 ip link I grep 6

1.0.2 命名空间的操作

1.0.2.0 新建一个命名空间

ip netns add ns1

1.0.2.1 查看所有命名空间

ip netns list

1.0.2.2 在命名空间执行命令

ip netns exec ns1 bash

1.0.2.3 在命名空间转移设备

ip link set virbrO netns nsl

1.0.2.4 查看设备是否可以转移

 ethtool -k virbrO
 # netns-local: on [fixed] 不可转移

1.1 网桥

1.1.0 概述

1.1.0.0 作用

veth设备对可以将网络两个两个连接起来,网桥可以将若干个网络连接起来。
网桥可以解析报文,读取目标Mac地址,与自己的Mac表结合,来决定转发网络端口。
网桥可以学习源mac地址。对Mac地址表进行过期设置。

1.1.1 Linux的桥接

1.1.1.0 定义及特性

Linux网桥是二层或三层设备。
Linux通过一个虚拟设备(NetDevice)实现桥接。这个虚拟设备可以拥有一个ip。

1.1.1.1 常用操作

1.1.1.1.0 增加网桥
brctl addbr vitubr2
1.1.1.1.1 将网桥与网口连接
brctl addif vitubr2 enp0s3
1.1.1.1.2 给网桥配置一个ip
ifconfig vitubr2 10.0.2.25

1.2 Iptables/Netfilter

1.2.0 定义

在Linux网络协议棋中有一组回调函数挂接点,通过这些挂接点挂接的钩子函数可以在Linux网络棋处理数据包的过程中对数据包进行一些操作,例如过滤、修改、丢弃等。整个挂接点技术叫作Netfilter和lptables。

1.2.1 Netfilter

Netfilter 负责在内核中执行各种挂接的规则,运行在内核模式中

1.2.1.0 Netfilter挂载点

Netfilte挂载点有5个。 - INPUT - OUTPUT - FORWORD - PREROUTING - POTEROUTING

1.2.1.1 Netfilter规则表

这些挂接点能挂接的规则也分不同的类型,目前主要支持的 Table 类型如下: - RAW - MANGLE - NAT - FILTER

1.2.2 Iptables

lptables 是在用户模式下运行的进程,负责协助维护内核中 Netfilter 的各种规则表

1.2.2.0 Iptables命令

  • iptables-save:按照命令的方式打印 lptables 的内容.
  • Iptables-vnL:以另一种格式显示 Netfilter表的内容。

1.2.3 作用

当 Linux 协议械的数据处理运行到挂接点时,它会依次调用挂接点上所有的挂钩函数,直 到数据包的处理结果是明确地接受或者拒绝。

1.3 路由

1.3.0 linux路由功能

Linux 系统包含一个完整的路由功能。当 IP 层在处理数据发送或者转发时,会使用路由表 来决定发往哪里

1.3.1 路由路径

  1. 如果主机与目的主机直接相连,那么主机可以直接发送回报文 到目的主机
  2. 如果主机与目的 主机没有直接相连,那么主机会将 IP报文发送给默认的路由器,然后由路由器来决定往哪发送IP报文。

1.3.2 报文处理

  1. 发给自己,传给传输层
  2. 不是发给自己,配置了路由功能,转发
  3. 没配置默认路由,丢弃。

1.3.3 操作

1.3.3.0 路由表

1.3.3.0.0 查看local路由表
ip route show table local type local
1.3.3.0.1 查看路由
ip route list 
netstat -rn