Linux的ip_conntrack半景

來源:互聯網
上載者:User

ip_conntrack內建於Linux協議棧的Netfilter架構,其實現比較複雜,然而其邏輯卻很簡單。ip_conntrack追蹤每一個流,一個流由五元組來定義,五元組這個網路基本術語就不解釋了。因此ip_conntrack必然能對“哪裡是一個流的開始”做出判斷,雖然這種判斷不總是精確的,詳見《linux之ip_conntrack容易混淆的問題點滴》。
  ip_conntrack會為每一個到來的包綁定一個流,如果找不到遵照五元組可以綁定的流,則會認為這是個流頭,那麼就會根據該包所攜帶的五元組資訊建立一個新的流,整個情境可以由下面的流程圖展示出來:

有了一個基本的認識,再遇到問題的時候就可以用知道的知識來解決了,比如《iptables和策略路由實現VPN感興趣流的截獲》一文中的問題,要截獲一個特定的流,然而由於拓撲複雜,還要支援任意點到任意點的互連,僅僅根據IP層的資訊就很難分辨出一個雙向的資料流是由哪裡發起的,因此就必然要使用ip_conntrack。ip_conntrack有一個match,那就是ctdir,它可以分辨出方向資訊,然而它是如何做到的呢?通過就可以看出,ip_conntrack儲存了一個雜湊表,其中的表項內容就是一個五元組,然而兩個方向的五元組資訊是分開存放的,這就便於根據單獨的五元組進行尋找,雖然它們分開存放,屬於同一個流的雙向兩個五元組又由同一個nf_conn結構(不同核心版本名字可能不同)統一了起來。如此一來就很容易辨別方向了。流量截獲的mangle規則如所示:

以下是策略路由規則:

上述的流量截獲方法其實就是使用ip_conntrack機製為IP資料報增加了方向的特徵,然後你可以很方便的根據方向資訊區分不同的流量,最終使用原則路由將資料包導向特定的目的地。
ip_conntrack雖然功能強大,然而卻也帶來不少爭議,幸運的是關於這些爭議的不好的方面都是有解決辦法的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.