待整理的部分,
二层交换机、三层交换机和路由器的原理及区别
linux下brctl配置网桥
Linux网桥的实现分析与使用
Linux 上虚拟网络与真实网络的映射
VETH 实践部分
network namespace与veth pair
图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN
Linux 上的基础网络设备详解
Linux Network Namespaces - 讲解了 Namespaces 基本操作
Linux Network Namespaces – Background
Switching Performance – Connecting Linux Network Namespaces
Linux Switching – Interconnecting Namespaces
Introducing Linux Network Namespaces
linux 下 brctl 配置网桥
Linux 网桥的实现分析与使用
在Ubuntu下创建虚拟网卡
VLAN 通过 ip link 创建虚拟网卡详解
VETH pair 模拟的是两台物理机通过网线直连的方式,
总结:VETH pair 的两张虚拟网卡 IP 地址必须在同一个网段,否则不能够连接.
从 怎么用一根网线将两台电脑连接成局域网 教程中可以清晰的看到,两台电脑通过网线直连的话,两台主机的 IP 地址必须在同一个网段,且,其中一台主机充当网关。
且双方都必须配置IP,否则,不通;
测试前,确保允许 ip forward, echo 1 > /proc/sys/net/ipv4/ip_forward
1 | # 添加 VLAN 虚拟网卡 |
之前模拟 docker 的桥接方式,为什么失败,是因为没有开启网卡接口的ip转发功能 /proc/sys/net/ipv4/ip_forward1
echo 1 > /proc/sys/net/ipv4/ip_forward
ip 端口转发是什么意思?
有个 IP 报文( Target: 163.177.151.110, SOURCE: 182.168.32.5 … ) 发送到 bridge0,而 bridge0 相关的 route 配置(到网关出口的配置),这个时候,enp0s3 的路由规则满足,如果设置了 ip_forward,则,IP 报文将 forward 给 enp0s3 进行发送。
root@ubuntu:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 enp0s3
另外,只通过 VETH,而不是用 bridge 调试也是通过的…
veth: v0 和 v1;ns: ns1;将 v1 纳入 ns1;设置 ns1 的默认路由为 v0 的地址,
将 iptables_docker0 中的内容,将 docker0 替换成 v0,导入 iptables,
从 ns1 中 ping 百度成功 ~
那为什么 Docker 要采用 Bridge 的方式呢?因为如果有多个 Container 的话,只需要单独配置 Bridge 的 iptables 规则即可.. 相当于在 VETH 之上做了一层抽象.
验证哪些 iptables 规则是必须得,我执行的过程是一条一条的删除 Docker 所生成的 iptables 规则,发现,其它所有的规则都可以删除,唯独
*nat
-A POSTROUTING -s 182.32.168.0/24 ! -o v0 -j MASQUERADE
是必须得
connection session,这条删除后,可以通讯,但是我估计是 session 缓存依旧存在的原因..
-A FORWARD -o v0 -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
玩转Docker Network + Docker使用route和iptables(要注意 MASQUERADE),为容器创建NAT,这样就可以连接到外网
docker和iptables关系 - 简要的描述了 docker0 如何将数据发送出去的过程
Linux下虚拟网卡(tap)安装方法-本文取自网络