1. 程式人生 > >iptables深入解析:mangle篇

iptables深入解析:mangle篇

http://blog.jobbole.com/90008/

講了filter、ct、nat 現在剩下最後一個知名模組mangle,但是自身雖然知道核心支援修改資料包的資訊,它主要用在策略路由和qos上.我們就具體分析一下.

mangle表主要用於修改資料包的TOS(Type Of Service,服務型別)、TTL(Time To Live,生存週期)指以及為資料包設定Mark標記,以實現Qos(Quality Of Service,服務質量)調整以及策略路由等應用,由於需要相應的路由裝置支援,因此應用並不廣泛

關於mangle模組,核心裡主要有三個功能模組: mark match、MARK target 、CONNMARK target。

1)CONNMARK target的選項//呼叫 -j connmark
選項 功能
–set-mark value[/mask] 給連結跟蹤記錄打標記。
–save-mark [–mask mask] 將資料包上的標記值記錄到連結跟蹤記錄上。
–restore-mark [–mask mask] 重新設定資料包的nfmark值。

2)MARK target 的選項//呼叫 -j mark
選項 功能
–set-mark value 設定資料包的nfmark值。
–and-mark value 資料包的nfmark值和value進行按位與運算。
–or-mark value 資料包的nfmark值和value進行按或與運算。

3)MARK match的選項 //需要呼叫 -m mark 模組
選項 功能
[!] –mark value[/mask] 資料包的nfmark值與value進行匹配,其中mask的值為可選的

先說說CONNMARK和MARK的區別:
同樣是打標記,但CONNMARK是針對連線的,而MARK是針對單一資料包的
這兩種機制一般都要和ip rule中的fwmark聯用,實現對滿足某一類條件的資料包的策略路由
1.對連線打了標記,只是標記了連線,沒有標記連線中的每個資料包。標記單個數據包,也不會對整條連線的標記有影響。二者是相對獨立的
2. 路由判定(routing decision)是以單一資料包為單位的。或者說,在netfilter框架之外,並沒有連線標記的概念。或者說,ip命令只知道MARK, 而不知道CONNMARK是什麼。
3.關鍵在於:給所有要進行ip rule匹配的單一資料包打上標記。方法一般有二:用MARK直接打,或者用CONNMARK –restore-mark把打在連線上的標記轉移到資料包上。

下面就程式碼分析一下:
mangle它的模組程式碼在iptable_mangle.c中它的初始化工作和之前的filter、nat類似.Mangle作用在所有的hook點
1.首先iptable_mangle.c的主要工作就是註冊和初始化mangle表
註冊mangl鉤子函式.
2.其實我們發現除了ct的hook是單獨處理外,其他的filter、nat、mangle都是通過hook之後呼叫ipt_do_table來處理,要麼重點在match裡,要麼重點在target處理中.但是這個基本機制框架沒變. 即都是通過rules.
3.首先我們就看看 –j MARK –set-mark 1 這個target的執行
4.其實應該分析下規則的下發.

先看一條命令:
#iptables -t mangle -A PREROUTING -i eth0 -p tcp –dport 80 -j MARK –set-mark 1
即target MARK

核心裡是這樣的

C
12345678staticunsignedintmark_tg(structsk_buff*skb,conststructxt_action_param*par){conststructxt_mark_tginfo2*info=par->targinfo;skb->mark=(skb->mark&~info->mask)^info->mark;returnXT_CONTINUE;}

它就是設定了skb->mark而已,並沒有改變報文內容.
我們看看具體命令怎麼配置:
mark match:它依賴MARK target 先設定標記
#iptables -A POSTROUTING -t mangle -m mark ! –mark 0 -j ACCEPT
MARK target:
iptables -t mangle -A PREROUTING -i eth0 -p tcp –dport 80 -j MARK –set-mark 1
CONNMARK target:
#iptables -A POSTROUTING -t mangle -j CONNMARK –save-mark

然後我們看看幾種應用場景:

1. 策略路由
現要求對內網進行策略路由,所有通過TCP協議訪問80埠的資料包都從ChinaNet線路出去,而所有訪問UDP協議53號埠的資料包都從Cernet線路出去

打標記:

iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 1 
iptables -t mangle -A PREROUTING -i eth0 -p udp --dprot 53 -j MARK --set-mark 2

建表:

ip rule add from all fwmark 1 table 10 
ip rule add from all fwmark 2 table 20

C
1 2 ipruleaddfromallfwmark1table10 ipruleaddfromallfwmark2table20

策略路由:

C
12ip route add defaultvia10.10.1.1dev eth1 table10ip route add defaultvia10.10.2.1dev eth2 table20

2. CONNMARK和MARK結合:

C
1 2 3 4 5 6 1.iptables-APOSTROUTING-tmangle-jCONNMARK--restore-mark 2.iptables-APOSTROUTING-tmangle-m

相關推薦

iptables深入解析mangle

http://blog.jobbole.com/90008/ 講了filter、ct、nat 現在剩下最後一個知名模組mangle,但是自身雖然知道核心支援修改資料包的資訊,它主要用在策略路由和qos上.我們就具體分析一下. mangle表主要用於

iptables深入解析-filter應用

     上一篇文章分析了iptables程式碼下發運作的流程細節,篇幅有限還有很多需要補充.關於netfilter的框架網上已經被講爛了,框架很簡單,但是實現卻不簡單.但不論什麼都要最終歸到實際應用上,才能體現其價值.      下面我們就以iptables1.4.21  ubuntu14 32位  核心版

深入解析一主多備DG環境,failover的實現過程詳解 以及 11g 容災庫可以線上新增tempfile.

https://yq.aliyun.com/articles/229600   核心,就是11g通過datafille_scn 號來追日誌,而不是日誌序列號來追日誌。   摘要: 在DG中,switchover和failover是兩個重要的概念,也是DG實現的核心。根據不

深入解析由SQL解析失敗看開發與DBA的效能之爭

編者注:在很多生產系統中,程式設計師經意不經意寫下的一條SQL都可能帶來效能上的巨大隱患,正確的、不正確的。而DBA就要不斷在這些問題中出生入死,本案例描述的那些不正確的SQL可能給我們帶來的麻煩,而這類錯誤SQL往往為大家所忽視。這樣的問題在最近的客戶案例中不斷湧現,在12c中同樣為我們帶來麻煩,

深入解析Row Movement 的原理和效能影響與關聯

ROW MOVEMENT特性最初是在8i時引入的,其目的是提高分割槽表的靈活性——允許更新Partition Key。這一特性 預設是關閉,只是在使用到一些特殊功能時會要求開啟。除了之前提到的更新Partition Key,還有2個要求開啟的ROW MOVEMENT的功能就是flushback

深入解析分散式系統的事務處理經典問題及模型(轉載分享)

編者按:資料服務的高可用是所有企業都想擁有的,但是要想讓資料有高可用性,就需要冗餘資料寫多份。寫多份的問題會帶來一致性的問題,而一致性的問題又會帶來效能問題,這就會陷入一個無解的死迴圈!這裡所謂資料一致性,就是當多個使用者試圖同時訪問一個數據庫時,如果它們的事務同時使用相同的資料,可能會發生以下四種情況:

基礎深入解析JAVA註解機制

[TOC](目錄標題) # java實現註解的底層原理和概念 - java註解是JDK1.5引入的一種註釋機制,java語言的類、方法、變數、引數和包都可以被註解標註。和Javadoc不同,java註解可以通過反射獲取標註內容 - 在編譯器生成.class檔案時,註解可以被嵌入位元組碼中,而jvm也可以保

jQuery技術內幕深入解析jQuery架構設計與實現原理

