網絡虛擬化-- linux虛擬網絡基礎

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進行橋接。
網絡虛擬化-- linux虛擬網絡基礎
4 veth pair
veth pair不是一個設備,而是一對設備,以鏈接兩個虛擬以太端口。操做vethpair,須要跟namespace一塊兒配合,否則就沒有意義。如圖
網絡虛擬化-- linux虛擬網絡基礎
5 Bridge
在Linux的語境裏,Bridge(網橋)與Switch(交換機)是一個概念。由於一對veth pair只能鏈接兩臺device,所以若是須要多臺設備互聯則須要bridge。
如圖:4個namespace,每一個namespace都有一個tap,每一個tap與網橋vb1的tap組成一對veth pair,這樣,這4個namespace就能夠二層互通了。
網絡虛擬化-- linux虛擬網絡基礎
6 Router
Linux建立Router並無像建立虛擬Bridge那樣,有一個直接的命令brctl,並且它間接的命令也沒有,不能建立虛擬路由器……由於它就是路由器(Router) !
如圖:咱們須要在router(也就是咱們的操做系統linux上增長去往各NS的路由)。
網絡虛擬化-- linux虛擬網絡基礎
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很像。
網絡虛擬化-- linux虛擬網絡基礎
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

  1. 若是是外部訪問的目的是本機,好比用戶空間部署了WEB服務,外部來訪問。數據包從外部進入網卡----->PREROUTING處理----->INPUT處理----->到達用戶空間程序接口,程序處理完成後發出----->OUTPUT處理----->POSTROUTING處理。每一個處理點都有對應的表,表的處理順序按照raw-->mangle-->nat-->filter處理。
  2. 若是用戶訪問的目的不是本機,linux只是一箇中轉(轉發)設備,此時須要開啓ip forward功能,數據流就是進入網卡-----> PREROUTING處理-----> FORWARD處理-----> POSTROUTING處理。
    網絡虛擬化-- linux虛擬網絡基礎8.1 NATNetfilter中的NAT有三個點作處理,(1) NAT-PREROUTING (DNAT)數據報文進入PREROUTING,NAT模塊就會處理,好比用戶空間的WEB服務私網地址192.168.0.1,對外提供公網ip是220.1.1.1。當外部ip訪問220.1.1.1時,PREROUTING接受數據包,NAT模塊處理將目的ip 220.1.1.1轉換爲私網ip192.168.0.1,這就是DNAT。(2) NAT-POSTROUTING (SNAT)用戶空間應用程序訪問外部網絡,好比用戶空間應用程序訪問114.114.114.144,私網ip 192.168.0.1,此時數據包流經POSTROUTING,NAT模塊會處理,將192.168.0.1轉換爲220.2.2.2,對於目的ip114.114.114.114來講,就是220.2.2.2訪問它,這就是SNAT。(3) NAT-OUTPUT (DNAT)咱們把內核空間想象成一臺防火牆,防火牆自身對外發送報文訪問外部時,就在OUTPUT作DNAT,此時不須要再POSTROUTING點再作NAT。由於此時從OUTPUT出來的源IP已是公網地址了8.2 Firewall防火牆根據規則執行accept/reject動做,防火牆規則的元素以下:入接口、出接口、協議、源地址/子網、目的地址/子網、源端口、目的端口。Netfilter中的Firewall會在這三個點進行處理:INPUT/FORWARD/OUTPUT8.3 Manglemangle表主要用於修改數據包的ToS( Type of Service,服務類型)、 TTL(Time to Live,生存週期)以及爲數據包設置Mark標記,以實現QoS(Qualityof Service,服務質量)調整以及策略路由等應用。Netfilter每一個點均可以作mangle。9 總結tap、tun、vethpair在Linux中都被稱爲設備,可是在與平常概念的類比中,經常被稱做接口。而bridge和router這些平常稱爲設備的再linux中反而不稱爲設備。linux利用namespace作隔離,Bridge提供二層轉發功能,Router提供三層轉發功能。Router還經常藉助iptable提供SNAT/DNAT功能。Bridge也經常藉助iptable提供Firewall功能。
相關文章
相關標籤/搜索