conntrack命令


雲網牛站
所在位置: 首頁 >  Linux命令 > 介紹Linux系統下的conntrack命令:允許您檢查和修改跟蹤的連接

介紹Linux系統下的conntrack命令:允許您檢查和修改跟蹤的連接

2021-02-13 15:24:20 作者:孔懂 稿源:雲網牛站

以下介紹Linux操作系統下的conntrack命令,conntrack允許您檢查和修改跟蹤的連接,將檢查連接跟蹤表和存儲在跟蹤流中的NAT信息。本文的內容有:Conntrack狀態表、Conntrack狀態表和NAT、Conntrack擴展、插入和更改條目、刪除條目、Conntrack錯誤計數器。

介紹Linux系統下的conntrack命令:允許您檢查和修改跟蹤的連接

 

介紹

通過iptables或nftables配置的NAT建立在netfilters連接跟蹤工具之上。conntrack命令用於檢查和更改狀態表,它是“conntrack-tools”軟件包的一部分。

參考:Linux系統管理員要知道的16個iptables使用技巧

 

Conntrack狀態表

連接跟蹤子系統跟蹤已看到的所有數據包流,運行“sudo conntrack -L”以查看其內容:

tcp 6 43184 ESTABLISHED src=192.168.2.5 dst=10.25.39.80 sport=5646 dport=443 src=10.25.39.80 dst=192.168.2.5 sport=443 dport=5646 [ASSURED] mark=0 use=1

tcp 6 26 SYN_SENT src=192.168.2.5 dst=192.168.2.10 sport=35684 dport=443 [UNREPLIED] src=192.168.2.10 dst=192.168.2.5 sport=443 dport=35684 mark=0 use=1

udp 17 29 src=192.168.8.1 dst=239.255.255.250 sport=48169 dport=1900 [UNREPLIED] src=239.255.255.250 dst=192.168.8.1 sport=1900 dport=48169 mark=0 use=1

每行顯示一個連接跟蹤條目。您可能會注意到,每行兩次顯示地址和端口號,甚至是反向的地址和端口對。這是因為每個條目兩次插入到狀態表中。第一個地址四元組(源地址和目標地址以及端口)是在原始方向上記錄的地址,即發起方發送的地址。第二個四元組是conntrack希望在收到來自對等方的答復時看到的內容。這解決了兩個問題:

如果NAT規則匹配(例如IP地址偽裝),則將其記錄在連接跟蹤條目的答復部分中,然后可以自動將其應用於屬於同一流的所有將來的數據包。

狀態表中的查找將是成功的,即使它是對應用了任何形式的網絡或端口地址轉換的流的答復包。

原始的(第一個顯示的)四元組永遠不會改變:它是發起方發送的。NAT操作只會將回復(第二個)更改為四倍,因為這將是接收者看到的內容。對第一個四倍的更改將毫無意義:netfilter無法控制啟動程序的狀態,它只能影響數據包的接收/轉發。當數據包未映射到現有條目時,conntrack可以為其添加新的狀態條目。對於UDP,此操作會自動發生。對於TCP,conntrack可以配置為僅在TCP數據包設置了SYN位的情況下添加新條目。默認情況下,conntrack允許中流拾取不會對conntrack變為活動狀態之前存在的流造成問題。

 

Conntrack狀態表和NAT

如上一節所述,列出的答復元組包含NAT信息。可以過濾輸出以僅顯示應用了源或目標nat的條目。這樣可以查看在給定流中哪種類型的NAT轉換處於活動狀態。“sudo conntrack -L -p tcp –src-nat”可能顯示以下內容:

tcp 6 114 TIME_WAIT src=10.0.0.10 dst=10.8.2.12 sport=5536 dport=80 src=10.8.2.12 dst=192.168.1.2 sport=80 dport=5536 [ASSURED]

此項顯示從10.0.0.10:5536到10.8.2.12:80的連接。但是,與前面的示例不同,答復方向不僅是原始的反向方向:源地址已更改。目標主機(10.8.2.12)將答復數據包發送到192.168.1.2,而不是10.0.0.10。每當10.0.0.10發送另一個數據包時,具有此條目的路由器將源地址替換為192.168.1.2。當10.8.2.12發送答復時,它將目的地更改回10.0.0.10。此源NAT是由於nft假裝規則所致:

