linux虛擬網絡基礎
1 Device
在linux裏面devic(設備)與傳統網絡概念裏的物理設備(如交換機、路由器)不一樣,Linux所說的設備,其背後指的是一個相似於數據結構、內核模塊或設備驅動這樣的含義。就是說device可能只是軟件系統裏的一個驅動,一個函數接口。
2 Tap
Tap位於二層數據鏈路層,tun位於三層網絡層,二者在linux裏的函數結構幾乎一致,除了一個flag值區分tap/tun。在linux中二層特指以太網(Ethernet)(傳統網絡裏二層分Ethernet,P2P,HDLC,FR,ATM),所以有時tap也叫「虛擬以太設備」。有意思的是linux建立tap須要用到tun模塊。Linux建立tap/tun都使用tun模塊。linux
3 Namespace
Namespace相似傳統網絡裏的VRF,與VRF不一樣的是:VRF作的是網絡層三層隔離。而namespace隔離的更完全,它作的是整個協議棧的隔離,隔離的資源包括:UTS(UnixTimesharing System的簡稱,包含內存名稱、版本、 底層體系結構等信息)、IPS(全部與進程間通訊(IPC)有關的信息)、mnt(當前裝載的文件系統)、PID(有關進程ID的信息)、user(資源配額的信息)、net(網絡信息)。
從網絡角度看一個namespace提供了一份獨立的網絡協議棧(網絡設備接口、IPv4/v六、IP路由、防火牆規則、sockets等),而一個設備(Linux Device)只能位於一個namespace中,不一樣namespace中的設備能夠利用vethpair進行橋接。
4 veth pair
veth pair不是一個設備,而是一對設備,以鏈接兩個虛擬以太端口。操做vethpair,須要跟namespace一塊兒配合,否則就沒有意義。如圖
5 Bridge
在Linux的語境裏,Bridge(網橋)與Switch(交換機)是一個概念。由於一對veth pair只能鏈接兩臺device,所以若是須要多臺設備互聯則須要bridge。
如圖:4個namespace,每一個namespace都有一個tap,每一個tap與網橋vb1的tap組成一對veth pair,這樣,這4個namespace就能夠二層互通了。
6 Router
Linux建立Router並無像建立虛擬Bridge那樣,有一個直接的命令brctl,並且它間接的命令也沒有,不能建立虛擬路由器……由於它就是路由器(Router) !
如圖:咱們須要在router(也就是咱們的操做系統linux上增長去往各NS的路由)。
7 tun
tun是一個網絡層(IP)的點對點設備,它啓用了IP層隧道功能。Linux原生支持的三層隧道。支持隧道狀況:ipip(ipv4 in ipv4)、gre(ipv4/ipv6 over ipv4)、sit(ipv6 over ipv4)、isatap(ipv6/ipv4隧道)、vti(ipsec接口)。
學過傳統網絡GRE隧道的人更容易理解,如圖:
NS1的tun1的ip 10.10.10.1與NS2的tun2的ip 10.10.20.2創建tun
NS1的tun的ip是10.10.10.1,隧道的外層源ip是192.168.1.1,目的ip是192.168.2.1,是否是跟GRE很像。
8 iptable
咱們一般把iptable說成是linux的防火牆,實際上這種說法並不許確。實際上iptable只是一個運行在用戶空間的命令行工具,真正實現防火牆功能的是內核空間的netfilter模塊。
這裏咱們先知道防火牆執行模塊netfilter位於內核空間,命令行iptable位於用戶空間。咱們在經過iptable配置的防火牆策略(包括NAT)會在netfilter執行。
iptables有5個鏈:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
PREROUTING:報文進入網絡接口還沒有進入路由以前的時刻;
INPUT:路由判斷是本機接收的報文,準備從內核空間進入到用戶空間的時刻;
FORWARD:路由判斷不是本機接收的報文,須要路由轉發,路由轉發的那個時刻;
OUTPUT:本機報文須要發出去 通過路由判斷選擇好端口之後,準備發送的那一刻;
POSTROUTING:FORWARD/OUTPUT已經完成,報文即將出網絡接口的那一刻。
DNAT用的是PREROUTING,修改的是目的地址,SNAT用的是POSTROUTING,修改的是源地址。
Iptable有5個表:filter,nat,mangle,raw, security,raw表和security表不經常使用。主流文檔都是說5鏈4表,沒有包括security表。
Raw表——決定數據包是否被狀態跟蹤機制處理
Mangle表——修改數據包的服務類型、TTL、而且能夠配置路由實現QOS
Nat表——用於網絡地址轉換(IP、端口)
filter表——過濾數據包
security 表(用於強制訪問控制網絡規則,例如:SELinux)
4個表的優先級由高到低的順序爲:raw-->mangle-->nat-->filter。RAW表,在某個鏈上,RAW表處理完後,將跳過NAT表和 ip_conntrack處理,即再也不作地址轉換和數據包的連接跟蹤處理了。RAW表能夠應用在那些不須要作nat的狀況下,以提升性能。如大量訪問的web服務器,可讓80端口再也不讓iptables作數據包的連接跟蹤處理,以提升用戶的訪問速度。
下面講下數據包流向與處理:web