Linux网络虚拟化
- Linux下的网络通信模型
干预网络通信
从Linux Kernel 2.4版开始,内核开放了一套通用的、可供代码干预数据在协议栈中流转的过滤器框架。它围绕网络层(IP协议)的周围,埋下了五个钩子:
- PREROUTING:来自设备的数据包进入协议栈后立即触发此钩子。PREROUTING钩子在进入IP路由之前触发,这意味着只要接收到的数据包,无论是否真的发往本机,都会触发此钩子。一般用于目标网络地址转换(Destination NAT,DNAT)。
- INPUT:报文经过IP路由后,如果确定是发往本机的,将会触发此钩子,一般用于加工发往本地进程的数据包。
- FORWARD:报文经过IP路由后,如果确定不是发往本机的,将会触发此钩子,一般用于处理转发到其他机器的数据包。
- OUTPUT:从本机程序发出的数据包,在经过IP路由前,将会触发此钩子,一般用于加工本地进程的输出数据包。
- POSTROUTING:从本机网卡出去的数据包,无论是本机的程序所发出的,还是由本机转发给其他机器的,都会触发此钩子,一般用于源网络地址转换(Source NAT,SNAT)
虚拟化网络设备
虚拟网卡:tnu/tap
tap模拟了以太网设备,操作二层数据包(以太帧),tun则模拟了网络层设备,操作三层数据包(IP报文)
虚拟网卡:veth
veth是一对设备,因而也常被称作veth pair,在veth设备的其中一端输入数据,这些数据就会从设备的另外一端原样不变地流出
虚拟交换机:Linux Bridge
Linux Bridge创建以后,便能够接入任何位于二层的网络设备
GRE
一种 IP-over-IP 的隧道技术。它将 IP 包封装在 GRE 包里,外面加上 IP 头,在隧道的一端封装数据包,并在通路上进行传输,到另外一端的时候解封装
虚拟网络:VXLAN
- VLAN的不足
副本网卡:MACVLAN
MACVLAN借用了VLAN子接口的思路,并且在这个基础上更进一步,不仅允许对同一个网卡设置多个IP地址,还允许对同一张网卡上设置多个MAC地址