inet nat postrouting meta oifname "veth0" masquerade

其他類型的NAT規則,例如“dnat to”或“redirect to”,將以類似的方式顯示,其回復元組的目的地不同於原始的。

 

Conntrack擴展

conntrack記帳和時間戳記是兩個有用的擴展。“sudo sysctl net.netfilter.nf_conntrack_acct=1”使每個流的“sudo conntrack -L”跟蹤字節和數據包計數器。

“sudo sysctl net.netfilter.nf_conntrack_timestamp=1”記錄每個連接的“開始時間戳”。然后,“sudo conntrack -L”顯示自第一次看到流以來經過的秒數。添加“–output ktimestamp”也可以查看絕對開始日期。

 

插入和更改條目

您可以將條目添加到狀態表。例如:

sudo conntrack -I -s 192.168.7.10 -d 10.1.1.1 --protonum 17 --timeout 120 --sport 12345 --dport 80

conntrackd將此用於狀態復制。活動防火牆的條目將復制到備用系統。這樣,備用系統就可以接管而不會中斷連接,即使建立的流量也是如此。Conntrack還可以存儲與網上發送的數據包數據無關的元數據,例如conntrack標記和連接跟蹤標簽。使用“update”(-U)選項更改它們:

sudo conntrack -U -m 42 -p tcp

這會將所有tcp流的connmark更改為42。

 

刪除條目

在某些情況下,您想從狀態表中刪除條目。例如,對NAT規則的更改不會影響屬於表中流的數據包。對於壽命長的UDP會話(例如像VXLAN這樣的隧道協議),刪除條目可能很有意義,這樣新的NAT轉換才能生效。通過“sudo conntrack -D”刪除條目,然后刪除地址和端口信息的可選列表。下面的示例從表中刪除給定的條目:

sudo conntrack -D -p udp  --src 10.0.12.4 --dst 10.0.0.1 --sport 1234 --dport 53

 

Conntrack錯誤計數器

Conntrack還可以導出統計信息:

# sudo conntrack -S

cpu=0 found=0 invalid=130 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=10

cpu=1 found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0

cpu=2 found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=1

cpu=3 found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0

大多數計數器將為0。“Found”和“insert”將始終為0,僅出於向后兼容的目的而存在。造成的其他錯誤包括:

invalid:數據包與現有連接不匹配,並且未創建新連接。

insert_failed:數據包開始新的連接,但是插入狀態表失敗。例如,當偽裝時NAT引擎恰巧選擇了相同的源地址和端口時,可能會發生這種情況。

drop:數據包啟動一個新的連接,但是沒有可用的內存為其分配新的狀態條目。

early_drop:conntrack表已滿。為了接受新連接,丟棄了沒有雙向通信的現有連接。

error:icmp(v6)收到與已知連接不匹配的icmp錯誤數據包

search_restart:查找由於另一個CPU的插入或刪除而中斷。

clash_resolve:幾個CPU嘗試插入相同的conntrack條目。

除非它們經常發生,否則這些錯誤條件是無害的。可以通過針對預期工作負載調整conntrack系統來減輕某些負擔。net.netfilter.nf_conntrack_buckets和net.netfilter.nf_conntrack_max是典型的候選者。

當數據包無效時,請使用“sudo sysctl net.netfilter.nf_conntrack_log_invalid=255”來獲取更多信息。例如,當conntrack遇到清除了所有tcp標志的數據包時,記錄以下內容:

nf_ct_proto_6: invalid tcp flag combination SRC=10.0.2.1 DST=10.0.96.7 LEN=1040 TOS=0x00 PREC=0x00 TTL=255 ID=0 PROTO=TCP SPT=5723 DPT=443 SEQ=1 ACK=0

 

概括

以上介紹了如何檢查連接跟蹤表和存儲在跟蹤流中的NAT信息。

 

相關主題

用iptables/nftables跟蹤機制檢查數據包丟失和其他連接問題來源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM