iptables可以實現防火牆、nat等功能,不過這句話也對,也不對。說它對,我們確實是通過iptables相關命令列,實現了防火牆、nat的功能;說它不對,是因為iptables其實只是乙個執行在使用者空間的命令列工具,真正實現這些功能的是執行在核心空間的netfilter。
它們之間的關係如下圖:
不必太在意這個圖是什麼意思,只需要有個直觀的感覺即可。主要關注iptables命令方框。
iptable內建了三張表:filter、nat和mangle。
filter和nat顧名思義,是為了實現防火牆和nat功能而服務的。mangle,翻譯為漢語是「亂砍;損壞」等意思,它在這裡指的是「主要應用在修改資料報內容上,用來做流量整形」。
iptables內建的既是三張表,也是三條鏈,或者換個角度說,iptables內建的是三種策略,而這些策略,是由不同規則串接而成。什麼叫規則呢?我們以防火牆為例,講述一條規則:
iptables -a input -i eth0 -p icmp -j accept
這就是一條規則,至於iptables的命令列格式只是乙個表象,它的本質是對進入的ip報文進行說明,如:符合什麼樣的條件(比如本條命令的條件是「允許所有從eth0埠進入且協議是icmp的報文」)、做什麼樣的處理(比如本條命令的處理是「接受」,可以進入下乙個流程)。
iptable可以定義很多策略/規則,從上圖可知,這些規則最終會傳遞到核心netfilter模組,netfilter模組會根據這些規則做相應的處理。netfilter的處理方式時:從報文進入本機(linux host或vm)的那一刻起,到報文離開本機的那一刻為止,中間這段時間,netfilter會在某些時刻點插入處理模組,這些處理模組根據相應的策略/規則對報文進行處理。
nat、filter、mangle三張表也可以這樣理解:僅僅是為了達到不同目的(功能)而實現的三個模組而已。
netfilter插入的這些時刻點如下圖:
在這些時刻點,上文提到三張表(模組)並不是所有時刻都可以處理。在同乙個時刻點,也可以有多個模組可以進行處理,那麼這些模組就有乙個處理順序,誰先處理,誰後處理呢?見下圖:
圖中幾個關鍵時刻點,含義如下:
(1)prerouting:報文進入網路介面尚未進入路由之前的時刻;
(2)input:路由判斷是本機接收的報文,準備從核心空間進入使用者空間的時刻;
(3)forward:路由判斷不是本機接收的報文,需要路由**,路由**的那個時刻;
(4)output:本機報文需要發出去,經過路由判斷選擇好埠以後,準備傳送的那一刻;
(5)postrouting:forward/output已經完成,報文即將出網路介面的那一刻。
三張表,所能對應的時刻點,如下表
參考
網路虛擬化之linux虛擬網路基礎
在linux裡面devic 裝置 與傳統網路概念裡的物理裝置 如交換機 路由器 不同,linux所說的裝置,其背後指的是乙個類似於資料結構 核心模組或裝置驅動這樣的含義。就是說device可能只是軟體系統裡的乙個驅動,乙個函式介面。tap位於二層資料鏈路層,tun位於三層網路層,兩者在linux裡的...
Linux虛擬網路基礎 veth pair
一 簡介 veth pair不是乙個裝置,而是一對裝置,以連線兩個虛擬乙太網埠。操作veth pair,需要跟namespace一起配合,不然就沒有意義。我們設計乙個測試用例進行實踐,如下圖 二 實戰 建立veth pair root centos ip link add tap1 type vet...
Linux虛擬網路基礎 tap(虛擬以太裝置)
虛擬網絡卡tun tap驅動是乙個開源專案,支援很多的類unix平台,openvpn和vtun都是基於它實現隧道包封裝。本文將介紹tun tap驅動的使用並分析虛擬網絡卡tun tap驅動程式在linux環境下的設計思路。tun tap驅動程式實現了虛擬網絡卡的功能,tun表示虛擬的是點對點裝置,t...