源碼 att root 功能 技術內幕 瀏覽器 sel 緩存 callbacks jQuery源碼(jquery-1.7.1.js)的總體結構:(function( window, undefined ) {// 構造jQuery對象 var jQuery = (fun

.NET深入解析LINQ框架(二LINQ優雅的前奏)

mode 沒有 不想 log 業務 queryable 上下 dom 做了 閱讀目錄: 1.LINQ框架的主要設計模型 1.1.鏈式設計模式 (以流水線般的鏈接方式設計系統邏輯) 1.2.鏈式查詢方法(逐步加工查詢表達式中的每一個工作點) 2.LINQ框架的核心設計

.NET深入解析LINQ框架(四IQueryable、IQueryProvider接口詳解)

統架構 ble 優雅 架構分析 bad 大致 集合類 linq查詢 語言 閱讀目錄: 1.開篇介紹 2.擴展Linq to Object (應用框架具有查詢功能) 2.1.通過添加IEnumerable<T>對象的擴展方法 2.2.通過繼承IEnumerab

.NET深入解析LINQ框架(六LINQ執行表達式)

所有 closed 對象 系列文章 判斷代碼 vid 擴展 多條件 文件 閱讀目錄: 1.LINQ執行表達式 在看本篇文章之前我假設您已經具備我之前分析的一些原理知識,因為這章所要講的內容是建立在之前的一系列知識點之上的,為了保證您的閱讀順利建議您先閱讀本人的LINQ系

.NET深入解析LINQ框架(三LINQ優雅的前奏)

對話 spa log 有用 強類型 provider 瓶頸 模式 是什麽 閱讀目錄: 1.動態LINQ查詢(動態構建Expression<T>表達式樹) 2.DLR動態語言運行時(基於CLR之上的動態語言運行時) 1】.動態LINQ查詢(動態構建Expres

[Doctrine Migrations] 數據庫遷移組件的深入解析自定義數據字段類型

con 組件 extends arr TP value ctr ets field 自定義type 根據官方文檔,新建TinyIntType類,集成Type,並重寫getName,getSqlDeclaration,convertToPHPValue,getBindingT

步步深入MySQL架構->查詢執行流程->SQL解析順序!

效率 線程 sele 重新 3.2 image 最好 詞條 mysqld 一、前言 本文將從MySQL總體架構--->查詢執行流程--->語句執行順序來探討一下其中的知識。 二、MySQL架構總覽 架構最好看圖,再配上必要的說明文字。 下圖根據參考書籍中一圖為原

深入jsArray原始碼(一)

一、push() 和pop() 1.push() push() 向陣列的末尾新增一個或更多元素,並返回新的長度。 push原始碼如下: // Appends the arguments to the end of the array and returns the ne

#Java乾貨分享文章讓你深入瞭解Java中的包和介面

很多新手程式設計師對於Java中兩個具創新性的特徵————包與介面不是非常清楚,所以我特意發了這篇文章來闡述什麼是包,什麼是介面。 包(package)是多個類的容器,它們用於保持類的名稱空間相互隔離。 如果有想學習java的程式設計師,可來我們的java學習扣qun:79979,2590免

JAVA併發程式設計volatile關鍵字深入解析

生活 天氣賊好的一個禮拜二。 生活就是生下來活下去。 簡述 volatile是JAVA中的一個關鍵字,在JDK1.5以前據說飽受爭議,在程式中使用經常出現一些出入意料的結果。 這個麼,從volatile的翻譯就能看出來,就是不穩定的意思嘛。 JDK1.5以後,volati

JAVA併發程式設計synchronized關鍵字深入解析

生活 天氣賊好的一個禮拜二的吃完晚飯的晚上。 他們去聽課了。 不想寫程式碼。 我在這看點東西吧~ 閒談 對於synchronized的記憶是最早對同步的概念。那時候聊到同步,就會說到StringBuilder和StringBuffer,裡面 的方法都是一樣的,但是StringBu

[知乎]老狼:深入PCI與PCIe之二軟體

  深入PCI與PCIe之二:軟體篇 https://zhuanlan.zhihu.com/p/26244141 我們前一篇文章( 深入PCI與PCIe之一:硬體篇 - 知乎專欄)介紹了PCI和PCIe的硬體部分。本篇主要介紹PCI和PCIe的軟體介面和UEFI對P

Hadoop技術內幕深入解析MapReduce架構設計與實現原理 (大資料技術叢書).epub

  【下載地址】 《Hadoop技術內幕:深入解析MapReduce架構設計與實現原理》內容簡介:“Hadoop技術內幕”共兩冊,分別從原始碼的角度對“Common+HDFS”和“MapReduce的架構設計和實現原理”進行了極為詳細的分析。《Hadoop技術內幕:深入解析M