如题所述
ããè¿æ¥è·è¸ªå®ä¹å¾ç®åï¼ç¨æ¥è®°å½åè·è¸ªè¿æ¥çç¶æã
ãã为ä»ä¹åéè¦è¿æ¥è·è¸ªåè½å¢ï¼å 为å®æ¯ç¶æé²ç«å¢åNATçå®ç°åºç¡ã
ããNeftiler为äºå®ç°åºäºæ°æ®è¿æ¥ç¶æ侦æµçç¶æé²ç«å¢åè½åNATå°å转æ¢åè½æå¼ååºäºè¿æ¥è·è¸ªè¿å¥æºå¶ãé£å°±æææ¯è¯´ï¼å¦æç¼è¯å æ ¸æ¶å¼å¯äºè¿æ¥è·è¸ªé项ï¼é£ä¹Linuxç³»ç»å°±ä¼ä¸ºå®æ¶å°çæ¯ä¸ªæ°æ®å ç»´æä¸ä¸ªè¿æ¥ç¶æç¨äºè®°å½è¿æ¡æ°æ®è¿æ¥çç¶æãæ¥ä¸æ¥æ们就æ¥ç 究ä¸ä¸Netfilterçè¿æ¥è·è¸ªç设计ææ³åå®ç°æ¹å¼ã
ããä¹åæä¸å¯å¾ï¼æ们å¯ä»¥å¾æç¡®ççå°ï¼ç¨äºå®ç°è¿æ¥è·è¸ªå ¥å£çhookå½æ°ä»¥è¾é«çä¼å 级åå«è¢«æ³¨åå°äºnetfitlerçNF_IP_PRE_ROUTINGåNF_IP_LOCAL_OUT两个hookç¹ä¸ï¼ç¨äºå®ç°è¿æ¥è·è¸ªåºå£çhookå½æ°ä»¥é常ä½çä¼å 级åå«è¢«æ³¨åå°äºnetfilterçNF_IP_LOCAL_INåNF_IP_POST_ROUTING两个hookç¹ä¸ã
ããå ¶å®PRE_ROUTINGåLOCAL_OUTç¹å¯ä»¥çä½æ¯æ´ä¸ªnetfilterçå ¥å£ï¼èPOST_ROUTINGåLOCAL_INå¯ä»¥çä½æ¯å ¶åºå£ãå¨åªèèè¿æ¥è·è¸ªçæ åµä¸ï¼ä¸ä¸ªæ°æ®å æ å¤ä¹æ以ä¸ä¸ç§æµç¨å¯ä»¥èµ°ï¼
ããä¸ãåéç»æ¬æºçæ°æ®å
ããæµç¨ï¼PRE_ROUTING----LOCAL_IN---æ¬å°è¿ç¨ï¼å¦ææ¯æ°çå ï¼å¨PREROUTINGå¤çæè¿æ¥è®°å½ï¼éè¿POSTROUTINGåå å°hash表
ããäºãéè¦æ¬æºè½¬åçæ°æ®å
ããæµç¨ï¼PRE_ROUTING---FORWARD---POST_ROUTING---å¤åºï¼å¨PREROUTINGå¤çæè¿æ¥è®°å½ï¼å¨LOCAL_INå¤æçæçè¿æ¥è®°å½å å°hash表
ããä¸ãä»æ¬æºååºçæ°æ®å
ããæµç¨ï¼LOCAL_OUT----POST_ROUTING---å¤åºï¼å¨LOCAL_OUTå¤çæè¿æ¥è®°å½ï¼å¨POSTROUTINGå¤æçæçè¿æ¥è®°å½å å°hash表ã
ããæ们é½ç¥éå¨INETå±ç¨äºè¡¨ç¤ºæ°æ®å çç»ææ¯å¤§åé¼é¼çsk_buff{}(åé¢ç®ç§°skb)ï¼å¦æä½ ä¸å¹¸ç没å¬è¯´è¿è¿ä¸ªä¸ä¸ï¼é£ä¹æ强ççå»ºè®®ä½ å è¡¥ä¸ä¸ç½ç»åè®®æ çåºç¡ç¥è¯å继ç»é 读è¿ç¯æç« ãå¨skbä¸æ个æåæénfctï¼ç±»åæ¯struct nf_conntrack{}ï¼è¯¥ç»æå®ä¹å¨include/linux/skbuff.hæ件ä¸ã该ç»æè®°å½äºè¿æ¥è®°å½è¢«å ¬å¼åºç¨ç计æ°ï¼ä¹æ¹ä¾¿å ¶ä»å°æ¹å¯¹è¿æ¥è·è¸ªçå¼ç¨ãè¿æ¥è·è¸ªå¨å®é åºç¨ä¸ä¸è¬é½éè¿å¼ºå¶ç±»å转æ¢å°nfct转æ¢ææåip_conntrack{}ç±»å(å®ä¹å¨include/linux/netfilter_ipv4/ip_conntrack.hé)æ¥è·åä¸ä¸ªæ°æ®å æå±è¿æ¥è·è¸ªçç¶æä¿¡æ¯çãå³ï¼Neftilteræ¡æ¶ç¨ip_conntrack{}æ¥è®°å½ä¸ä¸ªæ°æ®å ä¸å ¶è¿æ¥çç¶æå ³ç³»ã
ããåæ¶å¨include/linux/netfilter_ipv4/ip_conntrack.hæ件ä¸è¿æä¾äºä¸ä¸ªé常æç¨çæ¥å£ï¼struct ip_conntrack *ip_conntrack_get(skb, ctinfo)ç¨äºè·åä¸ä¸ªskbçnfctæéï¼ä»èå¾ç¥è¯¥æ°æ®å çè¿æ¥ç¶æå该è¿æ¥ç¶æçç¸å ³ä¿¡æ¯ctinfoãä»è¿æ¥è·è¸ªçè§åº¦æ¥çï¼è¿ä¸ªctinfo表示äºæ¯ä¸ªæ°æ®å çå ç§è¿æ¥ç¶æï¼
ããl IP_CT_ESTABLISHED
ããPacketæ¯ä¸ä¸ªå·²å»ºè¿æ¥çä¸é¨åï¼å¨å ¶åå§æ¹åã
ããl IP_CT_RELATED
ããPacketå±äºä¸ä¸ªå·²å»ºè¿æ¥çç¸å ³è¿æ¥ï¼å¨å ¶åå§æ¹åã
ããl IP_CT_NEW
ããPacketè¯å¾å»ºç«æ°çè¿æ¥
ããl IP_CT_ESTABLISHED+IP_CT_IS_REPLY
ããPacketæ¯ä¸ä¸ªå·²å»ºè¿æ¥çä¸é¨åï¼å¨å ¶ååºæ¹åã
ããl IP_CT_RELATED+IP_CT_IS_REPLY
ããPacketå±äºä¸ä¸ªå·²å»ºè¿æ¥çç¸å ³è¿æ¥ï¼å¨å ¶ååºæ¹åã
ããå¨è¿æ¥è·è¸ªå é¨ï¼æ¶å°çæ¯ä¸ªskbé¦å 被转æ¢æä¸ä¸ªip_conntrack_tuple{}ç»æï¼ä¹å°±æ¯è¯´ip_conntrack_tuple{}ç»æææ¯è¿æ¥è·è¸ªç³»ç»æâ认è¯âçæ°æ®å ãé£ä¹skbåip_conntrack_tuple{}ç»æä¹é´æ¯å¦ä½è½¬æ¢çå¢ï¼è¿ä¸ªé®é¢æ²¡æä¸ä¸ªç»ä¸ççæ¡ï¼ä¸å ·ä½çåè®®æ¯æ¯ç¸å ³ãä¾å¦ï¼å¯¹äºTCP/UDPåè®®ï¼æ ¹æ®âæºãç®çIP+æºãç®ç端å£âåå åºåå·å°±å¯ä»¥å¯ä¸çæ è¯ä¸ä¸ªæ°æ®å äºï¼å¯¹äºICMPåè®®ï¼æ ¹æ®âæºãç®çIP+ç±»å+代å·âåå åºåå·æå¯ä»¥å¯ä¸ç¡®å®ä¸ä¸ªICMPæ¥æççã对äºè¯¸å¦åFTPè¿ç§åºç¨å±çâæ´»å¨âåè®®æ¥è¯´æ åµå°±æ´å¤æäºãæ¬æä¸è¯å¾å»åææç§å ·ä½åè®®çè¿æ¥è·è¸ªå®ç°ï¼èæ¯æ¢ç©¶è¿æ¥è·è¸ªç设计åçåå ¶å·¥ä½æµç¨ï¼ä½¿å¤§å®¶ææ¡è¿æ¥è·è¸ªçç²¾é«ãå 为ç°å¨Linuxå æ ¸æ´æ°ç太快çé½å°3.4.xï¼ååä¹å¤§åãå°±ç®æ¯2.6.22å2.6.21å¨è¿æ¥è·è¸ªè¿åè¿æ¯æäºåºå«å¢ãä¸æ¦å¤§å®¶ç解äºè¿æ¥è·è¸ªç设计ææ³ï¼ææ¡äºå ¶ç¥éµï¼å®åæä¹ä¹ä¸åä¸ç¦»å ¶å®ï¼åçå ·ä½ç代ç å®ç°æ¶å°±ä¸ä¼ç¯è¿·ç³äºãä¿è¯è¯´âæ人ä¸é±¼ï¼ä¸å¦æ人ä¸æ¸âï¼æ们æç»å¤§å®¶çæ¯æ¹æ³ãæäºæ¹æ³åå ä¸èªå·±çå¤å¦è¦ç»ï¼é£å°±æäºæè½ï¼æåå¯ä»¥ä½¿å¾å¤§å®¶å¨ä¸ºèªå·±çåè®®å¼åè¿æ¥è·è¸ªåè½æ¶å¿éææ°ãè¿ä¹æ¯æåè¿ä¸ªç³»ååæçåè¡·åç®çãä¸åå ±åã
ããå¨å¼å§åæè¿æ¥è·è¸ªä¹åï¼æ们è¿æ¯ç«å¨ç»å¸ çè§åº¦æ¥ä¿¯è§ä¸ä¸æ´ä¸ªè¿æ¥è·è¸ªçå¸å±ãè¿éæå ç¨æ¯è¾ç²ç¥çç²¾ç®æµç¨å¾ä¸ºå¤§å®¶å个å±ç¤ºï¼ç®çæ¯æ¹ä¾¿å¤§å®¶ç解ï¼å¥½å ¥é¨ãå½ç¶ï¼æçç解å¯è½è¿æä¸å¤ªåç¡®çå°æ¹ï¼è¿è¯·å¤§ç们帮å°å¼ææ£ã
ããæè¿æ¯éç³ä¸ä¸ï¼è¿æ¥è·è¸ªåå ¥å£ååºå£ä¸¤ä¸ªç¹ã谨记ï¼å ¥å£æ¶å建è¿æ¥è·è¸ªè®°å½ï¼åºå£æ¶å°è¯¥è®°å½å å ¥å°è¿æ¥è·è¸ªè¡¨ä¸ãæ们åå«æ¥ççã
ããå ¥å£ï¼
ããæ´ä¸ªå ¥å£çæµç¨ç®è¿°å¦ä¸ï¼å¯¹äºæ¯ä¸ªå°æ¥çskbï¼è¿æ¥è·è¸ªé½å°å ¶è½¬æ¢æä¸ä¸ªtupleç»æï¼ç¶åç¨è¯¥tupleå»æ¥è¿æ¥è·è¸ªè¡¨ãå¦æ该类åçæ°æ®å 没æ被è·è¸ªè¿ï¼å°ä¸ºå ¶å¨è¿æ¥è·è¸ªçhash表é建ç«ä¸ä¸ªè¿æ¥è®°å½é¡¹ï¼å¯¹äºå·²ç»è·è¸ªè¿äºçæ°æ®å åä¸ç¨æ¤æä½ãç´§æ¥çï¼è°ç¨è¯¥æ¥ææå±åè®®çè¿æ¥è·è¸ªæ¨¡åçææä¾çpacket()åè°å½æ°ï¼æåæ ¹æ®ç¶ææ¹åè¿æ¥è·è¸ªè®°å½çç¶æã
ããåºå£ï¼
ããæ´ä¸ªåºå£çæµç¨ç®è¿°å¦ä¸ï¼å¯¹äºæ¯ä¸ªå³å°ç¦»å¼Netfilteræ¡æ¶çæ°æ®å ï¼å¦æç¨äºå¤ç该å议类åæ¥æçè¿æ¥è·è¸ªæ¨¡åæä¾äºhelperå½æ°ï¼é£ä¹è¯¥æ°æ®å é¦å ä¼è¢«helperå½æ°å¤çï¼ç¶åæå»å¤æï¼å¦æ该æ¥æå·²ç»è¢«è·è¸ªè¿äºï¼é£ä¹å ¶æå±è¿æ¥çç¶æï¼å³å®è¯¥å æ¯è¯¥è¢«ä¸¢å¼ãææ¯è¿ååè®®æ 继ç»ä¼ è¾ï¼åæè å°å ¶å å ¥å°è¿æ¥è·è¸ªè¡¨ä¸ã
ããè¿æ¥è·è¸ªçå议管çï¼
ããæ们åé¢æ¾è¯´è¿ï¼ä¸ååè®®å ¶è¿æ¥è·è¸ªçå®ç°æ¯ä¸ç¸åçãæ¯ç§åè®®å¦æè¦å¼åèªå·±çè¿æ¥è·è¸ªæ¨¡åï¼é£ä¹å®é¦å å¿ é¡»å®ä¾åä¸ä¸ªip_conntrack_protocol{}ç»æä½ç±»åçåéï¼å¯¹å ¶è¿è¡å¿ è¦çå¡«å ï¼ç¶åè°ç¨ip_conntrack_protocol_register()å½æ°å°è¯¥ç»æè¿è¡æ³¨åï¼å ¶å®å°±æ¯æ ¹æ®å议类åå°å ¶è®¾ç½®å°å ¨å±æ°ç»ip_ct_protos[]ä¸çç¸åºä½ç½®ä¸ã
ããip_ct_protosåééä¿åè¿æ¥è·è¸ªç³»ç»å½åå¯ä»¥å¤ççææåè®®ï¼åè®®å·ä½ä¸ºæ°ç»å¯ä¸çä¸æ ï¼å¦ä¸å¾æ示ã
ããç»æä½ip_conntrack_protocol{}ä¸çæ¯ä¸ªæåï¼å æ ¸æºç å·²ç»åäºå¾è¯¦ç»ç注éäºï¼è¿éæå°±ä¸ä¸ä¸è§£éäºï¼å¨å®é å¼åè¿ç¨ä¸æ们ç¨å°äºåªäºå½æ°åå ·ä½åæã
ããè¿æ¥è·è¸ªçè¾ å©æ¨¡åï¼
ããNetfilterçè¿æ¥è·è¸ªä¸ºæ们æä¾äºä¸ä¸ªé常æç¨çåè½æ¨¡åï¼helperã该模åå¯ä»¥ä½¿æ们以å¾å°ç代价æ¥å®æ对è¿æ¥è·è¸ªåè½çæ©å±ãè¿ç§åºç¨åºæ¯éæ±ä¸è¬æ¯ï¼å½ä¸ä¸ªæ°æ®å å³å°ç¦»å¼Netfilteræ¡æ¶ä¹åï¼æ们å¯ä»¥å¯¹æ°æ®å ååä¸äºæåçå¤çãä»åé¢çå¾æ们ä¹å¯ä»¥çåºæ¥ï¼helper模å以è¾ä½ä¼å 级被注åå°äºNetfilterçLOCAL_OUTåPOST_ROUTING两个hookç¹ä¸ã
ããæ¯ä¸ä¸ªè¾ å©æ¨¡åé½æ¯ä¸ä¸ªip_conntrack_helper{}ç»æä½ç±»åç对象ãä¹å°±æ¯è¯´ï¼å¦æä½ æå¼åçåè®®éè¦è¿æ¥è·è¸ªè¾ å©æ¨¡åæ¥å®æä¸äºå·¥ä½çè¯ï¼é£ä¹ä½ å¿ é¡»ä¹å»å®ä¾åä¸ä¸ªip_conntrack_helper{}对象ï¼å¯¹å ¶è¿è¡å¡«å ï¼æåè°ç¨ip_conntrack_helper_register{}å½æ°å°ä½ çè¾ å©æ¨¡å注åå°å ¨å±åéhelperséï¼è¯¥ç»ææ¯ä¸ªååé¾è¡¨ï¼éé¢ä¿åäºå½åå·²ç»æ³¨åå°è¿æ¥è·è¸ªç³»ç»éçææåè®®çè¾ å©æ¨¡åã
ããå ¨å±helpersåéçå®ä¹ååå§åå¨net/netfilter/nf_conntrack_helper.cæ件ä¸å®æçã
ããæåï¼æ们çhelpersåéæ表示çååé¾è¡¨ä¸è¬é½æ¯åä¸å¾æ示çè¿æ ·åï¼
ããç±æ¤æ们åºæ¬ä¸å°±å¯ä»¥ç¥éï¼æ³¨åå¨Netfilteræ¡æ¶éLOCAL_OUTåPOST_ROUTING两个hookç¹ä¸ip_conntrack_help()åè°å½æ°æåçäºæ åºæ¬ä¹å°±å¾æ¸ æ°äºï¼é£å°±æ¯éè¿ä¾æ¬¡éåhelpersé¾è¡¨ï¼ç¶åè°ç¨æ¯ä¸ªip_conntrack_helper{}对象çhelp()å½æ°ã
ããææè¿æ¥ï¼
ããNetfilterçè¿æ¥è·è¸ªä¸ºæ¯æ诸å¦FTPè¿æ ·çâæ´»å¨âè¿æ¥æä¾äºä¸ä¸ªå«åâææè¿æ¥âçæºå¶ãæ们é½ç¥éFTPåè®®æå¡ç«¯ç¨21端å£åå½ä»¤ä¼ è¾ééï¼ä¸»å¨æ¨¡å¼ä¸æå¡å¨ç¨20端å£åæ°æ®ä¼ è¾ééï¼è¢«å¨æ¨¡å¼ä¸æå¡å¨éæºå¼ä¸ä¸ªé«äº1024ç端å£ï¼ç¶å客æ·ç«¯æ¥è¿æ¥è¿ä¸ªç«¯å£å¼å§æ°æ®ä¼ è¾ãä¹å°±æ¯è¯´æ 论主ã被å¨ï¼é½éè¦ä¸¤æ¡è¿æ¥ï¼å½ä»¤ééçè¿æ¥åæ°æ®ééçè¿æ¥ãè¿æ¥è·è¸ªå¨å¤çè¿ç§åºç¨åºæ¯æ¶æåºäºä¸ä¸ªâææè¿æ¥âçæ¦å¿µï¼å³ä¸æ¡æ°æ®è¿æ¥åå¦å¤ä¸æ¡æ°æ®è¿æ¥æ¯ç¸å ³çï¼ç¶å对äºè¿ç§æâç¸å ³æ§âçè¿æ¥ç»åºèªå·±ç解å³æ¹æ¡ãæ们说è¿ï¼æ¬æä¸æç®åææç§å ·ä½åè®®è¿æ¥è·è¸ªçå®ç°ãæ¥ä¸æ¥æ们就æ¥è°è°ææè¿æ¥ã
ããæ¯æ¡ææè¿æ¥é½ç¨ä¸ä¸ªip_conntrack_expect{}ç»æä½ç±»åç对象æ¥è¡¨ç¤ºï¼ææçææè¿æ¥åå¨å¨ç±å ¨å±åéip_conntrack_expect_listææåçååé¾è¡¨ä¸ï¼è¯¥é¾è¡¨çç»æä¸è¬å¦ä¸ï¼
ããç»æä½ip_conntrack_expect{}ä¸çæååå ¶æä¹å¨å æ ¸æºç ä¸ä¹åäºå åç注éï¼è¿éæå°±ä¸éä¸ä»ç»äºï¼çå°éè¦çæ¶åå详ç»æ¢è®¨ã
ããè¿æ¥è·è¸ªè¡¨ï¼
ãã说äºå天ç»äºå°æ们è¿æ¥è·è¸ªè¡¨æ头é²é¢çæ¶åäºãè¿æ¥è·è¸ªè¡¨æ¯ä¸ä¸ªç¨äºè®°å½æææ°æ®å è¿æ¥ä¿¡æ¯çhashæ£å表ï¼å ¶å®è¿æ¥è·è¸ªè¡¨å°±æ¯ä¸ä¸ªä»¥æ°æ®å çhashå¼ç»æçä¸ä¸ªåå循ç¯é¾è¡¨æ°ç»ï¼æ¯æ¡é¾è¡¨ä¸çæ¯ä¸ªèç¹é½æ¯ip_conntrack_tuple_hash{}ç±»åçä¸ä¸ªå¯¹è±¡ãè¿æ¥è·è¸ªè¡¨æ¯ç±ä¸ä¸ªå ¨å±çååé¾è¡¨æéåéip_conntrack_hash[]æ¥è¡¨ç¤ºã为äºä½¿æ们æ´å®¹æç解ip_conntrack_hash[]è¿ä¸ªåå循ç¯é¾è¡¨çæ°ç»ï¼æ们å°åé¢æå°çå 个éè¦çç®åè¿æªä»ç»çç»æip_conntrack_tuple{}ãip_conntrack{}åip_conntrack_tuple_hash{}åå«ä»ç»ä¸ä¸ã
ããæ们å¯ä»¥çå°ip_conntrack_tuple_hash{}ä» ä» æ¯å¯¹ip_conntrack_tuple{}çå°è£ èå·²ï¼å°å ¶ç»ç»æäºä¸ä¸ªååé¾è¡¨ç»æãå æ¤ï¼å¨ç解å±é¢ä¸æ们å¯ä»¥è®¤ä¸ºå®ä»¬æ¯åä¸ä¸ªä¸è¥¿ã
ããå¨åæip_conntrack{}ç»ææ¶ï¼æ们å°åé¢ææåå ¶ç¸å ³çæ°æ®ç»æé½ååºæ¥ï¼æ¹ä¾¿å¤§å®¶å¯¹å ¶ç解åè®°å¿ã
ããåèhttp://bbs.chinaunix.net/thread-1925862-1-1.html
ãã该å¾å¯æ¯è¯´æ¯è¿æ¥è·è¸ªé¨åçæ°æ®æ ¸å¿ï¼æ¥ä¸æ¥æ们æ¥è¯¦ç»è¯´è¯´ip_conntrack{}ç»æä¸ç¸å ³æåçæä¹ã
ããl ct_generalï¼è¯¥ç»æè®°å½äºè¿æ¥è®°å½è¢«å ¬å¼åºç¨ç计æ°ï¼ä¹æ¹ä¾¿å ¶ä»å°æ¹å¯¹è¿æ¥è·è¸ªçå¼ç¨ã
ããl statusï¼æ°æ®å è¿æ¥çç¶æï¼æ¯ä¸ä¸ªæ¯ç¹ä½å¾ã
ããl timeoutï¼ä¸ååè®®çæ¯æ¡è¿æ¥é½æé»è®¤è¶ æ¶æ¶é´ï¼å¦æå¨è¶ è¿äºè¯¥æ¶é´ä¸æ²¡æå±äºææ¡è¿æ¥çæ°æ®å æ¥å·æ°è¯¥è¿æ¥è·è¸ªè®°å½ï¼é£ä¹ä¼è°ç¨è¿ç§å议类åæä¾çè¶ æ¶å½æ°ã
ããl countersï¼è¯¥æååªæå¨ç¼è¯å æ ¸æ¶æå¼äºCONFIG_IP_NF_CT_ACCTå¼å®æä¼åå¨ï¼ä»£è¡¨ææ¡è¿æ¥æè®°å½çåèæ°åå æ°ã
ããl masterï¼è¯¥æåæåå¦å¤ä¸ä¸ªip_conntrack{}ãä¸è¬ç¨äºææè¿æ¥åºæ¯ãå³å¦æå½åè¿æ¥æ¯å¦å¤ææ¡è¿æ¥çææè¿æ¥çè¯ï¼é£ä¹è¯¥æåå°±æåé£æ¡æ们æå±ç主è¿æ¥ã
ããl helperï¼å¦ææç§åè®®æä¾äºæ©å±æ¨¡åï¼å°±éè¿è¯¥æåæ¥è°ç¨æ©å±æ¨¡åçåè½å½æ°ã
ããl protoï¼è¯¥ç»ææ¯ip_conntrack_proto{}ç±»åï¼åæ们åé¢æ¾ä»ç»è¿çç¨äºåå¨ä¸ååè®®è¿æ¥è·è¸ªçip_conntrack_protocol{}ç»æä¸è¦æ··æ·äºãåè æ¯ä¸ªæ举类åï¼åè æ¯ä¸ªç»æä½ç±»åãè¿éçproto表示ä¸åå议为äºå®ç°å ¶èªèº«çè¿æ¥è·è¸ªåè½èéè¦çä¸äºé¢å¤åæ°ä¿¡æ¯ãç®åè¿ä¸ªæ举类åå¦ä¸ï¼
ããå¦æå°æ¥ä½ çåè®®å¨å®ç°è¿æ¥è·è¸ªæ¶ä¹éè¦ä¸äºé¢å¤æ°æ®ï¼é£ä¹å¯ä»¥å¯¹è¯¥ç»æè¿è¡æ©å ã
ããl helpï¼è¯¥æå代表ä¸åçåºç¨ä¸ºäºå®ç°å ¶èªèº«çè¿æ¥è·è¸ªåè½èéè¦çä¸äºé¢å¤åæ°ä¿¡æ¯ï¼ä¹æ¯ä¸ªæ举类åçip_conntrack_help{}ç»æï¼åæ们åé¢åä»ç»è¿çç»æä½ç±»åip_conntrack_helpers{}容ææ··æ·ãip_conntrack_proto{}æ¯ä¸ºåè®®å±éè¦èåå¨çï¼èip_conntrack_help{}æ¯ä¸ºåºç¨å±éè¦èåå¨ã
ããl tuplehashï¼è¯¥ç»ææ¯ä¸ªip_conntrack_tuple_hash{}ç±»åçæ°ç»ï¼å¤§å°ä¸º2ãtuplehash[0]表示ä¸æ¡æ°æ®æµâåå§âæ¹åä¸çè¿æ¥æ åµï¼tuplehash[1]表示该æ°æ®æµâåºçâæ¹åçååºæ åµï¼è§ä¸å¾æ示ã
ããå°ç®å为æ¢ï¼æ们已ç»äºè§£äºè¿æ¥è·è¸ªè®¾è®¡ææ³åå ¶å·¥ä½æºå¶ï¼è¿æ¥è·è¸ªæ¯Netfilteræä¾çä¸å¥åºç¡æ¡æ¶ï¼ä¸åçåè®®å¯ä»¥æ ¹æ®å ¶èªèº«åè®®çç¹æ®æ§å¨è¿æ¥è·è¸ªæºå¶çæ导å约æä¸æ¥å¼åæ¬åè®®çè¿æ¥è·è¸ªåè½ï¼æåå°å ¶äº¤ç»è¿æ¥è·è¸ªæºå¶æ¥ç»ä¸ç®¡çã
è½¬è½½ä» ä¾åèï¼çæå±äºåä½è ãç¥ä½ æå¿«ï¼æ»¡æ请é纳å¦
ãã为ä»ä¹åéè¦è¿æ¥è·è¸ªåè½å¢ï¼å 为å®æ¯ç¶æé²ç«å¢åNATçå®ç°åºç¡ã
ããNeftiler为äºå®ç°åºäºæ°æ®è¿æ¥ç¶æ侦æµçç¶æé²ç«å¢åè½åNATå°å转æ¢åè½æå¼ååºäºè¿æ¥è·è¸ªè¿å¥æºå¶ãé£å°±æææ¯è¯´ï¼å¦æç¼è¯å æ ¸æ¶å¼å¯äºè¿æ¥è·è¸ªé项ï¼é£ä¹Linuxç³»ç»å°±ä¼ä¸ºå®æ¶å°çæ¯ä¸ªæ°æ®å ç»´æä¸ä¸ªè¿æ¥ç¶æç¨äºè®°å½è¿æ¡æ°æ®è¿æ¥çç¶æãæ¥ä¸æ¥æ们就æ¥ç 究ä¸ä¸Netfilterçè¿æ¥è·è¸ªç设计ææ³åå®ç°æ¹å¼ã
ããä¹åæä¸å¯å¾ï¼æ们å¯ä»¥å¾æç¡®ççå°ï¼ç¨äºå®ç°è¿æ¥è·è¸ªå ¥å£çhookå½æ°ä»¥è¾é«çä¼å 级åå«è¢«æ³¨åå°äºnetfitlerçNF_IP_PRE_ROUTINGåNF_IP_LOCAL_OUT两个hookç¹ä¸ï¼ç¨äºå®ç°è¿æ¥è·è¸ªåºå£çhookå½æ°ä»¥é常ä½çä¼å 级åå«è¢«æ³¨åå°äºnetfilterçNF_IP_LOCAL_INåNF_IP_POST_ROUTING两个hookç¹ä¸ã
ããå ¶å®PRE_ROUTINGåLOCAL_OUTç¹å¯ä»¥çä½æ¯æ´ä¸ªnetfilterçå ¥å£ï¼èPOST_ROUTINGåLOCAL_INå¯ä»¥çä½æ¯å ¶åºå£ãå¨åªèèè¿æ¥è·è¸ªçæ åµä¸ï¼ä¸ä¸ªæ°æ®å æ å¤ä¹æ以ä¸ä¸ç§æµç¨å¯ä»¥èµ°ï¼
ããä¸ãåéç»æ¬æºçæ°æ®å
ããæµç¨ï¼PRE_ROUTING----LOCAL_IN---æ¬å°è¿ç¨ï¼å¦ææ¯æ°çå ï¼å¨PREROUTINGå¤çæè¿æ¥è®°å½ï¼éè¿POSTROUTINGåå å°hash表
ããäºãéè¦æ¬æºè½¬åçæ°æ®å
ããæµç¨ï¼PRE_ROUTING---FORWARD---POST_ROUTING---å¤åºï¼å¨PREROUTINGå¤çæè¿æ¥è®°å½ï¼å¨LOCAL_INå¤æçæçè¿æ¥è®°å½å å°hash表
ããä¸ãä»æ¬æºååºçæ°æ®å
ããæµç¨ï¼LOCAL_OUT----POST_ROUTING---å¤åºï¼å¨LOCAL_OUTå¤çæè¿æ¥è®°å½ï¼å¨POSTROUTINGå¤æçæçè¿æ¥è®°å½å å°hash表ã
ããæ们é½ç¥éå¨INETå±ç¨äºè¡¨ç¤ºæ°æ®å çç»ææ¯å¤§åé¼é¼çsk_buff{}(åé¢ç®ç§°skb)ï¼å¦æä½ ä¸å¹¸ç没å¬è¯´è¿è¿ä¸ªä¸ä¸ï¼é£ä¹æ强ççå»ºè®®ä½ å è¡¥ä¸ä¸ç½ç»åè®®æ çåºç¡ç¥è¯å继ç»é 读è¿ç¯æç« ãå¨skbä¸æ个æåæénfctï¼ç±»åæ¯struct nf_conntrack{}ï¼è¯¥ç»æå®ä¹å¨include/linux/skbuff.hæ件ä¸ã该ç»æè®°å½äºè¿æ¥è®°å½è¢«å ¬å¼åºç¨ç计æ°ï¼ä¹æ¹ä¾¿å ¶ä»å°æ¹å¯¹è¿æ¥è·è¸ªçå¼ç¨ãè¿æ¥è·è¸ªå¨å®é åºç¨ä¸ä¸è¬é½éè¿å¼ºå¶ç±»å转æ¢å°nfct转æ¢ææåip_conntrack{}ç±»å(å®ä¹å¨include/linux/netfilter_ipv4/ip_conntrack.hé)æ¥è·åä¸ä¸ªæ°æ®å æå±è¿æ¥è·è¸ªçç¶æä¿¡æ¯çãå³ï¼Neftilteræ¡æ¶ç¨ip_conntrack{}æ¥è®°å½ä¸ä¸ªæ°æ®å ä¸å ¶è¿æ¥çç¶æå ³ç³»ã
ããåæ¶å¨include/linux/netfilter_ipv4/ip_conntrack.hæ件ä¸è¿æä¾äºä¸ä¸ªé常æç¨çæ¥å£ï¼struct ip_conntrack *ip_conntrack_get(skb, ctinfo)ç¨äºè·åä¸ä¸ªskbçnfctæéï¼ä»èå¾ç¥è¯¥æ°æ®å çè¿æ¥ç¶æå该è¿æ¥ç¶æçç¸å ³ä¿¡æ¯ctinfoãä»è¿æ¥è·è¸ªçè§åº¦æ¥çï¼è¿ä¸ªctinfo表示äºæ¯ä¸ªæ°æ®å çå ç§è¿æ¥ç¶æï¼
ããl IP_CT_ESTABLISHED
ããPacketæ¯ä¸ä¸ªå·²å»ºè¿æ¥çä¸é¨åï¼å¨å ¶åå§æ¹åã
ããl IP_CT_RELATED
ããPacketå±äºä¸ä¸ªå·²å»ºè¿æ¥çç¸å ³è¿æ¥ï¼å¨å ¶åå§æ¹åã
ããl IP_CT_NEW
ããPacketè¯å¾å»ºç«æ°çè¿æ¥
ããl IP_CT_ESTABLISHED+IP_CT_IS_REPLY
ããPacketæ¯ä¸ä¸ªå·²å»ºè¿æ¥çä¸é¨åï¼å¨å ¶ååºæ¹åã
ããl IP_CT_RELATED+IP_CT_IS_REPLY
ããPacketå±äºä¸ä¸ªå·²å»ºè¿æ¥çç¸å ³è¿æ¥ï¼å¨å ¶ååºæ¹åã
ããå¨è¿æ¥è·è¸ªå é¨ï¼æ¶å°çæ¯ä¸ªskbé¦å 被转æ¢æä¸ä¸ªip_conntrack_tuple{}ç»æï¼ä¹å°±æ¯è¯´ip_conntrack_tuple{}ç»æææ¯è¿æ¥è·è¸ªç³»ç»æâ认è¯âçæ°æ®å ãé£ä¹skbåip_conntrack_tuple{}ç»æä¹é´æ¯å¦ä½è½¬æ¢çå¢ï¼è¿ä¸ªé®é¢æ²¡æä¸ä¸ªç»ä¸ççæ¡ï¼ä¸å ·ä½çåè®®æ¯æ¯ç¸å ³ãä¾å¦ï¼å¯¹äºTCP/UDPåè®®ï¼æ ¹æ®âæºãç®çIP+æºãç®ç端å£âåå åºåå·å°±å¯ä»¥å¯ä¸çæ è¯ä¸ä¸ªæ°æ®å äºï¼å¯¹äºICMPåè®®ï¼æ ¹æ®âæºãç®çIP+ç±»å+代å·âåå åºåå·æå¯ä»¥å¯ä¸ç¡®å®ä¸ä¸ªICMPæ¥æççã对äºè¯¸å¦åFTPè¿ç§åºç¨å±çâæ´»å¨âåè®®æ¥è¯´æ åµå°±æ´å¤æäºãæ¬æä¸è¯å¾å»åææç§å ·ä½åè®®çè¿æ¥è·è¸ªå®ç°ï¼èæ¯æ¢ç©¶è¿æ¥è·è¸ªç设计åçåå ¶å·¥ä½æµç¨ï¼ä½¿å¤§å®¶ææ¡è¿æ¥è·è¸ªçç²¾é«ãå 为ç°å¨Linuxå æ ¸æ´æ°ç太快çé½å°3.4.xï¼ååä¹å¤§åãå°±ç®æ¯2.6.22å2.6.21å¨è¿æ¥è·è¸ªè¿åè¿æ¯æäºåºå«å¢ãä¸æ¦å¤§å®¶ç解äºè¿æ¥è·è¸ªç设计ææ³ï¼ææ¡äºå ¶ç¥éµï¼å®åæä¹ä¹ä¸åä¸ç¦»å ¶å®ï¼åçå ·ä½ç代ç å®ç°æ¶å°±ä¸ä¼ç¯è¿·ç³äºãä¿è¯è¯´âæ人ä¸é±¼ï¼ä¸å¦æ人ä¸æ¸âï¼æ们æç»å¤§å®¶çæ¯æ¹æ³ãæäºæ¹æ³åå ä¸èªå·±çå¤å¦è¦ç»ï¼é£å°±æäºæè½ï¼æåå¯ä»¥ä½¿å¾å¤§å®¶å¨ä¸ºèªå·±çåè®®å¼åè¿æ¥è·è¸ªåè½æ¶å¿éææ°ãè¿ä¹æ¯æåè¿ä¸ªç³»ååæçåè¡·åç®çãä¸åå ±åã
ããå¨å¼å§åæè¿æ¥è·è¸ªä¹åï¼æ们è¿æ¯ç«å¨ç»å¸ çè§åº¦æ¥ä¿¯è§ä¸ä¸æ´ä¸ªè¿æ¥è·è¸ªçå¸å±ãè¿éæå ç¨æ¯è¾ç²ç¥çç²¾ç®æµç¨å¾ä¸ºå¤§å®¶å个å±ç¤ºï¼ç®çæ¯æ¹ä¾¿å¤§å®¶ç解ï¼å¥½å ¥é¨ãå½ç¶ï¼æçç解å¯è½è¿æä¸å¤ªåç¡®çå°æ¹ï¼è¿è¯·å¤§ç们帮å°å¼ææ£ã
ããæè¿æ¯éç³ä¸ä¸ï¼è¿æ¥è·è¸ªåå ¥å£ååºå£ä¸¤ä¸ªç¹ã谨记ï¼å ¥å£æ¶å建è¿æ¥è·è¸ªè®°å½ï¼åºå£æ¶å°è¯¥è®°å½å å ¥å°è¿æ¥è·è¸ªè¡¨ä¸ãæ们åå«æ¥ççã
ããå ¥å£ï¼
ããæ´ä¸ªå ¥å£çæµç¨ç®è¿°å¦ä¸ï¼å¯¹äºæ¯ä¸ªå°æ¥çskbï¼è¿æ¥è·è¸ªé½å°å ¶è½¬æ¢æä¸ä¸ªtupleç»æï¼ç¶åç¨è¯¥tupleå»æ¥è¿æ¥è·è¸ªè¡¨ãå¦æ该类åçæ°æ®å 没æ被è·è¸ªè¿ï¼å°ä¸ºå ¶å¨è¿æ¥è·è¸ªçhash表é建ç«ä¸ä¸ªè¿æ¥è®°å½é¡¹ï¼å¯¹äºå·²ç»è·è¸ªè¿äºçæ°æ®å åä¸ç¨æ¤æä½ãç´§æ¥çï¼è°ç¨è¯¥æ¥ææå±åè®®çè¿æ¥è·è¸ªæ¨¡åçææä¾çpacket()åè°å½æ°ï¼æåæ ¹æ®ç¶ææ¹åè¿æ¥è·è¸ªè®°å½çç¶æã
ããåºå£ï¼
ããæ´ä¸ªåºå£çæµç¨ç®è¿°å¦ä¸ï¼å¯¹äºæ¯ä¸ªå³å°ç¦»å¼Netfilteræ¡æ¶çæ°æ®å ï¼å¦æç¨äºå¤ç该å议类åæ¥æçè¿æ¥è·è¸ªæ¨¡åæä¾äºhelperå½æ°ï¼é£ä¹è¯¥æ°æ®å é¦å ä¼è¢«helperå½æ°å¤çï¼ç¶åæå»å¤æï¼å¦æ该æ¥æå·²ç»è¢«è·è¸ªè¿äºï¼é£ä¹å ¶æå±è¿æ¥çç¶æï¼å³å®è¯¥å æ¯è¯¥è¢«ä¸¢å¼ãææ¯è¿ååè®®æ 继ç»ä¼ è¾ï¼åæè å°å ¶å å ¥å°è¿æ¥è·è¸ªè¡¨ä¸ã
ããè¿æ¥è·è¸ªçå议管çï¼
ããæ们åé¢æ¾è¯´è¿ï¼ä¸ååè®®å ¶è¿æ¥è·è¸ªçå®ç°æ¯ä¸ç¸åçãæ¯ç§åè®®å¦æè¦å¼åèªå·±çè¿æ¥è·è¸ªæ¨¡åï¼é£ä¹å®é¦å å¿ é¡»å®ä¾åä¸ä¸ªip_conntrack_protocol{}ç»æä½ç±»åçåéï¼å¯¹å ¶è¿è¡å¿ è¦çå¡«å ï¼ç¶åè°ç¨ip_conntrack_protocol_register()å½æ°å°è¯¥ç»æè¿è¡æ³¨åï¼å ¶å®å°±æ¯æ ¹æ®å议类åå°å ¶è®¾ç½®å°å ¨å±æ°ç»ip_ct_protos[]ä¸çç¸åºä½ç½®ä¸ã
ããip_ct_protosåééä¿åè¿æ¥è·è¸ªç³»ç»å½åå¯ä»¥å¤ççææåè®®ï¼åè®®å·ä½ä¸ºæ°ç»å¯ä¸çä¸æ ï¼å¦ä¸å¾æ示ã
ããç»æä½ip_conntrack_protocol{}ä¸çæ¯ä¸ªæåï¼å æ ¸æºç å·²ç»åäºå¾è¯¦ç»ç注éäºï¼è¿éæå°±ä¸ä¸ä¸è§£éäºï¼å¨å®é å¼åè¿ç¨ä¸æ们ç¨å°äºåªäºå½æ°åå ·ä½åæã
ããè¿æ¥è·è¸ªçè¾ å©æ¨¡åï¼
ããNetfilterçè¿æ¥è·è¸ªä¸ºæ们æä¾äºä¸ä¸ªé常æç¨çåè½æ¨¡åï¼helperã该模åå¯ä»¥ä½¿æ们以å¾å°ç代价æ¥å®æ对è¿æ¥è·è¸ªåè½çæ©å±ãè¿ç§åºç¨åºæ¯éæ±ä¸è¬æ¯ï¼å½ä¸ä¸ªæ°æ®å å³å°ç¦»å¼Netfilteræ¡æ¶ä¹åï¼æ们å¯ä»¥å¯¹æ°æ®å ååä¸äºæåçå¤çãä»åé¢çå¾æ们ä¹å¯ä»¥çåºæ¥ï¼helper模å以è¾ä½ä¼å 级被注åå°äºNetfilterçLOCAL_OUTåPOST_ROUTING两个hookç¹ä¸ã
ããæ¯ä¸ä¸ªè¾ å©æ¨¡åé½æ¯ä¸ä¸ªip_conntrack_helper{}ç»æä½ç±»åç对象ãä¹å°±æ¯è¯´ï¼å¦æä½ æå¼åçåè®®éè¦è¿æ¥è·è¸ªè¾ å©æ¨¡åæ¥å®æä¸äºå·¥ä½çè¯ï¼é£ä¹ä½ å¿ é¡»ä¹å»å®ä¾åä¸ä¸ªip_conntrack_helper{}对象ï¼å¯¹å ¶è¿è¡å¡«å ï¼æåè°ç¨ip_conntrack_helper_register{}å½æ°å°ä½ çè¾ å©æ¨¡å注åå°å ¨å±åéhelperséï¼è¯¥ç»ææ¯ä¸ªååé¾è¡¨ï¼éé¢ä¿åäºå½åå·²ç»æ³¨åå°è¿æ¥è·è¸ªç³»ç»éçææåè®®çè¾ å©æ¨¡åã
ããå ¨å±helpersåéçå®ä¹ååå§åå¨net/netfilter/nf_conntrack_helper.cæ件ä¸å®æçã
ããæåï¼æ们çhelpersåéæ表示çååé¾è¡¨ä¸è¬é½æ¯åä¸å¾æ示çè¿æ ·åï¼
ããç±æ¤æ们åºæ¬ä¸å°±å¯ä»¥ç¥éï¼æ³¨åå¨Netfilteræ¡æ¶éLOCAL_OUTåPOST_ROUTING两个hookç¹ä¸ip_conntrack_help()åè°å½æ°æåçäºæ åºæ¬ä¹å°±å¾æ¸ æ°äºï¼é£å°±æ¯éè¿ä¾æ¬¡éåhelpersé¾è¡¨ï¼ç¶åè°ç¨æ¯ä¸ªip_conntrack_helper{}对象çhelp()å½æ°ã
ããææè¿æ¥ï¼
ããNetfilterçè¿æ¥è·è¸ªä¸ºæ¯æ诸å¦FTPè¿æ ·çâæ´»å¨âè¿æ¥æä¾äºä¸ä¸ªå«åâææè¿æ¥âçæºå¶ãæ们é½ç¥éFTPåè®®æå¡ç«¯ç¨21端å£åå½ä»¤ä¼ è¾ééï¼ä¸»å¨æ¨¡å¼ä¸æå¡å¨ç¨20端å£åæ°æ®ä¼ è¾ééï¼è¢«å¨æ¨¡å¼ä¸æå¡å¨éæºå¼ä¸ä¸ªé«äº1024ç端å£ï¼ç¶å客æ·ç«¯æ¥è¿æ¥è¿ä¸ªç«¯å£å¼å§æ°æ®ä¼ è¾ãä¹å°±æ¯è¯´æ 论主ã被å¨ï¼é½éè¦ä¸¤æ¡è¿æ¥ï¼å½ä»¤ééçè¿æ¥åæ°æ®ééçè¿æ¥ãè¿æ¥è·è¸ªå¨å¤çè¿ç§åºç¨åºæ¯æ¶æåºäºä¸ä¸ªâææè¿æ¥âçæ¦å¿µï¼å³ä¸æ¡æ°æ®è¿æ¥åå¦å¤ä¸æ¡æ°æ®è¿æ¥æ¯ç¸å ³çï¼ç¶å对äºè¿ç§æâç¸å ³æ§âçè¿æ¥ç»åºèªå·±ç解å³æ¹æ¡ãæ们说è¿ï¼æ¬æä¸æç®åææç§å ·ä½åè®®è¿æ¥è·è¸ªçå®ç°ãæ¥ä¸æ¥æ们就æ¥è°è°ææè¿æ¥ã
ããæ¯æ¡ææè¿æ¥é½ç¨ä¸ä¸ªip_conntrack_expect{}ç»æä½ç±»åç对象æ¥è¡¨ç¤ºï¼ææçææè¿æ¥åå¨å¨ç±å ¨å±åéip_conntrack_expect_listææåçååé¾è¡¨ä¸ï¼è¯¥é¾è¡¨çç»æä¸è¬å¦ä¸ï¼
ããç»æä½ip_conntrack_expect{}ä¸çæååå ¶æä¹å¨å æ ¸æºç ä¸ä¹åäºå åç注éï¼è¿éæå°±ä¸éä¸ä»ç»äºï¼çå°éè¦çæ¶åå详ç»æ¢è®¨ã
ããè¿æ¥è·è¸ªè¡¨ï¼
ãã说äºå天ç»äºå°æ们è¿æ¥è·è¸ªè¡¨æ头é²é¢çæ¶åäºãè¿æ¥è·è¸ªè¡¨æ¯ä¸ä¸ªç¨äºè®°å½æææ°æ®å è¿æ¥ä¿¡æ¯çhashæ£å表ï¼å ¶å®è¿æ¥è·è¸ªè¡¨å°±æ¯ä¸ä¸ªä»¥æ°æ®å çhashå¼ç»æçä¸ä¸ªåå循ç¯é¾è¡¨æ°ç»ï¼æ¯æ¡é¾è¡¨ä¸çæ¯ä¸ªèç¹é½æ¯ip_conntrack_tuple_hash{}ç±»åçä¸ä¸ªå¯¹è±¡ãè¿æ¥è·è¸ªè¡¨æ¯ç±ä¸ä¸ªå ¨å±çååé¾è¡¨æéåéip_conntrack_hash[]æ¥è¡¨ç¤ºã为äºä½¿æ们æ´å®¹æç解ip_conntrack_hash[]è¿ä¸ªåå循ç¯é¾è¡¨çæ°ç»ï¼æ们å°åé¢æå°çå 个éè¦çç®åè¿æªä»ç»çç»æip_conntrack_tuple{}ãip_conntrack{}åip_conntrack_tuple_hash{}åå«ä»ç»ä¸ä¸ã
ããæ们å¯ä»¥çå°ip_conntrack_tuple_hash{}ä» ä» æ¯å¯¹ip_conntrack_tuple{}çå°è£ èå·²ï¼å°å ¶ç»ç»æäºä¸ä¸ªååé¾è¡¨ç»æãå æ¤ï¼å¨ç解å±é¢ä¸æ们å¯ä»¥è®¤ä¸ºå®ä»¬æ¯åä¸ä¸ªä¸è¥¿ã
ããå¨åæip_conntrack{}ç»ææ¶ï¼æ们å°åé¢ææåå ¶ç¸å ³çæ°æ®ç»æé½ååºæ¥ï¼æ¹ä¾¿å¤§å®¶å¯¹å ¶ç解åè®°å¿ã
ããåèhttp://bbs.chinaunix.net/thread-1925862-1-1.html
ãã该å¾å¯æ¯è¯´æ¯è¿æ¥è·è¸ªé¨åçæ°æ®æ ¸å¿ï¼æ¥ä¸æ¥æ们æ¥è¯¦ç»è¯´è¯´ip_conntrack{}ç»æä¸ç¸å ³æåçæä¹ã
ããl ct_generalï¼è¯¥ç»æè®°å½äºè¿æ¥è®°å½è¢«å ¬å¼åºç¨ç计æ°ï¼ä¹æ¹ä¾¿å ¶ä»å°æ¹å¯¹è¿æ¥è·è¸ªçå¼ç¨ã
ããl statusï¼æ°æ®å è¿æ¥çç¶æï¼æ¯ä¸ä¸ªæ¯ç¹ä½å¾ã
ããl timeoutï¼ä¸ååè®®çæ¯æ¡è¿æ¥é½æé»è®¤è¶ æ¶æ¶é´ï¼å¦æå¨è¶ è¿äºè¯¥æ¶é´ä¸æ²¡æå±äºææ¡è¿æ¥çæ°æ®å æ¥å·æ°è¯¥è¿æ¥è·è¸ªè®°å½ï¼é£ä¹ä¼è°ç¨è¿ç§å议类åæä¾çè¶ æ¶å½æ°ã
ããl countersï¼è¯¥æååªæå¨ç¼è¯å æ ¸æ¶æå¼äºCONFIG_IP_NF_CT_ACCTå¼å®æä¼åå¨ï¼ä»£è¡¨ææ¡è¿æ¥æè®°å½çåèæ°åå æ°ã
ããl masterï¼è¯¥æåæåå¦å¤ä¸ä¸ªip_conntrack{}ãä¸è¬ç¨äºææè¿æ¥åºæ¯ãå³å¦æå½åè¿æ¥æ¯å¦å¤ææ¡è¿æ¥çææè¿æ¥çè¯ï¼é£ä¹è¯¥æåå°±æåé£æ¡æ们æå±ç主è¿æ¥ã
ããl helperï¼å¦ææç§åè®®æä¾äºæ©å±æ¨¡åï¼å°±éè¿è¯¥æåæ¥è°ç¨æ©å±æ¨¡åçåè½å½æ°ã
ããl protoï¼è¯¥ç»ææ¯ip_conntrack_proto{}ç±»åï¼åæ们åé¢æ¾ä»ç»è¿çç¨äºåå¨ä¸ååè®®è¿æ¥è·è¸ªçip_conntrack_protocol{}ç»æä¸è¦æ··æ·äºãåè æ¯ä¸ªæ举类åï¼åè æ¯ä¸ªç»æä½ç±»åãè¿éçproto表示ä¸åå议为äºå®ç°å ¶èªèº«çè¿æ¥è·è¸ªåè½èéè¦çä¸äºé¢å¤åæ°ä¿¡æ¯ãç®åè¿ä¸ªæ举类åå¦ä¸ï¼
ããå¦æå°æ¥ä½ çåè®®å¨å®ç°è¿æ¥è·è¸ªæ¶ä¹éè¦ä¸äºé¢å¤æ°æ®ï¼é£ä¹å¯ä»¥å¯¹è¯¥ç»æè¿è¡æ©å ã
ããl helpï¼è¯¥æå代表ä¸åçåºç¨ä¸ºäºå®ç°å ¶èªèº«çè¿æ¥è·è¸ªåè½èéè¦çä¸äºé¢å¤åæ°ä¿¡æ¯ï¼ä¹æ¯ä¸ªæ举类åçip_conntrack_help{}ç»æï¼åæ们åé¢åä»ç»è¿çç»æä½ç±»åip_conntrack_helpers{}容ææ··æ·ãip_conntrack_proto{}æ¯ä¸ºåè®®å±éè¦èåå¨çï¼èip_conntrack_help{}æ¯ä¸ºåºç¨å±éè¦èåå¨ã
ããl tuplehashï¼è¯¥ç»ææ¯ä¸ªip_conntrack_tuple_hash{}ç±»åçæ°ç»ï¼å¤§å°ä¸º2ãtuplehash[0]表示ä¸æ¡æ°æ®æµâåå§âæ¹åä¸çè¿æ¥æ åµï¼tuplehash[1]表示该æ°æ®æµâåºçâæ¹åçååºæ åµï¼è§ä¸å¾æ示ã
ããå°ç®å为æ¢ï¼æ们已ç»äºè§£äºè¿æ¥è·è¸ªè®¾è®¡ææ³åå ¶å·¥ä½æºå¶ï¼è¿æ¥è·è¸ªæ¯Netfilteræä¾çä¸å¥åºç¡æ¡æ¶ï¼ä¸åçåè®®å¯ä»¥æ ¹æ®å ¶èªèº«åè®®çç¹æ®æ§å¨è¿æ¥è·è¸ªæºå¶çæ导å约æä¸æ¥å¼åæ¬åè®®çè¿æ¥è·è¸ªåè½ï¼æåå°å ¶äº¤ç»è¿æ¥è·è¸ªæºå¶æ¥ç»ä¸ç®¡çã
è½¬è½½ä» ä¾åèï¼çæå±äºåä½è ãç¥ä½ æå¿«ï¼æ»¡æ请é纳å¦
温馨提示:答案为网友推荐,仅供参考