veth 的宿主端接口,在未接入 bridge 且配置 IP 时,可类比为 VLAN 子网的默认网关;
而当加入 bridge 时,它就退化成纯二层接入口,成为 bridge 内部以太帧转发的端口,不应再承担 IP 层通信角色。
Veth设备端配置
宿主机配置网络→创建容器→将网络加入容器
1 2 3 4 5 6 7 8 9 10 11
#宿主机 sudo ip link add veth-c type veth peer name veth-br # 配置结伴网络 sudo ip addr add 192.168.100.100/24 dev veth-br #配置ip 信息 sudo ip linkset veth-br up
#创建容器后,在宿主机查询容器进程,添加网络到宿主机 sudo ip linkset veth-c netns 968998
#容器 ip linkset veth-c up ip addr add 192.168.100.100/24 dev veth-c
创建网络命名空间→创建veth网络→添加veth网络到网络命名空空间
1 2 3 4 5 6 7 8 9 10 11 12
# 宿主机添加网络命名空间 net1 ip netns add net1 # 添加veth 网络 ip link add veth1 type veth peer name veth1_p # 绑定veth网络到网络命名空间 net1 ip linkset veth1 netns net1 ip addr add 192.168.100.100/24 dev veth1_p
#通过命令执行 ip netns exec net1 ip addr ip netns exec net1 ip addr add 192.168.100.102/24 dev veth1 ip netns exec net1 ip linkset veth1 up
# 宿主机 创建 namespace ip netns add ns1 ip netns add ns2
# 创建 veth pair ip link add veth-a type veth peer name veth-a-ns ip link add veth-b type veth peer name veth-b-ns
# 放进 namespace ip linkset veth-a-ns netns ns1 ip linkset veth-b-ns netns ns2
# 设置 IP ip netns exec ns1 ip addr add 192.168.100.10/24 dev veth-a-ns ip netns exec ns2 ip addr add 192.168.100.20/24 dev veth-b-ns
# 启动接口 ip netns exec ns1 ip linkset veth-a-ns up ip netns exec ns2 ip linkset veth-b-ns up ip netns exec ns1 ip linkset lo up ip netns exec ns2 ip linkset lo up
# 宿主机接口 up ip linkset veth-a up ip linkset veth-b up
# 创建 bridge ip link add br0 type bridge ip linkset br0 up ip addr add 192.168.100.1/24 dev br0
# 加入 bridge ip linkset veth-a master br0 ip linkset veth-b master br0
ip netns exec ns1 ping -c 3 192.168.100.20 ip netns exec ns1 ping -c 3 192.168.100.1
容器外部网络访问
设置网络转发
1 2
sudo iptables -A FORWARD -j ACCEPT 置位 /proc/sys/net/ipv4/ip_forward
Docker 通过向iptables写入规则 来控制 端口映射转发
NAT(network address translation)
NAT (Network Address Translation) 是一种网络技术,它允许多台设备通过单个公共 IP 地址访问互联网。通过一张映射表完成内网和外网IP,端口间的转换
NAT 的主要功能和特点:
地址转换:NAT 将内部网络中的私有 IP 地址转换为公共 IP 地址,使得内部网络的设备能够访问互联网
节约 IP 地址资源:由于 IPv4 地址资源有限,NAT 技术可以使多台设备共享一个公共 IP 地址,缓解了 IP 地址短缺问题
隐藏内部网络结构:NAT 可以隐藏内部网络的真实 IP 地址,提高网络安全性
NAT 的主要类型:
静态 NAT:一对一映射,每个私有 IP 地址对应一个固定的公共 IP 地址
动态 NAT:从公共 IP 地址池中动态分配地址
网络地址端口转换(NAPT/PAT):最常用的类型,多个私有 IP 地址共享一个公共 IP 地址,通过不同的端口号区分不同的连接
1.filter表
filter包含3个内置链用于过滤数据包,包含三个内置链:
INPUT:处理发往本机的数据包
FORWARD:处理经过本机转发的数据包
OUTPUT:处理本机发出的数据包
1 2 3 4 5 6 7 8 9 10 11 12
# 允许已建立的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许本地回环接口 iptables -A INPUT -i lo -j ACCEPT # 允许 SSH 连接 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 默认拒绝其他所有入站连接 iptables -P INPUT DROP # 查询表结构 iptables -L -v # 指定filter表查询 iptables -t filter -L -v
# 对 DNS 查询免除连接跟踪 iptables -t raw -A OUTPUT -p udp --dport 53 -j NOTRACK # 对某些 IP 免除连接跟踪 iptables -t raw -A PREROUTING -s 192.168.1.100 -j NOTRACK # 查询raw表 iptables -t raw -L -v