Linux netfilter Hacking HOWTORusty RussellÐÝíæÚÞÈ
1. ¼¹®º» ¹®¼´Â ¿©Çà°úµµ °°À¸¸ç, ÀϺκÐÀº ¾ÆÁÖ ½±°Ô ¿©ÇàÇÒ ¼ö ÀÖ°í ¶Ç ´Ù¸¥ ºÎºÐ¿¡¼´Â µ¶ÀÚ ¿©·¯ºÐ ½º½º·Î ±æÀ» ã¾Æ¾ß ÇÒ °ÍÀÌ´Ù. ÇÊÀÚ°¡ µ¶ÀÚ¿¡°Ô ÇÒ ¼ö ÀÖ´Â ÃÖ»óÀÇ Ãæ°í´Â ¾ÆÁÖ Å« ¸Ó±×ÀÜ¿¡ Ä¿Çdzª ÇÖÃÝÄݸ´À» °¡µæ ´ã¾Æ Æí¾ÈÇÑ ÀÇÀÚ¿¡ ¾É¾Æ À§Ç轺·± ±æÀ» °¡±â Àü¿¡ º»¹®ÀÇ ³»¿ëÀ» ³ÝÆ®¿÷ ÇØÅ·À̶ó´Â ¾ÆÁÖ À§Ç轺·¯¿î ¼¼»ó¿¡ ºÎÇÕ½ÃÄÑ ±íÀÌ »ý°¢ÇØ º¸¶ó´Â °Í ¹Û¿¡ ¾ø´Ù. ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷ÀÇ ÃÖ»óÀ§¿¡ ÀÖ´Â ³»ºÎ±¸Á¶ÀÇ »ç¿ë¹ýÀ» º¸´Ù Àß ÀÌÇØÇϱâ À§Çؼ´Â, Packet Filtering HOWTO¿Í NAT HOWTO¸¦ Àо´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. Ä¿³Î ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò°íÀÚ ÇÑ´Ù¸é Rusty's Unreliable Guide to Kernel Hacking°ú Rusty's Unreliable Guide to Kernel LockingÀ» Âü°íÇϱ⠹ٶõ´Ù. (C) 2000 Paul `Rusty' Russell. Licensed under the GNU GPL. 1.1. ³ÝÇÊÅÍ(netfilter)¶õ ¹«¾ùÀΰ¡?³ÝÇÊÅʹ ǥÁØ Berkeley socket interfaceÀÇ ¿ÜºÎ¿¡ Á¸ÀçÇÏ´Â packet mangling(ÆÐŶÀ» Å丷³»´Â ÀÏ)¿¡ ´ëÇÑ ÇÁ·¹ÀÓ¿÷À¸·Î, Å©°Ô ³× ºÎºÐÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ¸ÕÀú °¢°¢ÀÇ ÇÁ·ÎÅäÄÝÀº "hooks"¶ó´Â °ÍÀ» Á¤ÀÇÇϸç, ÀÌ´Â ÆÐŶ ÇÁ·ÎÅäÄÝ ½ºÅÃÀÇ packet's traversal¿¡ ÀÖ´Â Àß Á¤ÀÇµÈ Æ÷ÀÎÅ͸¦ ÀǹÌÇÑ´Ù. ÀÌ·¯ÇÑ Æ÷ÀÎÅÍ¿¡¼, °¢°¢ÀÇ ÇÁ·ÎÅäÄÝÀº ÆÐŶ°ú Èųѹö(hook number)¸¦ ÀÌ¿ëÇÏ¿© ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷À» È£ÃâÇÏ°Ô µÈ´Ù. µÎ ¹ø°·Î, Ä¿³ÎÀÇ ÀϺκÐÀº °¢ ÇÁ·ÎÅäÄÝ¿¡ ´ëÇÏ¿© ´Ù¸¥ hookÀ» °¨½ÃÇϵµ·Ï µî·ÏÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ ÆÐŶÀÌ ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷À» Åë°úÇÒ ¶§, ´©°¡ ±× ÇÁ·ÎÅäÄÝ°ú ÈÅÀ» µî·ÏÇß´ÂÁö È®ÀÎÇÏ°Ô µÈ´Ù. ÀÌ·¯ÇÑ °ÍÀÌ µî·ÏµÇ¾î ÀÖ´Ù¸é, µî·ÏµÈ ¼ø¼´ë·Î ÆÐŶÀ» °Ë»çÇÏ°í, ÆÐŶÀ» ¹«½ÃÇϰųª(NF_DROP), Åë°ú½ÃÅ°°í(NF_ACCEPT), ¶Ç´Â ÆÐŶ¿¡ ´ëÇÑ °ÍÀ» Àؾî¹ö¸®µµ·Ï ³ÝÇÊÅÍ¿¡°Ô Áö½ÃÇϰųª(NF_STOLEN), »ç¿ëÀÚ °ø°£¿¡ ÆÐŶÀ» ´ë±â½ÃÅ°µµ·Ï(queuing) ³ÝÇÊÅÍ¿¡°Ô ¿äûÇÑ´Ù(NF_QUEUE). ¼¼ ¹ø° ºÎºÐÀº ´ë±âµÈ ÆÐŶÀ» »ç¿ëÀÚ °ø°£À¸·Î º¸³»±â À§ÇØ Á¦¾îÇÏ´Â °ÍÀ¸·Î ÀÌ·¯ÇÑ ÆÐŶÀº ºñµ¿±â¹æ½ÄÀ¸·Î 󸮵ȴÙ. ¸¶Áö¸· ºÎºÐÀº ÄÚµå¿Í ¹®¼¿¡ ±â·ÏµÈ ÁÖ¼®¹®À¸·Î ±¸¼ºµÇ¾î ÀÖÀ¸¸ç, ÀÌ´Â ¾î¶°ÇÑ ½ÇÇèÀû ÇÁ·ÎÁ§Æ®¿¡ ´ëÇؼµµ µµ¿òÀÌ µÇ´Â ºÎºÐÀÌ´Ù. ³Ý ÇÊÅÍÀÇ ¸ðÅä´Â ´ÙÀ½°ú °°´Ù.
ÀÌ·¯ÇÑ Àú¼öÁØ ÇÁ·¹ÀÓ¿÷°ú ´õºÒ¾î, ´Ù¾çÇÑ ¸ðµâÀÌ ÀÛ¼ºµÇ¾úÀ¸¸ç, ÀÌ´Â ÀÌÀü ¹öÀüÀÇ Ä¿³Î¿¡ ´ëÇÏ¿© À¯»çÇÑ ±â´É, È®Àå °¡´ÉÇÑ NAT½Ã½ºÅÛ ±×¸®°í È®Àå °¡´ÉÇÑ ÆÐŶ ÇÊÅ͸µ ½Ã½ºÅÛÀ» Á¦°øÇÑ´Ù. 1.1.1. Ä¿³Î 2.0°ú 2.2¿¡¼ÀÇ ¹®Á¦Á¡?
1.1.2. ´©±¸½ÃÁÒ?³ª´Â ÀÌ·± ÁþÀ» Çϸ®¸¸Å ¹Ùº¸½º·¯¿î »ç¶÷ÀÌ´Ù. ipchainsÀÇ °øµ¿ÀúÀÚÀÌ°í ÇöÀç ¸®´ª½º Ä¿³Î IP ¹æȺ®ÀÇ ¸ÞÀÎÅͳʷμ, ÇöÀçÀÇ ½Ã½ºÅÛ ¶§¹®¿¡ »ç¶÷µéÀÌ ¸¹Àº ¹®Á¦¸¦ °Ý¾ú´Ù´Â °Í »Ó¸¸ ¾Æ´Ï¶ó ±×µéÀÌ ½ÃµµÇÏ°í ÀÖ´Â °ÍÀÌ Á¡Á¡ ´õ ³ëÃâµÇ°í ÀÖ´Ù´Â °ÍÀ» ¾Ë¾Ò´Ù. 1.1.3. ±×°Ô ¿Ö ÆøÁÖÇÏÁÒ?ÀÌ~~¾ß!, Áö³ ÁÖ¿¡ ÀÌ ¹®¼¸¦ ºÃ¾î¾ß ÇÏ´Â °Çµ¥... »ç½Ç ³ª´Â ¿ì¸® ¸ðµÎ°¡ µÇ±â ¿øÇÏ´Â ±×·± ÈǸ¢ÇÑ ÇÁ·Î±×·¡¸Ó°¡ ¾Æ´Ï°í, ½Ã°£, Àåºñ ±×¸®°í ¿µ°¨µµ ºÎÁ·Çؼ ½Ã³ª¸®¿À Àüü¸¦ ÃæºÐÈ÷ Å×½ºÆ® Çغ¸Áö ¸øÇß´Ù. ±×Àú ³»°¡ Çغ» °ÍÀ̶ó°í´Â ¿©·¯ºÐµéÀÌ Âü¿©Çϱ⸦ ¹Ù¶ó´Â ¸¶À½¿¡¼ ¸¸µç testsuite¸¦ µ¹¸®´Â °ÍÀÌ °íÀÛÀ̾ú´Ù. 2. ¾îµð¼ ÃֽŠ¹öÀüÀ» ±¸ÇÏÁÒ?ÃÖ½ÅÀÇ HOWTO, userspace tools ±×¸®°í testsuite¸¦ °¡Áö°í ÀÖ´Â CVS ¼¹ö°¡ samba.org¿¡ ÀÖ´Ù. Åë»óÀûÀÎ ºê¶ó¿ì¡ ¹æ¹ýÀ¸·Î´Â, À¥ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÃÖ½ÅÀÇ ¼Ò½º¸¦ ¾òÀ¸·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù:
3. ³ÝÇÊÅÍ ¾ÆÅ°ÅØó³ÝÇÊÅÍ´Â ´ÜÁö ÇÁ·ÎÅäÄÝ ½ºÅÃÀÇ ´Ù¾çÇÑ Æ÷ÀÎÆ®¿¡ Á¸ÀçÇÏ´Â ÈÅÀÇ ¿¬¼ÓÀÏ »ÓÀÌ´Ù. ÀÌ»óÀûÀÎ IPv4ÀÇ ÁøÇà°æ·Î ´ÙÀ̾î±×·¥Àº ´ÙÀ½°ú °°´Ù.
´ÙÀ½À¸·Î, ÆÐŶÀº ¶ó¿ìÆà ÄÚµå·Î µé¾î°¡¸ç, ¿©±â¼ ÆÐŶÀÌ ´Ù¸¥ ÀÎÅÍÆäÀ̽º·Î ÇâÇÏ´ÂÁö ¶Ç´Â ·ÎÄà ÇÁ·Î¼¼½º·Î ÇâÇÏ´ÂÁö °áÁ¤µÈ´Ù. ÆÐŶÀÌ ¶ó¿ìÆÃµÉ ¼ö ¾ø´Â °æ¿ì, ¶ó¿ìÆà ÄÚµå´Â ÆÐŶÀ» ¹ö¸®±âµµ ÇÑ´Ù. ¸¸ÀÏ ÆÐŶÀÇ ¸ñÀûÁö°¡ µé¾î¿Â ¹Ú½º¶ó¸é, ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷Àº ÆÐŶÀ» ÇÁ·Î¼¼½º·Î Àü´ÞÇϱâ Àü¿¡ NF_IP_LOCAL_IN [2] ÈÅÀ» ´Ù½Ã Çѹø È£ÃâÇÏ°Ô µÈ´Ù. ¸¸ÀÏ ´Ù¸¥ ÀÎÅÍÆäÀ̽º·Î Àü´ÞÇÏ°íÀÚ ÇÑ´Ù¸é, ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷Àº NF_IP_FORWARD [3] ÈÅÀ» È£ÃâÇÑ´Ù. ±×¸®°í ³ª¼ ÆÐŶÀÌ ³ÝÆ®¿÷ ¶óÀÎÀ¸·Î º¸³»Áö±â Àü¿¡ ¸¶Áö¸· ³ÝÇÊÅÍ ÈÅÀÎ NF_IP_POST_ROUTING [4] ÈÅÀ¸·Î Àü´ÞµÈ´Ù. ·ÎÄÿ¡¼ »ý¼ºµÈ ÆÐŶ¿¡ ´ëÇؼ´Â NF_IP_LOCAL_OUT [5] ÈÅÀÌ È£ÃâµÈ´Ù. ÀÌ ¶§, ÀÌ ÈÅÀÌ È£ÃâµÈ ÈÄ ¶ó¿ìÆÃÀÌ ¹ß»ýÇÏ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ½ÇÁ¦·Î´Â ¶ó¿ìÆà Äڵ尡 ¼Ò½º IP ÁÖ¼Ò¿Í ¸î °¡Áö IP ¿É¼ÇÀ» È®ÀÎÇϱâ À§ÇØ ¶ó¿ìÆà Äڵ尡 ¸ÕÀú È£ÃâÀÌ µÈ´Ù. Áï, ¶ó¿ìÆÃÀ» º¯°æÇÏ°íÀÚ ÇÑ´Ù¸é, NAT Äڵ忡 µÇ¾î ÀÖ´Â °Íó·³ ¿©·¯ºÐ ½º½º·Î `skb->dst' Çʵ带 º¯°æÇؾ߸¸ ÇÑ´Ù. 3.1. ³ÝÇÊÅÍÀÇ ±âÃÊÀÌ Àý¿¡¼´Â IPv4¿¡ ´ëÇÑ ³ÝÇÊÅÍÀÇ ¿¹¸¦ º¸ÀÏ °ÍÀ̸ç, À̸¦ ÅëÇØ ¿©·¯ºÐµéÀº °¢°¢ÀÇ ÈÅÀÌ µ¿ÀÛÇÏ´Â ½ÃÁ¡À» ÀÌÇØÇÏ°Ô µÉ °ÍÀÌ´Ù. ÀÌ °ÍÀÌ ¹Ù·Î ³ÝÇÊÅÍÀÇ ±âÃÊÀÌ´Ù. Ä¿³Î ¸ðµâÀº ¾Õ¼ ¾ð±ÞÇÑ ¾î¶°ÇÑ ÈÅ¿¡ ´ëÇؼ ÀÀ´äÇÒ ¼ö ÀÖµµ·Ï µî·ÏÇÒ ¼ö ÀÖÀ¸¸ç, ¾î¶² ÇÔ¼ö¸¦ µî·ÏÇÑ ¸ðµâÀº ÈÅ ³»¿¡¼ ÇÔ¼öÀÇ ¿ì¼±¼øÀ§¿¡ ´ëÇÏ¿© ¹Ýµå½Ã ¸í½ÃÇÏ¿©¾ß ÇÑ´Ù. ÄÚ¾î ³×Æ®¿öÅ· ÄÚµå·ÎºÎÅÍ ³ÝÇÊÅÍ ÈÅÀÌ È£ÃâµÇ´Â °æ¿ì, °¢ Æ÷ÀÎÆ®¿¡ µî·ÏµÈ °¢°¢ÀÇ ¸ðµâÀº ¿ì¼±¼øÀ§¿¡ µû¶ó È£ÃâÀÌ µÇ°í, ÆÐŶÀ» ÀÚÀ¯·ÎÀÌ ´Ù·ê ¼ö ÀÖ´Ù. ¸ðµâÀº ³ÝÇÊÅÍ¿¡°Ô ´ÙÀ½ÀÇ ´Ù¼¸ °¡Áö µ¿ÀÛÀ» Çϵµ·Ï ¿äûÇÑ´Ù.
³ÝÇÊÅÍÀÇ ´Ù¸¥ ºÎºÐÀº µÚ¿¡ ³ª¿À´Â Ä¿³Î ºÎºÐ¿¡¼ ´Ù·ç±â·Î ÇÑ´Ù. ÀÌ»ó°ú °°Àº °ÍÀÌ ±âÃÊ°¡ µÇ¾î, ÀúÀÚµéÀº ´ÙÀ½ µÎ Àý¿¡ º¸ÀÎ °Í°ú °°Àº º¹ÀâÇÑ ÆÐŶ 󸮸¦ ¸¸µé ¼ö ÀÖ´Ù. 3.2. ÆÐŶ ¼±ÅÃ: IP TablesIP tableÀ» È£ÃâÇÏ´Â ÆÐŶ ¼±Åà ½Ã½ºÅÛÀº ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷À» ±â¹ÝÀ¸·Î ±¸¼ºµÇ¾úÀ¸¸ç, ÀÌ´Â È®À强À» °¡Áö°í ipchains·ÎºÎÅÍ Á÷Á¢ ¹°·Á¹ÞÀº À¯»êÀÌ´Ù.(ipchains´Â ipfwadmÀ¸·ÎºÎÅÍ ¹°·Á¹Þ°í, ipfwadmÀº BSDÀÇ ipfw IIRC·ÎºÎÅÍ ¹°·Á¹Þ¾Ò´Ù.) Ä¿³Î ¸ðµâÀº »õ·Î¿î Å×À̺íÀ» µî·ÏÇÒ ¼ö ÀÖÀ¸¸ç, ÀÓÀÇÀÇ ÆÐŶÀÌ ÁÖ¾îÁø Å×À̺íÀ» Åë°úÇϵµ·Ï ¿äûÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ÆÐŶ ¼±Åà ¹æ¹ýÀº ÆÐŶ ÇÊÅ͸µ(Áï `ÇÊÅÍ' Å×À̺í), ³×Æ®¿÷ ÁÖ¼Ò º¯È¯(`nat' Å×À̺í) ±×¸®°í Á¾ÇÕÀûÀÎ pre-route ÆÐŶ mangling(`mangling' Å×À̺í')¿¡ »ç¿ëÇÑ´Ù. ³ÝÇÊÅÍ¿¡ µî·ÏµÈ ÈÅÀº ´ÙÀ½°ú °°´Ù.(¿©±â¼´Â °¢°¢ÀÇ ÇÔ¼ö°¡ ½ÇÁ¦·Î È£ÃâµÇ´Â ¼ø¼·Î °¢°¢ÀÇ ÈÅ¿¡ ÀÖ´Â ÇÔ¼ö¿Í °°ÀÌ º¸¿´´Ù.)
3.2.1. ÆÐŶ ÇÊÅ͸µ`filter'¶ó´Â Å×À̺íÀº ÆÐŶÀ» Àý´ë·Î º¯°æ½ÃÅ°Áö ¾Ê°í ´ÜÁö °É·¯³»±â¸¸ ÇÑ´Ù. ipchains¿Í ºñ±³ÇßÀ» ¶§, iptables filterÀÇ ÀåÁ¡ Áß Çϳª´Â ÀÛ°í ºü¸£´Ù´Â °ÍÀ̸ç, NF_IP_LOCAL_IN°ú NF_IP_FORWARD, NF_IP_LOCAL_OUT ½ÃÁ¡¿¡¼ ³ÝÇÊÅÍ·Î ÈÅÅ·µÈ´Ù. ÀÌ´Â, ÁÖ¾îÁø ÆÐŶ¿¡ ´ëÇÏ¿© À̸¦ ÇÊÅ͸µ ÇÏ´Â À§Ä¡°¡ ¿ÀÁ÷ Çϳª »ÓÀ̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. °á±¹ »ç¿ëÀÚµéÀÌ ipchains¸¦ »ç¿ëÇÑ °Íº¸´Ù ´õ ´Ü¼øÇÏ°Ô ¸¸µé¸ç, ¶ÇÇÑ ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷ÀÌ NF_IP_FORWARD ÈÅ¿¡ ´ëÇÏ¿© ÀԷ°ú Ãâ·Â ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù´Â »ç½ÇÀº ´Ù¾çÇÑ ÇÊÅ͸µÀÌ ÈξÀ ´Ü¼øÇØÁø´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÁÖ: ÇÊÀÚ´Â ¾÷±×·¹À̵åÀÇ ÇÊ¿ä ¾øÀÌ ±âÁ¸ÀÇ ipfwadm°ú ipchains¸¦ »ç¿ë °¡´ÉÇϵµ·Ï ³ÝÇÊÅÍÀÇ ÃÖ»óÀ§¿¡ ¸ðµâ·Î¼ ipchains¿Í ipfwadmÀÇ Ä¿³ÎºÎºÐÀ» Æ÷Æà ÇÏ¿´´Ù. 3.2.2. NATÀÌ´Â `nat' Å×À̺íÀÇ ¿µ¿ªÀ¸·Î, µÎ °¡ÁöÀÇ ³ÝÇÊÅÍ ÈÅÀ¸·Î ÆÐŶÀ» Àü´ÞÇÑ´Ù. Áï, non-local ÆÐŶ¿¡ ´ëÇØ, °¢°¢ ¸ñÀûÁö¿Í ¼Ò½º Àüȯ¿¡ ´ëÇÏ¿© NF_IP_PRE_ROUTING°ú NF_IP_POST_ROUTING ÈÅÀÌ ¿Ïº®ÇÏ°Ô µ¿ÀÛÇÑ´Ù. CONFIG_IP_NF_NAT_LOCALÀÌ Á¤ÀÇµÈ °æ¿ì, NF_IP_LOCAL_OUT°ú NF_IP_LOCAL_IN ÈÅÀÌ ·ÎÄà ÆÐŶÀÇ ¸ñÀûÁö¸¦ ÀüȯÇϱâ À§ÇØ »ç¿ëµÈ´Ù. ÀÌ Å×À̺íÀº `filter' Å×À̺í°ú´Â ¾à°£ ´Ù¸£¸ç, »õ·Î¿î Ä¿³Ø¼ÇÀÇ Ã¹ ¹ø° ÆÐŶ¸¸ÀÌ Å×À̺í·Î Àü´ÞµÈ´Ù. µû¶ó¼ ÀÌ¿Í °°Àº Àü´ÞÀÇ °á°ú´Â µ¿ÀÏÇÑ Ä¿³Ø¼Ç¿¡ ÀÖ¾î¼ ÇâÈÄ Àü´ÞµÇ´Â ¸ðµç ÆÐŶ¿¡ Àû¿ëµÈ´Ù. 3.2.3. ¸Å½ºÄ¿·¹À̵ù, Æ÷Æ® Æ÷¿öµù, Åõ¸íÇÑ ÇÁ¶ô½ÃÇÊÀÚ´Â NAT¸¦ Ãâ¹ßÁö NAT(Áï ù ¹ø° ÆÐŶÀÌ Ãâ¹ßÁö¸¦ º¯°æÇÏ´Â °æ¿ì)¿Í ¸ñÀûÁö NAT(ù ¹ø° ÆÐŶÀÌ ¸ñÀûÁö¸¦ º¯°æÇÏ´Â °æ¿ì)·Î ±¸ºÐÇÏ¿´´Ù. ¸Å½ºÄ¿·¹À̵ùÀº Ãâ¹ßÁö NATÀÇ Æ¯º°ÇÑ °æ¿ìÀ̸ç, Æ÷Æ® Æ÷¿öµù°ú Åõ¸íÇÑ ÇÁ¶ô½Ã´Â ¸ñÀûÁö NATÀÇ Æ¯º°ÇÑ °æ¿ìÀÌ´Ù. ÀÌ¿Í °°Àº °ÍÀº ¼·Î µ¶¸³ÀûÀÎ ¿£Æ¼Æ¼¸¦ °¡Áö°í NAT ÇÁ·¹ÀÓ¿÷À» ÀÌ¿ëÇÏ¿© ±¸ÇöµÇ¾ú´Ù. 3.2.4. ÆÐŶ ¸Í±Û¸µ(packet mangling)ÆÐŶ ¸Í±Û¸µ Å×À̺í(`mangling' table)Àº ÆÐŶÀÇ Á¤º¸¸¦ ½ÇÁ¦·Î º¯°æÇϱâ À§ÇØ »ç¿ëµÇ¸ç, NF_IP_PRE_ROUTING°ú NF_IP_LOCAL_OUT ½ÃÁ¡¿¡¼ ³ÝÇÊÅÍ·Î ÈÅÅ·µÈ´Ù. 3.3. ¿¬°á ÃßÀû¿¬°áÃßÀû(connection tracking)Àº NATÀÇ ±âº»ÀÌÁö¸¸, ¸ðµâ·Î ºÐ¸®µÇ¾î ±¸ÇöµÈ´Ù. ÀÌ´Â ¿¬°áÃßÀûÀ» ´Ü¼øÇÏ°í ¸íÈ®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÆÐŶ ÇÊÅ͸µ Äڵ忡 ´ëÇÑ È®À强À» Á¦°øÇÑ´Ù.(`state' ¸ðµâ) 3.4. ±×ÀÌ¿Ü Ãß°¡µÈ »çÇ×»õ·Î¿î À¯¿¬¼º ¶§¹®¿¡ Á¤¸»·Î ¹«¼¿î ÀÏÀ» °ÞÀ» ±âȸ°¡ ¸¹¾ÆÁ³Áö¸¸, ´Ù¸¥ »ç¶÷µéÀÌ Çâ»óµÈ Äڵ带 ÀÛ¼ºÇϰųª ±âÁ¸ÀÇ Äڵ带 ¿ÏÀüÈ÷ ´ëüÇØ ¹ö¸± ¼ö ÀÖ´Â ±âȸ ¿ª½Ã ¸¹¾ÆÁ³´Ù. 1. ÇÁ·Î±×·¡¸ÓµéÀ» À§ÇÑ Á¤º¸ºñ¹ÐÀ» Çϳª ¸»¾¸µå¸®°Ú½À´Ï´Ù. ¹¹³ÄÇϸé, Á¦°¡ ±â¸£´Â ÇܽºÅÍ°¡ ¸ðµç Äڵ带 ÀÛ¼ºÇß½À´Ï´Ù. Àú´Â ´ÜÁö Àü´ÞÇÏ´Â ¿ªÇÒ¸¸ Çß°í, ¸ðµç °èȹÀº Á¦ ¾Ö¿Ïµ¿¹°ÀÌ Çß½ÀÁÒ. ±×·¯´Ï ¹ö±×°¡ »ý±â´õ¶óµµ Àú¸¦ ¿ø¸ÁÇÏÁö ¸¶½Ã°í, ±Í¿©¿î ÅкϼþÀ̸¦ ¿ø¸ÁÇϽñ⠹ٶø´Ï´Ù. 1.1. ip_tablesÀÇ ÀÌÇØiptables´Â ¸Þ¸ð¸® ³»¿¡ ÀÖ´Â ±ÔÄ¢ÀÇ ¸í¸íµÈ ¹è¿°ú °¢°¢ÀÇ ÈÅÀ¸·ÎºÎÅÍ ÆÐŶÀÌ Àü´ÞµÇ±â ½ÃÀÛÇØ¾ß ÇÏ´Â Á¤º¸¸¦ ´Ü¼øÈ÷ Á¦°ø¸¸ ÇÏ´Â °ÍÀÌ´Ù. ¾î¶² Å×À̺íÀÌ µî·ÏµÇ°í ³ª¸é, »ç¿ëÀÚ °ø°£Àº getsockopt()°ú setsockopt()¸¦ ÀÌ¿ëÇÏ¿© ±× ³»¿ëÀ» ÀÐ°í º¯°æÇÒ ¼ö ÀÖ´Ù. iptables´Â ¾î¶°ÇÑ ³ÝÇÊÅÍ ÈÅ¿¡µµ µî·ÏÇÏÁö ¾ÊÀ¸¸ç, À̸¦ ¼öÇàÇÏ´Â ´Ù¸¥ ¸ðµâ¿¡ ÀÇÁ¸ÇÏ°í ÀûÀýÈ÷ ÆÐŶÀ» ¸ðµâ¿¡ Àü´ÞÇÑ´Ù. ´Ù½Ã ¸»ÇØ, ÇϳªÀÇ ¸ðµâÀº ³ÝÇÊÅÍ ÈÅ°ú ip_tables¿¡ µû·Îµû·Î µî·ÏÇؾßÇÑ ÇÏ°í, ÈÅÀÌ ¹ß»ýÇϸé ip_tables¸¦ È£ÃâÇÏ´Â ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÑ´Ù. 1.1.1. ip_tablesÀÇ µ¥ÀÌÅÍ ±¸Á¶Æí¸®¼ºÀ» À§ÇØ, µ¿ÀÏÇÑ µ¥ÀÌÅÍ ±¸Á¶¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ °ø°£¿¡ ÀÇÇÑ ±ÔÄ¢°ú Ä¿³Î³»ºÎÀÇ ±ÔÄ¢À» Ç¥ÇöÇÏ¿´´Ù. ÀÌ·¸°Ô Ç¥ÇöµÈ µ¥ÀÌÅÍ ±¸Á¶ Áß ¾ÆÁÖ ÀϺκи¸ÀÌ Ä¿³Î ³»ºÎ¿¡¼ »ç¿ëµÈ´Ù. °¢°¢ÀÇ ±ÔÄ¢Àº ´ÙÀ½°ú °°Àº ºÎºÐÀ¸·Î ±¸¼ºµÈ´Ù.
`struct ipt_entry'´Â ´ÙÀ½°ú °°Àº Çʵ带 Æ÷ÇÔÇÑ´Ù.
`struct ipt_entry_match'¿Í `struct ipt_entry_target'Àº »ó´çÈ÷ À¯»çÇϸç, Àüü(IPT_ALIGNÀ¸·Î Á¤·ÄµÈ) ±æÀÌ Çʵå(°¢°¢ `match_size'¿Í `target_size')¿Í, match¿Í target(»ç¿ëÀÚ °ø°£¿¡ ´ëÇÑ) ¸íĪÀ» Æ÷ÇÔÇÏ´Â ±¸Á¶Ã¼, ±×¸®°í (Ä¿³Î¿¡ ´ëÇÑ) Æ÷ÀÎÅ͸¦ Æ÷ÇÔÇÑ´Ù. 1.1.2. ip_tablesÀÇ »ç¿ë°ú ÁøÇàÄ¿³ÎÀº ƯÁ¤ÇÑ ÈÅ¿¡ ÀÇÇØ Áö½ÃµÈ À§Ä¡¿¡¼ °üÂûÀ» ½ÃÀÛÇÏ¿©, ±×¿¡ °ü·ÃÇÑ ±ÔÄ¢À» °Ë»çÇÏ°í, `struct ipt_ip'ÀÇ element°¡ ÀÏÄ¡ÇÏ´Â °æ¿ì, Â÷·Ê·Î °¢°¢ÀÇ `struct ipt_entry_match'¸¦ °Ë»çÇÑ´Ù(match°¡ È£ÃâµÈ °÷°ú °ü·ÃÇÑ match functionÀ» ¼öÇàÇÑ´Ù). match functionÀÌ 0À» µ¹·ÁÁÖ´Â °æ¿ì, ÇöÀç ±ÔÄ¢¿¡ ´ëÇÑ ¹Ýº¹À» Áß´ÜÇÑ´Ù. `hotdrop' ÆĶó¹ÌÅÍ°¡ 1·Î ¼³Á¤µÈ °æ¿ì, ÇöÀç ÆÐŶÀº Áï½Ã Æó±âµÈ´Ù(tcp match ÇÔ¼ö¿Í °°Àº °÷¿¡¼ Á¶±ÝÀÌ¶óµµ ¼ö»óÇÑ ÆÐŶ¿¡ ´ëÇØ »ç¿ëÇÑ´Ù). ¼öÇà¹Ýº¹ÀÌ ³¡±îÁö ÁøÇàµÈ °æ¿ì, Ä«¿îÅÍ°¡ Áõ°¡ÇÏ°í, `struct ipt_entry_target'ÀÌ °Ë»çµÈ´Ù. Ç¥ÁØ Å¸±êÀÎ °æ¿ì, `verdict' Çʵ带 Àд´Ù. `verdict' Çʵ尡 À½ÀÎ °æ¿ì ÆÐŶÀÌ °áÁ¤µÈ °ÍÀ» ÀǹÌÇÏ°í ¾çÀÎ °æ¿ì´Â À̵¿ÇؾßÇÒ offsetÀ» ÀǹÌÇÑ´Ù. ÀÀ´äÀÌ ¾çÀÌ°í offsetÀÌ ´ÙÀ½ ±ÔÄ¢À» °¡¸®Å°Áö ¾ÊÀ¸¸é, `back' À̶ó´Â º¯¼ö°¡ ¼¼Æ®µÇ°í ÀÌÀüÀÇ `back' °ªÀÌ ÇöÀç ±ÔÄ¢ÀÇ `comefrom' Çʵ忡 ¼³Á¤µÈ´Ù. ºñÇ¥ÁØ Å¸±ê¿¡ ´ëÇؼ´Â target ÇÔ¼ö°¡ È£ÃâµÇ¾î, °áÁ¤À» ¾Ë·ÁÁÖ°Ô µÈ´Ù.(ºñÇ¥ÁØ Å¸±êÀº Á¤Àû ·çÇÁ °ËÃâ Äڵ带 À§¹ÝÇϱ⠶§¹®¿¡ À̵¿ÇÒ ¼ö ¾ø´Ù) ±× °áÁ¤Àº, ´ÙÀ½ ±ÔÄ¢À¸·Î °è¼Ó ÁøÇàÇϱâ À§Çؼ´Â IPT_CONTINUE°¡ µÉ °ÍÀÌ´Ù. 1.2. iptables È®ÀåÇϱâÀü ¹«ÁöÇÏ°Ô °ÔÀ¸¸¥ ³ÑÀ̶ó¼, iptables´Â ¾ó¸¶µçÁö È®Àå °¡´ÉÇÕ´Ï´Ù. ´Ù½Ã ¸»Çϸé Á¦ ¼ÕÀ» ¶°³ª ´Ù¸¥ »ç¶÷¿¡°Ô ³Ñ¾î°£, ¿ÀǼҽº ±× ÀÌ»óÀ̶ó´Â °ÅÁÒ. iptables¸¦ È®ÀåÇÑ´Ù´Â °ÍÀº ´ÙÀ½ÀÇ µÎ ºÎºÐÀ» Æ÷ÇÔÇÑ´Ù. Áï, »õ·Î¿î ¸ðµâÀ» ÀÛ¼ºÇÏ¿© Ä¿³ÎÀ» È®ÀåÇÏ´Â °Í°ú »õ·Î¿î °øÀ¯ ¶óÀ̺귯¸®¸¦ ÀÛ¼ºÇÏ¿© »ç¿ëÀÚ Â÷¿øÀÇ ÇÁ·Î±×·¥ÀÎ iptables¸¦ È®ÀåÇÏ´Â °ÍÀÌ´Ù. 1.2.1. Ä¿³Î¿¹Á¦¸¦ º¸½Å »ç¶÷µéÀº ¾Ë°ÚÁö¸¸, Ä¿³Î ¸ðµâÀ» ÀÛ¼ºÇÑ´Ù´Â °Í ÀÚü´Â »ó´çÈ÷ ´Ü¼øÇÏ´Ù. ÇÑ°¡Áö ¾Ë¾Æ¾ß ÇÒ °ÍÀº ¿©·¯ºÐÀÇ Äڵ尡 ÀçÁøÀÔ °¡´ÉÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾îº¸¸é, »ç¿ëÀÚ °ø°£À¸·ÎºÎÅÍ µé¾î¿À´Â ¾î¶² ÆÐŶÀÌ Á¸ÀçÇÒ ¼ö ÀÖÀ» °ÍÀ̸ç, µ¿½Ã¿¡ ¶Ç ´Ù¸¥ ÆÐŶÀÌ ÀÎÅÍ·´Æ®¿¡ ÀÇÇØ µé¾î ¿Ã ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸, Ä¿³Î 2.3.4À̻󿡼 SMP¸¦ »ç¿ëÇÒ °æ¿ì, CPU´ç ÇϳªÀÇ ÀÎÅÍ·´Æ®¿¡ ´ëÇØ ÇϳªÀÇ ÆÐŶ¸¸ Á¸ÀçÇÏ°Ô µÈ´Ù. ¿©·¯ºÐµéÀÌ ¾Ë¾Æ¾ß ÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.
¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ »õ·Î¿î match³ª target¿¡ ´ëÇÑ »õ·Î¿î °ø°£ ³»¿¡¼ÀÇ Æí¹ý »ç¿ë(Ä«¿îÅÍ ±â´É Á¦°ø °°Àº)¿¡ ´ëÇÑ ÇÑ°¡Áö °æ°í¸¦ ÇÏ°Ú´Ù. SMP ¸Ó½ÅÀÇ °æ¿ì °¢°¢ÀÇ CPU¿¡ ´ëÇÏ¿© Àüü Å×À̺íÀ» memcpy()¸¦ ÀÌ¿ëÇÏ¿© º¹»çÇÑ´Ù. Áï Áß½ÉÀÌ µÇ´Â Á¤º¸¸¦ º¸Á¸Çϱ⠹ٶõ´Ù¸é, `limit' match¿¡ »ç¿ëµÈ ¹æ¹ýÀ» ã¾ÆºÁ¾ß¸¸ ÇÒ °ÍÀÌ´Ù. 1.2.1.1. »õ·Î¿î Match ÇÔ¼ö»õ·Î¿î match functionÀº ÀϹÝÀûÀ¸·Î µ¶¸³¸ðµâ·Î ÀÛ¼ºÇÑ´Ù. ¹Ù²Ù¾î ¸»Çϸé, ºñ·Ï Åë»óÀûÀ¸·Î ÇÊ¿äÇÏÁö ¾Ê´õ¶óµµ, ÀÌ·¯ÇÑ ¸ðµâ¿¡ È®À强À» Á¦°øÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼, »ç¿ëÀÚµéÀÌ Á÷Á¢ ¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ ¸ðµâ°ú Åë½ÅÇÒ ¼ö ÀÖµµ·Ï ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷ÀÇ `nf_register_sockopt' ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÇϳªÀÇ ¹æ¹ýÀÌ µÉ °ÍÀÌ´Ù. ¶Ç ´Ù¸¥ ¹æ¹ýÀº ³ÝÇÊÅÍ ¸ðµâ°ú ip_tables¿¡ ±¸ÇöµÈ °Í°ú µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î, ´Ù¸¥ ¸ðµâÀÌ ÀÚ½ÅÀ» µî·ÏÇϵµ·Ï ½É¹úÀ» exportÇÏ´Â °ÍÀÌ´Ù. ¿©·¯ºÐ ÀÛ¼ºÇÑ »õ·Î¿î ÇÔ¼öÀÇ ÇÙ½ÉÀº ipt_register_match()·Î Àü´ÞµÇ´Â ipt_match ±¸Á¶Ã¼ÀÌ´Ù. ÀÌ ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°Àº Çʵ带 Æ÷ÇÔÇÑ´Ù.
1.2.1.2. »õ·Î¿î Targets¿©·¯ºÐÀÇ Å¸±êÀÌ ÆÐŶ(Çì´õ³ª ¹Ùµð)À» º¯°æ½ÃŲ´Ù¸é, ÆÐŶÀÌ º¹Á¦µÇ´Â ½ÃÁ¡¿¡¼ ÆÐŶÀ» º¹»çÇϱâ À§ÇÏ¿© skb_unshare()¸¦ È£ÃâÇؾ߸¸ ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é skbuff¿¡ º¹Á¦µÈ ÆÐŶÀÌ ÀÖ´Â ¾î¶°ÇÑ raw socketÀÌ¶óµµ º¯°æµÈ »çÇ×À» ¾Ë¾ÆÂ÷¸®°Ô µÈ´Ù. »õ·Î¿î targetÀº Åë»óÀûÀ¸·Î ´Üµ¶ ¸ðµâ·Î ÀÛ¼ºµÈ´Ù. `New Match Functions'ÀÇ Àý¿¡¼ ¾ð±ÞÇÑ ¹Ù¿Í µ¿ÀÏÇÑ ³»¿ëÀÌ ¿©±â¼µµ Àû¿ëµÈ´Ù. ¿©·¯ºÐÀÇ »õ·Î¿î targetÀÇ ÇÙ½ÉÀº ipt_register_target()À¸·Î Àü´ÞµÇ´Â struct ipt_targetÀ¸·Î, ÀÌ ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°Àº Çʵ带 °®°í ÀÖ´Ù.
1.2.1.3. »õ·Î¿î Tables¿©·¯ºÐµéÀÇ ¸ñÀû¿¡ ¸Â´Â »õ·Î¿î tableÀ» ÀÛ¼ºÇÒ ¼ö ÀÖÀ¸¸ç, À̸¦ À§Çؼ´Â `ipt_register_table()'ÇÔ¼ö¸¦ È£ÃâÇؾßÇÑ´Ù. ÀÌ ÇÔ¼ö´Â Àü´ÞÀÎÀÚ·Î `struct ipt_table'À» ¹ÞÀ¸¸ç ±× ±¸Á¶´Â ´ÙÀ½°ú °°´Ù.
1.2.2. »ç¿ëÀÚ°ø°£ µµ±¸(Userpace Tool)ÀÌÁ¦ ¿©·¯ºÐµéÀÌ Á÷Á¢ Ä¿³Î ¸ðµâÀ» ÀÛ¼ºÇß°í, »ç¿ëÀÚ °ø°£¿¡¼ ÀÌ¿¡ ´ëÇÑ ¿É¼ÇÀ» Á¶Á¤Çϱ⸦ ¿øÇÒ °ÍÀÌ´Ù. ÇÊÀÚ´Â °¢°¢ È®ÀåµÈ ¹öÀü¿¡ ´ëÇÏ¿© »õ·ÎÀÌ ÆÄ»ýµÈ ¹öÀüÀ» ¸¸µå´Â °Íº¸´Ù´Â ¾ÆÁÖ ÃÖ½ÅÀÇ 90³â´ë ±â¼úÀ» »ç¿ëÇÑ´Ù. Áï furbiesÀÌ´Ù. ½ý¸®... °øÀ¯¶óÀ̺귯¸®¸¦ ¸»ÇÏ´Â °ÍÀÌ´Ù. »õ·Î¿î Å×À̺íÀ» »ç¿ëÇÏ°íÀÚ ÇÏ´Â °æ¿ì iptables¸¦ È®ÀåÇÒ ÇÊ¿ä´Â ¾ø°í, `-t' ¿É¼Ç¸¸ ÁÖ¸é µÈ´Ù. °øÀ¯¶óÀ̺귯¸®´Â `_init()'ÇÔ¼ö¸¦ Æ÷ÇÔÇؾßÇϸç, ÀÌ ÇÔ¼ö´Â ¸ðµâÀÌ ·Îµù µÇ´Â ½ÃÁ¡¿¡¼ ÀÚµ¿À¸·Î È£ÃâµÈ´Ù. ¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ °øÀ¯¶óÀ̺귯¸®°¡ »õ·Î¿î match³ª »õ·Î¿î targetÀ» Æ÷ÇÔÇÏ´À³Ä¿¡ µû¶ó _init()ÇÔ¼ö°¡ `register_match()'³ª `register_target()'ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. °øÀ¯¶óÀ̺귯¸®¸¦ Á¦°øÇؾßÇÒ ÇÊ¿äµµ ÀÖÀ¸¸ç, ±¸Á¶Ã¼ÀÇ ÀϺθ¦ ÃʱâÈÇϰųª Ãß°¡ ¿É¼ÇÀ» Á¦°øÇÏ´Â µ¥ °øÀ¯¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. ÇÊÀÚ´Â °øÀ¯¶óÀ̺귯¸®°¡ ¾Æ¹«°Íµµ ¾È ÇÒÁö¶óµµ °øÀ¯¶óÀ̺귯¸®´Â ¶óÀ̺귯¸®°¡ ¾øÀ» ¶§ ¹ß»ýÇÏ´Â ¹®Á¦¸¦ ÁÙÀÏ ¼ö Àֱ⠶§¹®¿¡ ¹Ýµå½Ã °øÀ¯¶óÀ̺귯¸®¸¦ »ç¿ëÇϱ⸦ ÁÖÀåÇÑ´Ù. `iptables.h' Çì´õ¿¡ À¯¿ëÇÑ ÇÔ¼öµéÀÌ Á¤ÀǵǾî ÀÖÀ¸¸ç, ±×Áß ´ÙÀ½°ú °°Àº °ÍµéÀÌ »ó´çÈ÷ À¯¿ëÇÏ´Ù.
1.2.2.1. »õ·Î¿î Match ÇÔ¼ö¿©·¯ºÐµéÀÌ ÀÛ¼ºÇÑ °øÀ¯¶óÀ̺귯¸®ÀÇ _init() ÇÔ¼ö´Â `register_match()'¿¡ Á¤Àû ±¸Á¶Ã¼ÀÎ `struct iptables_match'¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁØ´Ù. ÀÌ ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°Àº Çʵ带 Æ÷ÇÔÇÑ´Ù.
1.2.2.2. »õ·Î¿î Targets¿©·¯ºÐÀÇ °øÀ¯¶óÀ̺귯¸®ÀÇ _init() ÇÔ¼ö´Â `register_target()' ÇÔ¼ö·Î Á¤ÀûÀ¸·Î ¼±¾ðµÈ `struct iptables_target'¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Àü´ÞÇϸç, ÀÌ´Â ¾Õ¼ ¾ð±ÞÇÑ iptables_match ±¸Á¶Ã¼¿Í À¯»çÇÑ Çʵ带 Æ÷ÇÔÇÑ´Ù. 1.2.3. `libiptc' »ç¿ëÇϱâlibiptc´Â iptable Á¦¾î ¶óÀ̺귯¸®·Î iptable Ä¿³Î ¸ðµâ¿¡¼ ·êÀ» ³ª¿ÇÏ°í ó¸®Çϱâ À§ÇÏ¿© ¼³°èµÇ¾ú´Ù. ÀÌ ¶óÀ̺귯¸®°¡ ÇöÀç »ç¿ëµÇ°í ÀÖ´Â °÷Àº iptables ÇÁ·Î±×·¥»ÓÀÌÁö¸¸, ´Ù¸¥ ÅøÀ» °³¹ßÇÏ´Â °÷¿¡µµ ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§Çؼ´Â ·çÆ® ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ÇÔ¼ö°¡ Á¦°øÇϴ ǥÁØ targetÀº ACCEPT, DROP, QUEUE, RETURN, ±×¸®°í JUMPÀÌ´Ù. ACCEPT, DROP, QUEUE´Â NF_ACCEPT, NF_DROP°ú NF_QUEUE·Î ¹ø¿ªµÇ°í, RETURNÀº ip_tables°¡ ó¸®Çϴ Ưº°ÇÑ IPT_RETURN °ªÀ¸·Î, JUMP´Â chain nameÀ¸·ÎºÎÅÍ table³»ÀÇ ½ÇÁ¦ ¿ÀÇÁ¼ÂÀ¸·Î ¹ø¿ªµÈ´Ù. `iptc_init()' ÇÔ¼ö°¡ È£ÃâµÇ¸é, counter¸¦ Æ÷ÇÔÇÑ Å×À̺íÀÌ ÀÐÇôÁö°í, ÀÌ Å×À̺íÀº `iptc_insert_entry()', `iptc_replace_entry()', `iptc_append_entry()', `iptc_delete_entry()', `iptc_delete_num_entry()', `iptc_flush_entries()', `iptc_zero_entries()', `iptc_create_chain()', `iptc_delete_chain()' ±×¸®°í `iptc_set_policy()' ÇÔ¼ö¿¡ ÀÇÇØ Ã³¸®µÈ´Ù. `iptc_commit()' ÇÔ¼ö°¡ È£ÃâµÇ±â Àü±îÁö´Â Å×À̺íÀÇ º¯È°¡ ±â·ÏµÇÁö ¾Ê´Â´Ù. µû¶ó¼, ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â µÎ ¸íÀÇ À¯Àú°¡ µ¿ÀÏÇÑ chainÀ» Á¶ÀÛÇÏ°íÀÚ Çϱâ À§ÇØ ·¹À̽º(race)¸¦ ÇÏ´Â °æ¿ì°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¸ç, À̸¦ ¸·±â À§Çؼ´Â lockingÀ» »ç¿ëÇØ¾ß ÇÏÁö¸¸, ÇöÀç´Â ±¸ÇöµÇ¾î ÀÖÁö ¾Ê´Ù. ÇÏÁö¸¸, counters¿¡ ´ëÇؼ´Â ·¹À̽º(race)°¡ ¹ß»ýÇÏÁö ¾ÊÀ¸¸ç, ÀÌ´Â tablesÀÇ Àбâ¿Í ¾²±â Áß¿¡ ¹ß»ýÇÏ´Â countersÀÇ Áõ°¡°¡ »õ·Î¿î table¿¡ ³ªÅ¸³ª´Â ¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© counter°¡ Ä¿³Î¿¡¼ ±â·ÏµÇ±â ¶§¹®ÀÌ´Ù. ¿©±â¿¡´Â ´ÙÀ½°ú °°Àº ´Ù¾çÇÑ helper ÇÔ¼ö°¡ ÀÖ´Ù.
1.3. NATÀÇ ÀÌÇØÀÌÁ¦ Ä¿³ÎÀÇ NAT(Network Address Translation)±îÁö ¿À¼Ì±º¿ä. ¿©±â¼ Á¦°øµÇ´Â ÇϺα¸Á¶´Â È¿À²º¸´Ù´Â ¿Ïº®¼º¿¡ ÁßÁ¡À» µÎ°í ¼³°èµÈ °ÍÀ̸ç, ÇâÈÄ °³Á¶¸¦ ÅëÇØ È¿À²¼ºÀÌ ÇöÀúÇÏ°Ô Áõ°¡µÉÁöµµ ¸ð¸¨´Ï´Ù. ÇöÀç Àú´Â ÀÌ ³ÑÀÌ µ¿ÀÛÇÑ´Ù´Â °Í¸¸À¸·Îµµ ÇູÇÕ´Ï´Ù. NAT´Â ÆÐŶÀ» ÀüÇô ó¸®ÇÏÁö ¾Ê´Â connection tracking°ú NAT ÄÚµå ÀÚü·Î ºÐ¸®µÇ¾ú´Ù. connection tracking ¿ª½Ã iptables ¸ðµâ¿¡¼ »ç¿ëÇϱâ À§ÇØ ¼³°èµÇ¾úÀ¸¸ç, µû¶ó¼ NAT°¡ °ü½ÉÀ» µÎÁö ¾Ê´Â »óÅÂ(state)¿¡ ´ëÇؼ ¹Ì¹¦ÇÑ Â÷À̸¦ º¸ÀÌ°Ô µÈ´Ù. 1.3.1. ¿¬°á ÃßÀû¿¬°áÃßÀû(connection tracking)Àº ¿ì¼± ¼øÀ§°¡ ³ôÀº NF_IP_LOCAL_OUT°ú NF_IP_PRE_ROUTING ÈÅÀ¸·Î ÈÅÅ· µÇ¸ç, ÀÌ´Â ÆÐŶÀÌ ½Ã½ºÅÛÀ¸·Î ÁøÀÔÇϱâ Àü ±× ÆÐŶÀ» »ìÆ캸±â À§ÇÔÀÌ´Ù. skb¿¡ ÀÖ´Â nfct Çʵå´Â struct ip_conntrackÀÇ ³»ºÎ¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀ̸ç, ¹è¿ infos[] Áß ÇÑ °÷¿¡ Á¸ÀçÇÑ´Ù. Áï, ÀÌ ¹è¿³»ÀÇ ¾î¶² ¿ä¼Ò¸¦ °¡¸®Å°°Ô ÇÔÀ¸·Î½á skbÀÇ »óŸ¦ ¸»ÇÒ ¼ö ÀÖ´Ù. ´Ù½Ã ¸»ÇØ, ÀÌ Æ÷ÀÎÅÍ´Â state structure¿Í ±× »óÅ¿¡ ´ëÇÑ skbÀÇ °ü°è ¸ðµÎ¸¦ ¾Ë·ÁÁÖ°Ô µÈ´Ù. `nfct' Çʵ带 ÃßÃâÇÏ´Â ÃÖ¼±ÀÇ ¹æ¹ýÀº `ip_conntrack_get()'À» È£ÃâÇÏ´Â °ÍÀ¸·Î, `nfct' ÇÊÆ®°¡ ¼¼Æ®µÇ¾î ÀÖÀ¸¸ç connection Æ÷ÀÎÅ͸¦ µ¹·ÁÁÖ°í ±×·¸Áö ¾ÊÀº °æ¿ì´Â NULLÀ» µ¹·ÁÁÖ¸ç, ÇöÀçÀÇ ¿¬°á¿¡ ´ëÇÑ ÆÐŶÀÇ °ü°è¸¦ Ç¥ÇöÇÏ´Â ctinfoÀ» ä¿î´Ù. `nfct'ÀÇ °ªµéÀº ¼öÄ¡È(enumerate)µÇ¾î ÀÖÀ¸¸ç, ´ÙÀ½°ú °°Àº °ªÀ» °®´Â´Ù.
1.4. Connection Tracking/NAT È®ÀåÇϱâÀÌ ¹æ½ÄÀº ¿©·¯ °¡Áö ÇÁ·ÎÅäÄÝ°ú ¼·Î ´Ù¸¥ ¸ÊÇΠŸÀÔÀ» Á¶ÀýÇϱâ À§ÇÏ¿© ¼³°èµÈ °ÍÀ¸·Î, ¸ÊÇΠŸÀÔ Áß ÀϺδ ºÎÇϺлê(load-balancing)À̳ª fail-over ¸ÊÆØ Å¸ÀÔó·³ »ó´çÈ÷ ±¸Ã¼ÀûÀÎ °Íµµ ÀÖ´Ù. ³»ºÎÀûÀ¸·Î´Â, connection trackingÀº ÀÏÄ¡ÇÏ´Â ·êÀ̳ª bindingÀ» °Ë»öÇϱâ Àü¿¡ ÆÐŶÀ» ``tuple''·Î º¯È¯½ÃŲ´Ù. ¿©±â¼ ``tuple''À̶õ ÆÐŶ Áß °ü½ÉÀÇ ´ë»óÀÌ µÇ´Â ºÎºÐÀ» ¸»ÇÑ´Ù. ``tuple''Àº ó¸® °¡´ÉÇÑ ºÎºÐ°ú ±×·¸Áö ¸øÇÑ ºÎºÐÀ¸·Î ±¸ºÐµÇ¸ç, °¢°¢ ``src''¿Í ``dst''¶ó°í ÇÑ´Ù. ÀÌ´Â Source NATÀÇ ÀÔÀå¿¡¼ ù ¹ø° ÆÐŶ¿¡ ´ëÇÑ °üÁ¡ÀÌ´Ù. µ¿ÀÏÇÑ ¹æÇâ¿¡ ÀÖ¾î µ¿ÀÏÇÑ ÆÐŶ ½ºÆ®¸²ÀÇ °¢ ÆÐŶ¿¡ ´ëÇÑ tupleÀº ¸ðµÎ µ¿ÀÏÇÏ´Ù. ¿¹¸¦ µé¾îº¸¸é, TCP ÆÐŶÀÇ tupleÀº ó¸® °¡´ÉÇÑ ºÎºÐÀ» Æ÷ÇÔÇÏ´Â µ¥ ÀÌ´Â source IP¿Í source PORTÀ̸ç, ó¸® ºÒ°¡´ÉÇÑ ºÎºÐÀº ¸ñÀûÁö IP¿Í ¸ñÀûÁö portÀÌ´Ù. ó¸® °¡´ÉÇÑ ºÎºÐ°ú ±×·¸Áö ¸øÇÑ ºÎºÐÀº ¹Ýµå½Ã °°Àº ŸÀÔÀ̾î¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ´Ù½Ã ¸»Çϸé ICMP ÆÐŶÀÇ tupleÀº source IP¿Í ICMP port °°Àº ó¸® °¡´ÉÇÑ ºÎºÐÀ» Æ÷ÇÔÇϸç, ó¸® ºÒ°¡´ÉÇÑ ºÎºÐÀº ¸ñÀûÁö IP¿Í ICMP ŸÀÔ°ú ÄÚµåÀÌ´Ù. °¢°¢ÀÇ ÆÐŶÀº inverse¸¦ °¡Áö°í ÀÖÀ¸¸ç, ÀÌ´Â ½ºÆ®¸²¿¡ ÀÖ¾î¼ ÀÀ´äÆÐŶÀÇ tupleÀÌ´Ù. À̸¦Å׸é, icmp id°¡ 12345ÀÌ°í 192.168.1.1¿¡¼ 1.2.3.4·Î °¡´Â ICMP ping ÆÐŶÀÇ inverse´Â icmp id 12345ÀÌ°í 1.2.3.4¿¡¼ 192.168.1.1ÀÌ µÈ´Ù. `struct ip_conntrack_tuple'·Î Ç¥ÇöµÇ´Â tupleÀº ³Î¸® »ç¿ëµÇ¸ç, ½ÇÁ¦·Î ÆÐŶÀÌ µé¾î¿À´Â ÈÅ°ú µð¹ÙÀ̽º¸¦ Æ÷ÇÔÇÏ¿© ÆÐŶ¿¡ ´ëÇÑ ¿ÏÀüÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù. ´ëºÎºÐÀÇ tupleÀº `struct ip_conntrack_tuple_hash'¿¡ Æ÷ÇԵǸç, ´õºí¸µÅ©µå ¸®½ºÆ®¿Í tupleÀÌ Æ÷ÇÔµÈ connection¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Ãß°¡ÇÑ´Ù. connectionÀº `struct ip_conntrack'¿¡ ÀÇÇØ Ç¥ÇöµÇ¸ç, ÀÌ ±¸Á¶Ã¼´Â `struct ip_conntrack_tuple_hash'Çʵ带 µÎ°³ Æ÷ÇÔÇÑ´Ù. Çϳª´Â ¿øº» ÆÐŶ¿¡ ´ëÇÑ ¹æÇâ(tuplehash[IP_CT_DIR_ORIGINAL])À̸ç, ´Ù¸¥ Çϳª´Â ÀÀ´ä¹æÇâ¿¡ ´ëÇÑ ÆÐŶ(tuplehash[IP_CT_DIR_REPLY])¿¡ ´ëÇÑ °ÍÀÌ´Ù. ¾Æ¹«Æ°, NAT Äڵ尡 Çϴ ù ¹ø° ÀÏÀº skbuffÀÇ nfct Çʵ带 ÂüÁ¶ÇÏ¿© connection tracking ÄÚµå·Î tupleÀ» ÃßÃâÇÒ ¼ö ÀÖ´Â Áö È®ÀÎÇÏ°í ÀÌ¹Ì Á¸ÀçÇÏ´Â connectionÀ» ã´Â °ÍÀÌ´Ù. ÀÌ°ÍÀÌ ÀǹÌÇÏ´Â ¹Ù´Â ÇöÀç connectionÀÌ »õ·ÎÀÌ ½ÃµµµÈ °ÍÀÎÁö ¾Æ´ÑÁö, ±×¸®°í ¾î¶² ¹æÇâÀÎÁö¸¦ ¾Ë·Á ÁÖ´Â °ÍÀÌ´Ù. ¿©±â¼ ÈÄÀÚÀÎ °æ¿ì, ±×·¯´Ï±î ÀÌ¹Ì ¿¬°áÀÌ µÈ »óŶó¸é, ÀÌÀü¿¡ °áÁ¤µÈ 󸮹æ¹ýÀÌ Àû¿ëµÈ´Ù. »õ·Î¿î connectionÀÌ ½ÃÀ۵Ǹé, Ç¥ÁØ iptable ÁøÇà ¸ÞÄ¿´ÏÁòÀ» ÀÌ¿ëÇÏ¿© tuple¿¡ ´ëÇÑ ·êÀ» `nat' table¿¡¼ °Ë»öÇÑ´Ù. ÀÌ ¶§ ·êÀÌ ÀÏÄ¡ÇÏ´Â °æ¿ì, º¸ÅëÀÇ °æ¿ì ÁøÇà¹æÇâ°ú ÀÀ´ä¹æÇâ ¸ðµÎ¿¡ ´ëÇÏ¿© 󸮸¦ ÃʱâÈÇÑ´Ù. Áï, ±â´ëÇÏ°í ÀÖ´Â ÀÀ´äÀÌ º¯°æµÇ¾î ¹ö·È´Ù´Â °ÍÀ» connection-tracking Äڵ尡 ¾Ë ¼ö ÀÖ°Ô µÈ´Ù. ±×¸®°í ³ª¼ ¾Õ¼ ¾ð±ÞÇÑ ¹Ù¿Í °°ÀÌ Ã³¸®µÈ´Ù. ¸¸ÀÏ Àû¿ëÇÒ ·êÀÌ ¾ø´Â °æ¿ì `null' ¹ÙÀεùÀÌ »ý¼ºµÈ´Ù. ÀÌ ¹ÙÀεùÀÌ ÆÐŶ°ú ¸ÊÇεÇÁö ¾ÊÁö¸¸, ±âÁ¸ÀÇ ´Ù¸¥ ½ºÆ®¸²°ú ¸ÊÇεÇÁö ¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¾î¶² °æ¿ì´Â null ¹ÙÀεùÀÌ »ý¼ºµÉ ¼ö ¾ø´Â °æ¿ìµµ ¹ß»ýÇϸç ÀÌ °æ¿ì´Â null ¹ÙÀεùÀ» ±âÁ¸ÀÇ ½ºÆ®¸²À¸·Î ÀÌ¹Ì ¸ÊÇÎÀ» Çعö·È±â ¶§¹®ÀÌ´Ù. ÀÌ·¯ÇÑ °æ¿ì´Â Á¤»óÀûÀÎ `null' ¹ÙÀεùÀ̶ó ÇÏ´õ¶óµµ per-protocolÀ¸·Î À̸¦ »õ·Î ¸ÊÇÎÇØ¾ß ÇÒ °ÍÀÌ´Ù. 1.4.1. Ç¥ÁØ NAT TargetsNAT targetÀº 'nat' Å×ÀÌºí ³»¿¡¼¸¸ »ç¿ëÇÑ´Ù´Â °Í¸¸ Á¦¿ÜÇϸé, ¿©Å¸ÀÇ iptables target extension°ú »ó´çÈ÷ À¯»çÇÏ´Ù. SNAT¿Í DNAT ¸ðµÎ ºÎ°¡ µ¥ÀÌÅͷμ `struct ip_nat_multi_range'¸¦ ÃëÇÏ°í, ÀÌ µ¥ÀÌÅÍ´Â ¸ÊÇÎÀ¸·Î ¹ÙÀεù ÇÏ´Â ÁÖ¼ÒÀÇ ¹üÀ§¸¦ ¸í½ÃÇÏ°Ô µÈ´Ù. ¹üÀ§ ¿ä¼ÒÀÎ `struct ip_nat_range'´Â ÃÖ¼Ò/ÃÖ´ë IP¿Í ÃÖ´ë/ÃÖ¼Ò ÇÁ·ÎÅäÄÝ °ª(¿¹:TCP Æ÷Æ®)À¸·Î ±¸¼ºµÈ´Ù. Ç÷¢À» À§ÇÑ °ø°£µµ ÀÖÀ¸¸ç, ¾î¶² Ç÷¢Àº IPÁÖ¼Ò°¡ ¸ÊÆØµÉ ¼ö ÀÖ´Â Áö ¾ø´ÂÁö ¾Ë·ÁÁÖ°í, ¾î¶² °ÍÀº ¹üÀ§ÀÇ protocol-specific ºÎºÐÀÌ À¯È¿ÇÑÁö ¾Ë·ÁÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. ´ÙÁß ¹üÀ§´Â `struct ip_nat_range'ÀÇ ¹è¿À̸ç, ¹üÀ§¸¦ ``1.1.1.1-1.1.1.2 ports 50-55 AND 1.1.1.3 port 80''°ú °°ÀÌ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. 1.4.2. »õ·Î¿î Protocols1.4.2.1. Ä¿³Î ³»ºÎ»õ·Î¿î ÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇÑ´Ù´Â °ÍÀº tupleÀÇ Ã³¸®°¡´É ºÎºÐ°ú ±×·¸Áö ¸øÇÑ ºÎºÐÀ» °áÁ¤ÇÏ´Â °ÍÀÌ´Ù. tuple¿¡ Æ÷ÇÔµÈ ¸ðµç °ÍÀº ½ºÆ®¸²À» ±¸º°ÇÒ ¼ö Àִ Ư¼ºÀ» °¡Áö°í ÀÖ´Ù. tupleÀÇ Ã³¸®°¡´ÉºÎºÐÀº NAT¸¦ Àû¿ëÇÒ ¼ö ÀÖ´Â ºÎºÐÀ¸·Î TCPÀÎ °æ¿ì´Â ¼Ò½º Æ÷Æ®°¡ µÇ¸ç, ICMPÀÎ °æ¿ì´Â icmp ID°¡ µÈ´Ù. Áï, ½ºÆ®¸² ±¸º°ÀÚ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ¸»ÀÌ´Ù. ó¸® ºÒ°¡´ÉÇÑ ºÎºÐÀº ÆÐŶÀÇ ³ª¸ÓÁö ºÎºÐÀ¸·Î ½ºÆ®¸²À» ±¸º°ÇÒ ¼ö ÀÖÁö¸¸, ÀÌ°ÍÀ» ¸¶À½´ë·Î ó¸®ÇÒ ¼ö ¾ø´Ù. (¿¹: TCP ¸ñÀûÁö Æ÷Æ®, ICMP ŸÀÔ) ÇÑ°¡Áö°¡ °áÁ¤µÇ¾úÀ¸¸é, connection tracking Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ°í, `ip_conntrack_register_protocol()'·Î Àü´ÞÇϱâ À§ÇÏ¿© `ip_conntrack_protocol' ±¸Á¶Ã¼¸¦ ´Ù·ç¾î¾ß ÇÒ °ÍÀÌ´Ù. `struct ip_conntrack_protocol'ÀÇ Çʵå´Â ´ÙÀ½°ú °°´Ù.
Äڵ带 ÀÛ¼ºÇÏ°í »õ·Î¿î ÇÁ·ÎÅäÄÝ¿¡ ´ëÇÑ ÃßÀûÀ» Å×½ºÆ® ÇßÀ¸¸é, ÀÌÁ¦´Â NAT¿¡°Ô ÀÌ·¯ÇÑ °ÍÀ» ¾î¶»°Ô Çؼ®ÇÒ °ÍÀÎÁö¸¦ ¾Ë·ÁÁÖ¾î¾ß ÇÑ´Ù. ´Ù½Ã ¸»ÇÏ¸é »õ·Î¿î ¸ðµâÀ» ÀÛ¼ºÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. Áï, NAT Äڵ忡 ´ëÇÑ È®Àå ¹× `ip_nat_protocol_register()'·Î Àü´ÞÇÏ°íÀÚ ÇÏ´Â `ip_nat_protocol' ±¸Á¶Ã¼¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.
1.4.3. »õ·Î¿î NAT Targets¸Å¿ì Èï¹Ì·Î¿î ºÎºÐÀ¸·Î, »õ·Î¿î ¸ÊÇΠŸÀÔÀ» Á¦°øÇÏ´Â »õ·Î¿î NAT targetÀ» ¿©·¯ºÐµéÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ±âº» ÆÐÅ°Áö¿¡´Â Ãß°¡ targetÀº MASQUERADE¿Í REDIRECTÀ¸·Î »õ·Î¿î NAT targetÀ» ÀÛ¼ºÇϱ⿡ ÃæºÐÇϸ® ¸¸Å ½±°Ô ¼³¸íµÇ¾î ÀÖ´Ù. À§ÀÇ µÎ targetÀº ´Ù¸¥ iptables targetó·³ ÀÛ¼ºµÇ¾î ÀÖÁö¸¸, ³»ºÎÀûÀ¸·Î´Â connectionÀ» ÃßÃâÇÏ°í `ip_nat_setup_info()'¸¦ È£ÃâÇÑ´Ù. 1.4.4. ÇÁ·ÎÅäÄÝ µµ¿ì¹Ì(protocol helper)connection tracking¿¡ ´ëÇÑ protocol helper´Â connection code°¡ ´ÙÁß ³×Æ®¿÷ connectionÀ» »ç¿ëÇÏ´Â ÇÁ·ÎÅäÄÝÀ» ¾Ë¾ÆÂ÷¸®°í Ãʱ⠿¬°á¿¡ °ü·ÃµÈ `child' connectionÀ» Ç¥½ÃÇÒ ¼ö ÀÖµµ·Ï Çϸç, ÀϹÝÀûÀ¸·Î ÀÌ¿Í °°Àº °úÁ¤Àº data stream ¿ÜºÎÀÇ °ü·ÃµÈ ÁÖ¼Ò¸¦ ÀÐÀ½À¸·Î½á ¼öÇàµÈ´Ù. NAT¿¡ ´ëÇÑ protocol helper´Â ´ÙÀ½°ú °°Àº µÎ °¡Áö ÀÛ¾÷À» ¼öÇàÇÑ´Ù. ù °·Î´Â NAT Äڵ尡 µ¥ÀÌÅÍ ½ºÆ®¸²À» Æ÷ÇÔÇÏ´Â ÁÖ¼Ò¸¦ º¯°æÇϵµ·Ï µ¥ÀÌÅÍ ½ºÆ®¸²À» ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. µÎ ¹ø°·Î´Â µ¥ÀÌÅÍ ½ºÆ®¸²ÀÌ µé¾î¿Ã ¶§ ±×¿Í ¿¬°üµÈ connection¿¡ ´ëÇÏ¿© ¿ø·¡ÀÇ connectionÀ» ±âÃÊ·Î ÇÏ¿© NAT¸¦ ¼öÇàÇÑ´Ù. 1.4.5. ¿¬°á ÃßÀû µµ¿ì¹Ì ¸ðµâ(Connection Tracking Helper Modules)1.4.5.1. ¼³¸íconnection tracking ¸ðµâÀÇ ÀÓ¹«´Â ¾î¶² ÆÐŶÀÌ ÀÌ¹Ì ÀÌ·ç¾îÁø connection¿¡ ¼ÓÇØ ÀÖ´Â Áö¸¦ ¸í½ÃÇÏ´Â °ÍÀ¸·Î, ´ÙÀ½°ú °°Àº ÀÏÀ» ÇÑ´Ù.
1.4.5.2. »ç¿ë°¡´ÉÇÑ ±¸Á¶Ã¼¿Í ÇÔ¼ö¿©·¯ºÐµéÀÌ ÀÛ¼ºÇÑ Ä¿³Î ¸ðµâÀÇ init ÇÔ¼ö´Â `struct ip_conntrack_helper'¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ °¡Áö°í `ip_conntrack_helper_register()' ÇÔ¼ö¸¦ È£ÃâÇؾ߸¸ ÇÑ´Ù. ÀÌ ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°Àº Çʵ带 °¡Áö°í ÀÖ´Ù.
1.4.6. conntrack µµ¿ì¹Ì ¸ðµâÀÇ ¿¹Á¦
1.4.7. NAT µµ¿ì¹Ì ¸ðµâ1.4.7.1. ¼³¸íNAT helper ¸ðµâÀº ƯÁ¤ ÀÀ¿ëÇÁ·Î±×·¥¿¡ ÀûÇÕÇÑ NAT Çڵ鸵À» ¼öÇàÇÑ´Ù. ÀÌ ÇÔ¼ö´Â µ¥ÀÌÅÍ¿¡ ´ëÇÑ on-the-fly 󸮸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. FTPÀÇ Æ÷Æ® ¸í·ÉÀ» °í·ÁÇغ¸ÀÚ. ÀÌ ¶§, Ŭ¶óÀ̾ðÆ®´Â ¼¹ö¿¡°Ô ¾î¶² IP¿Í Æ÷Æ®·Î ¿¬°áÀ» ÇØ¾ß ÇÏ´Â °¡¸¦ ¹°¾îº¸°Ô µÇ°í, FTP Á¦¾î ¿¬°á¿¡¼ PORT ¸í·ÉÀÌ ¼öÇàµÈ ÈÄ FTP helper ¸ðµâÀº IP/port¸¦ ±³Ã¼ÇÑ´Ù. TCP¸¦ ´Ù·ç´Â °æ¿ì´Â »ç¹µ º¹ÀâÇØÁø´Ù. ÀÌÀ¯´Â ÆÐŶ Å©±â°¡ º¯Çϱ⠶§¹®ÀÌ´Ù. FTPÀÇ ¿¹¸¦ ´Ù½Ã µé¾îº¸¸é, PORT ¸í·ÉÀÌ ¼öÇàµÈ ÈÄ IP/port tupleÀ» ³ªÅ¸³»´Â ½ºÆ®¸µÀÇ ±æÀÌ°¡ º¯ÇÒ °ÍÀÌ´Ù. °á±¹ ÆÐŶ Å©±â°¡ º¯°æµÇ¸é, NAT ¹Ú½ºÀÇ ÁÂÃø°ú ¿ìÃø°£¿¡ syn/ackÀÇ Â÷ÀÌ°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. ¿¹¸¦ µé¾îº¸¸é, ÆÐŶÀ» 4 octet¸¸Å È®ÀåÇß´Ù¸é, ÀÌÈÄ °è¼ÓµÇ´Â ÆÐŶÀÇ TCP sequence number¿¡ ¾Õ¼ È®Àå½ÃŲ ¸¸ÅÀÇ offset¸¦ ´õÇؾ߸¸ ÇÑ´Ù. ¿¬°üµÈ ¸ðµç ÆÐŶ¿¡ ´ëÇÏ¿© Ưº°ÇÑ NAT 󸮰¡ ÇÊ¿äÇÑ °æ¿ìµµ ÀÖ´Ù. ´Ù½Ã±Ý FTP¸¦ ¿¹·Î µé¾îº¸ÀÚ. control connectionÀÇ PORT¸í·ÉÀ» ¼öÇàÇϴ Ŭ¶óÀ̾ðÆ®¿¡ ÀÇÇØ ¾ò¾îÁø IP/port¿¡ ´ëÇØ DATA connectionÀÇ ¸ðµç ÀÔ·Â ÆÐŶÀº Á¤»óÀûÀÎ table lookupÀ» °ÅÄ¡´Â °Íº¸´Ù´Â ¹Ýµå½Ã NATµÇ¾î¾ß¸¸ ÇÑ´Ù.
1.4.7.2. »ç¿ë°¡´ÉÇÑ ±¸Á¶Ã¼¿Í ÇÔ¼ö¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ nat helper ¸ðµâÀÇ `init()' ÇÔ¼ö´Â `struct ip_nat_helper'¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÀÎÀÚ·Î ÇÏ¿© `ip_nat_helper_register()' ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÎÀÚ°¡ µÇ´Â ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°Àº ¸â¹ö º¯¼ö¸¦ Æ÷ÇÔÇÑ´Ù.
ÀÌ»óÀº connection tracking helper¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ý°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ÀÌÁ¦ ¿©·¯ºÐµéÀÌ ÀÛ¼ºÇÑ ¸ðµâÀº `ip_nat_register()' ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¿¹ÃøµÇ´Â ÀÓÀÇÀÇ connectionÀÇ NAT¸¦ ó¸®ÇÒ Áغñ°¡ µÇ¾î ÀÖ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù. À̶§, `ip_nat_register()' ÇÔ¼ö´Â `struct ip_nat_expect'¸¦ ÀÎÀÚ·Î ÃëÇÏ°Ô µÇ¸ç, ±× ¸â¹ö º¯¼ö´Â ´ÙÀ½°ú °°´Ù.
1.4.7.3. NAT µµ¿ì¹Ì ¸ðµâ ¿¹Á¦
1.5. NetfilterÀÇ ÀÌÇØNetfiler´Â »ó´çÈ÷ ´Ü¼øÇϸç, ¾Õ Àý¿¡¼ ²Ï »ó¼¼È÷ ¼³¸íÇÏ¿´´Ù. ±×·¯³ª, °£È¤ NAT³ª ip_tables ÇϺΠ±¸Á¶°¡ Á¦°øÇÏ´Â °Í ÀÌ¿ÜÀÇ °Í ¶Ç´Â ¿©·¯ºÐµéÀÌ ÀüºÎ ¹Ù²Ù°í ½ÍÀº °Í¿¡ ´ëÇÏ¿© ¾Ë¾Æº¼ ÇÊ¿ä°¡ ÀÖ´Ù. ¹Ì·¡ÀÇ À̾߱Ⱑ µÇ°ÚÁö¸¸, netfilter°¡ ÁöÇâÇÏ°í ÀÖ´Â Áß¿äÇÑ ÀïÁ¡ Áß Çϳª´Â ij½³ÀÌ´Ù. °¢°¢ÀÇ skb´Â `nfcache' Çʵ带 °¡Áö°í ÀÖÀ¸¸ç, ÀÌ´Â Çì´õÀÇ ¾î¶² Çʵ带 °Ë»çÇÏ°í ÆÐŶÀ» º¯°æÇÒ °ÍÀÎÁö ¸» °ÍÀÎÁö¿¡ ´ëÇÑ ºñÆ® ¸Å½ºÅ©ÀÌ´Ù. °¢°¢ÀÇ ÈÅÀÌ ±×¿Í ¿¬°üµÈ ºñÆ®¿¡ ´ëÇÑ netfilterÀÇ OR¸¦ 0À¸·Î ¸¸µå´Â °ÍÀÌ ¾ÆÀ̵ð¾î·Î, ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÆÐŶÀÌ netfilter¸¦ °ÅÃÄ¾ß ÇÒ ÀÌÀ¯°¡ ÀüÇô ¾ø´Ù´Â °ÍÀ» ¾Ë¾ÆÂ÷¸± ¼ö ÀÖ´Â ¾ÆÁÖ ÈǸ¢ÇÑ Ä³½¬ ½Ã½ºÅÛÀ» ÇâÈÄ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. °¡Àå Áß¿äÇÑ ºñÆ®´Â NFC_ALTERD¿Í NFC_UNKNOWNÀ¸·Î, NFC_ALTERED´Â ÆÐŶÀÌ º¯°æµÇ¾ú´Ù´Â °ÍÀ» ÀǹÌÇϸç ÀÌ ºñÆ®´Â º¯°æµÈ ÆÐŶÀ» ´Ù½Ã ¶ó¿ìÆÃÇϱâ À§ÇØ IPv4ÀÇ NF_IP_LOCAL_OUT ÈÅ¿¡ ´ëÇÏ¿© ÀÌ¹Ì Àû¿ëµÇ¾ú´Ù. NFC_UNKNOWNÀº, Ç¥ÇöÇÒ ¼ö ¾ø´Â ¾î¶² Ư¼ºÀÌ °ËÃâµÇ¾î ij½³ÀÌ ¼öÇàµÇÁö ¾Ê¾Ò´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¸¸ÀÏ ÀǽÉÀÌ °¡´Â °æ¿ì°¡ ¹ß»ýÇϸé, ¿©·¯ºÐÀÇ ÈÅ ³»ºÎ¿¡ ÀÖ´Â skbÀÇ nfcache Çʵ忡 ´ëÇØ NFC_UNKNOWN Ç÷¢À» ¼³Á¤Çϱ⸸ ÇÏ¸é µÈ´Ù. 1.6. »õ·Î¿î Netfilter ¸ðµâ ÀÛ¼º1.6.1. Netfilter ÈÅ¿¡ ¿¬°áÇϱâÄ¿³Î ³»ºÎ¿¡¼ ÆÐŶÀ» ÁÙÀ̰ųª Á¶°¢³»±â À§Çؼ´Â `nf_register_hook' ÇÔ¼ö¿Í `nf_unregister_hook' ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌµé °¢°¢Àº ´ÙÀ½°ú °°Àº Çʵ带 Æ÷ÇÔÇÏ´Â `struct nf_hook_ops'¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÀÎÀÚ·Î ÃëÇÑ´Ù.
1.6.2. Å¥µÈ ÆÐŶÀÇ Ã³¸®ip_queue¿¡ ÀÇÇØ »ç¿ëµÇ´Â ÀÎÅÍÆäÀ̽º·Î, ÁÖ¾îÁø ÇÁ·ÎÅäÄÝ¿¡ ´ëÇÏ¿© ´ë±âµÈ ÆÐŶÀ» ó¸®Çϱâ À§ÇØ µî·ÏÇÒ ¼ö ÀÖ´Ù. ÆÐŶÀ» ó¸®ÇÏ´Â °ÍÀ» ¹æÁöÇÒ ¼ö ÀÖ´Ù´Â °Í¸¸ »©°í´Â ÈÅÀ» µî·ÏÇÏ´Â °Í°ú À¯»çÇÑ Àǹ̸¦ °¡Áö¸ç, ÈÅÀÌ `NF_QUEUE'·Î ÀÀ´äÇÏ´Â ÆÐŶÀ» È®Àθ¸ ÇÒ ¼ö ÀÖ´Ù. ´ë±âµÈ ÆÐŶ¿¡ ´ëÇÑ °ü½ÉÀ» µî·ÏÇϱâ À§ÇØ »ç¿ëÇÏ´Â µÎ°³ÀÇ ÇÔ¼ö´Â `nf_register_queue_handle()'°ú `nf_unregister_queue_handler()'ÀÌ´Ù. ¿©·¯ºÐÀÌ µî·ÏÇÏ°íÀÚ ÇÏ´Â ÇÔ¼ö´Â `nf_register_queue_handler()' ÇÔ¼ö·Î Àü´ÞµÇ´Â `void *' Æ÷ÀÎÅÍ¿Í ÇÔ²² È£ÃâµÈ´Ù. ÇÁ·ÎÅäÄÝÀ» ó¸®Çϱâ À§ÇØ µî·ÏµÈ ÇÔ¼ö°¡ ¾ø´Â °æ¿ì´Â, NF_QUEUE¸¦ ¸®ÅÏ ÇÏ´Â °ÍÀº NF_DROP¸¦ ¸®ÅÏÇÏ´Â °Í°ú ¸¶Âù°¡Áö°¡ µÈ´Ù. ´ë±âµÈ ÆÐŶ¿¡ ´ëÇÑ °ü½ÉÀ» µî·ÏÇßÀ¸¸é, ÆÐŶÀÌ Å¥À× µÇ±â ½ÃÀÛÇÑ´Ù. ÀÌÁ¦ Å¥À× µÈ ÆÐŶÀ» °¡Áö°í ¹«¾ùÀ» ÇÏ´ø ±×°Ç ¿©·¯ºÐµéÀÇ ¸¾ÀÌÁö¸¸, 󸮰¡ ³¡³ °æ¿ì¿¡´Â ¹Ýµå½Ã `nf_reject()' ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù(´Ü¼øÈ÷ kfree_skb()¸¦ È£ÃâÇؼ´Â ¾È µÈ´Ù). skb¸¦ Àç µµÀÔÇÏ´Â °æ¿ì´Â, Å¥À× µÈ ÆÐŶÀ» skb, Å¥À× µÈ ÆÐŶ¿¡ ÇÒ´çµÈ `struct nf_info'¿Í ÆÇ°á(verdict)À» Àü´ÞÇÑ´Ù. ±× ÀÌÀ¯´Â, NF_DROPÀº ÆÐŶÀ» DROP½Ãų °ÍÀÌ°í, NF_ACCEPT´Â ÈÅÀ» ÅëÇØ °è¼Ó ¹Ýº¹µÇµµ·Ï ÇÒ °ÍÀÌ°í, NF_QUEUE´Â ÆÐŶÀ» ´Ù½Ã ´ë±â ½Ãų °ÍÀÌ°í NF_REPEAT´Â ÆÐŶÀ» ´ë±â½ÃŲ ÈÅÀÌ ¶Ç ´Ù½Ã °Ë»çÇϵµ·Ï ¸¸µé °ÍÀ̱⠶§¹®ÀÌ´Ù(ÀÌ ¶§, ¹«ÇÑ·çÇÁ¿¡ ºüÁöÁö ¾Êµµ·Ï Á¶½ÉÇÒ °Í). `struct nf_info'¸¦ »ìÆ캸¸é, ÆÐŶ¿¡ ´ëÇÑ ºÎ°¡ÀûÀÎ Á¤º¸, Áï ÆÐŶÀÌ Á¸ÀçÇß´ø ÀÎÅÍÆäÀ̽º¿Í ÈÅ °°Àº °ÍÀ» ¾òÀ» ¼ö ÀÖ´Ù. 1.6.3. »ç¿ëÀÚ °ø°£À¸·ÎºÎÅÍ ¸í·É¾î Àü´Þ¹Þ±âNetfilterÀÇ ±¸¼º¿ä¼ÒµéÀÌ »ç¿ëÀÚ°ø°£°ú »óÈ£ÀÛ¿ëÀ» ÇÊ¿ä·Î ÇÑ´Ù´Â °ÍÀº ¾ÆÁÖ ´ç¿¬ÇÑ ÀÏÀÌ´Ù. ¹æ¹ýÀº setsockopt ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÏ¿© ÀÌ·± ÀÛ¿ëÀ» ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ¿©±â¼ ÁÖÀÇÇÒ Á¡Àº °¢ ÇÁ·ÎÅäÄÝÀÌ ÀÌÇØÇÏÁö ¸øÇÏ´Â setsockopt ³Ñ¹ö¿¡ ´ëÇØ Nf_setsockop()¸¦ È£ÃâÇÒ ¼ö ÀÖµµ·Ï °¢ ÇÁ·ÎÅäÄÝÀÌ ¼öÁ¤µÇ¾î¾ß¸¸Çϸç, ÀÌ´Â IPv4±îÁö ÀÌ°í, IPv6¿Í DECnetÀº ÀÌ¹Ì º¯°æµÇ¾î ÀÖ´Ù. ÃÖ±Ù¿¡ ¾Ë·ÁÁø ±â¼úÀ» »ç¿ëÇϸé, nf_register_sockopt() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© `struct nf_sockopt_ops'¸¦ µî·ÏÇϸç, ÀÌ ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°Àº Çʵå·Î ±¸¼ºµÇ¾î ÀÖ´Ù.
1.7. »ç¿ëÀÚ °ø°£¿¡¼ ÆÐŶ ó¸®libipq ¶óÀ̺귯¸®¿Í `ip_queue' ¸ðµâÀ» »ç¿ëÇϸé, Ä¿³Î¿¡¼ ÇÒ ¼ö ÀÖ´Â ´ëºÎºÐÀÇ °ÍµéÀ» »ç¿ëÀÚ °ø°£¿¡¼ ¼öÇàÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀÌ ´ÙÀ½°ú °°Àº °ÍÀ» ÀǹÌÇÑ´Ù. ¼Óµµ¿¡ ´ëÇÑ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù¸é, »ç¿ëÀÚ °ø°£¿¡¼ ¿ÏÀüÈ÷ ¿©·¯ºÐµé¸¸ÀÇ Äڵ带 °³¹ßÇÒ ¼ö ÀÖ´Ù. °³¹ßÇÏ°íÀÚ ÇÏ´Â ¿©·¯ºÐµéÀÌ Å« ´ë¿ªÀ» ÇÊÅ͸µ ÇÏ°íÀÚ ÇÏÁö¸¸ ¾Ê´Â´Ù¸é, Ä¿³Î ³»ºÎÀÇ ÆÐŶ ¸Í±Û¸µ¿¡ ºñÇØ ÀÌ ¹æ¹ýÀÌ ¿ùµîÇÏ´Ù´Â °ÍÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù. netfilter ÃÊâ±â¿¡, ÇÊÀÚ´Â iptablesÀÇ Ãʱ⠹öÀüÀ» Æ÷Æà ÇÏ¿© À̸¦ Áõ¸íÇÏ¿´´Ù. netfilter´Â, °³¹ßÀÚµéÀÌ ¿øÇÏ´Â ¾ð¾î°¡ ¹«¾ùÀÌ´ø °£¿¡, °³¹ßÀÚ ÀÚ½ÅÀÇ ÄÚµå¿Í °íÈ¿À²ÀÇ ³Ý¸Í±Û¸µ ¸ðµâÀ» °³¹ßÇÏ°íÀÚ ÇÏ´Â »ç¶÷µé¿¡°Ô ¿ÀÇ µÇ¾î ÀÖ´Ù. 2. Ä¿³Î 2.0/2.2 ÆÐŶ ÇÊÅÍ ¸ðµâ º¯È¯Æ÷ÆÃÀ» ¾ÆÁÖ ½±°Ô ÇÒ ¼ö ÀÖ´Â ´Ü¼øÇÑ °èÃþ¿¡ ´ëÇؼ´Â ip_fw_compat.c¸¦ º¸±â ¹Ù¶õ´Ù. 3. ÅͳΠÄÚµå °³¹ßÀÚ¸¦ À§ÇÑ Netfilter ÈÅTunnel µå¶óÀ̹ö Á¦ÀÛÀÚµéÀº 2.4 Ä¿³Î¿¡ ´ëÇؼ´Â ´ÙÀ½¿¡ º¸ÀÌ´Â ´Ü¼øÇÑ µÎ°³ÀÇ ±ÔÄ¢À» µû¸£±â ¹Ù¶õ´Ù.
ù ¹ø°¸¦ ¼öÇàÇϴ ǥÁØ ¹æ¹ýÀº ÆÐŶÀ» wrapÇϰųª unwrapÇϱâ Àü¿¡ ´ÙÀ½°ú À¯»çÇÑ Äڵ带 »ðÀÔÇÏ´Â °ÍÀÌ´Ù.
µÎ ¹ø°¸¦ ¼öÇàÇϱâ À§ÇØ ÇÊ¿ä·Î ÇÏ´Â °ÍÀº »õ·ÎÀÌ encapsulatedµÈ ÆÐŶÀÌ ``ip_send()''·Î µé¾î°¡´Â À§Ä¡¸¦ ã¾Æ³»°í, À̸¦ ´ÙÀ½°ú °°Àº °ÍÀ¸·Î ´ëüÇÏ´Â °ÍÀÌ´Ù.
´ÙÀ½¿¡ º¸ÀÎ ·êÀÌ ÀǹÌÇÏ´Â °ÍÀº tunnel ¹Ú½º¿¡ ÆÐŶ ÇÊÅ͸µ ·êÀ» Àû¿ëÇÏ°íÀÚ ÇÏ´Â »ç¶÷ÀÌ tunnel µÇ°í ÀÖ´Â ÆÐŶ¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº ÀýÂ÷¸¦ º¸°Ô µÉ °ÍÀÌ´Ù.
4. ½ÃÇèµµ±¸(Test Suite)test suite´Â CVS ÀúÀå¼Ò¿¡ ÀÖÀ¸¸ç, test suite°¡ Àû¿ëµÇ´Â ¹üÀ§°¡ ³ÐÀ» ¼ö·Ï, ¿©·¯ºÐÀÇ Äڵ尡 ¿Àµ¿ÀÛÀ» ÇÏ´Â °æ¿ì°¡ °ÅÀÇ ¾øÀ» ¼ö ÀÖ´Ù´Â ÀڽۨÀº ´õ Ä¿Áö°Ô µÈ´Ù. »ç¼ÒÇÑ Å×½ºÆ®(trivial test)´Â »ó´çÈ÷ ¾î·Á¿î Å×½ºÆ®(tricky test) ¸¸ÅÀ̳ª Áß¿äÇϸç, ÀÌ´Â º¹ÀâÇÑ ½ÃÇèÀ» ´Ü¼øÈÇÑ °ÍÀÌ »ç¼ÒÇÑ Å×½ºÆ®À̱⠶§¹®ÀÌ´Ù. ÀÏ´Ü º¹ÀâÇÑ Å×½ºÆ®¸¦ ¼öÇàÇϱâ Àü¿¡ ±âº»ÀûÀÎ ÀÛ¾÷Àº ¸¸Á·ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö Àֱ⠶§¹®ÀÌ´Ù. Å×½ºÆ®´Â ´Ü¼øÇϸç, ±×Àú testsuite/ÀÇ ¼ºêµð·ºÅ丮¿¡ ÀÖ´Â ½©½ºÅ©¸³Æ®ÀÌ´Ù. ½ÇÇàµÇ´Â ¼ø¼´Â ¾ËÆĺª ¼ø¼´Ù. µû¶ó¼ `01test'°¡ `02test'º¸´Ù ¸ÕÀú ½ÇÇàµÈ´Ù. ÇöÀç´Â ´Ù¼¸ °³ÀÇ Å×½ºÆ® µð·ºÅ丮°¡ ÀÖ´Ù.
4.1. Å×½ºÆ®¸¦ À§ÇÑ ½ºÅ©¸³Æ® ÀÛ¼º¿ì¼± Àû´çÇÑ µð·ºÅ丮¿¡ »õ·Î¿î ÆÄÀÏÀ» »ý¼ºÇÏ°í, ÀûÀýÇÑ ½Ã±â¿¡ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ¹øÈ£¸¦ ºÎ¿©ÇÑ´Ù. ¿¹¸¦ µé¾îº¸¸é, ICMP reply tracking (02conntrack/02reply.sh)À» Å×½ºÆ®Çϱâ À§Çؼ´Â ¿ÜºÎ·Î ³ª°¡´Â ICMP°¡ ÀûÀýÇÏ°Ô ÃßÀûµÇ°í ÀÖ´Â Áö¸¦ ¸ÕÀú È®ÀÎÇؾßÇÑ´Ù(02conntrack/01simple.sh). ÀÛÀº Å©±âÀÇ ÆÄÀÏÀ» ¸¹ÀÌ ¸¸µé¾î¼, °¢°¢ÀÇ ÆÄÀÏÀº ÇÑ °¡Áö ºÐ¾ß¸¸ ´ã´çÇϵµ·Ï ÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀ̸ç, ±× ÀÌÀ¯´Â testsuite¸¦ ½ÇÇà½ÃŲ »ç¶÷µéÀÌ ¹®Á¦¸¦ Áï°¢ ¾Ë¾Æ ³¾ ¼ö ÀÖµµ·Ï ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. Å×½ºÆ® µµÁß ¹®Á¦°¡ ¹ß»ýÇϸé, ±×³É `exit 1'À» ÇÏ¸é µÇ°í, ±×·¯¸é failure°¡ ¹ß»ýÇÑ´Ù. Áï, ¿©·¯ºÐµéÀÌ ¹®Á¦°¡ ¹ß»ýÇÑ °ÍÀ» °¨ÁöÇÒ ¼ö ÀÖ°Ô µÇ¸é, ÀûÀýÇÑ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´Ù¸é, `exit 0'·Î Á¾·áÇÏ¸é µÈ´Ù. ½ºÅ©¸³Æ®ÀÇ ÃÖ»óÀ§¿¡¼ `set -e'¸¦ »ç¿ëÇϰųª, °¢ ¸í·ÉÀÇ ¸¶Áö¸·¿¡ `|| exit 1'À» Ãß°¡ÇÏ¿© °¢ ¸í·ÉÀÇ ¼º°ø¿©ºÎ¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù. helper ÇÔ¼öÀÎ `load_module'¿Í `remove_module'´Â ¸ðµâÀ» ¿Ã¸®°Å³ª ³»¸®´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥, Ưº°È÷ Å×½ºÆ®¶ó°í ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ testsuite¿¡¼´Â autoloadingÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù. 4.2. º¯¼ö¿Í ȯ°æÀÏ´Ü tap0¿Í tap1À̶ó´Â µÎ°³ÀÇ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÀÖ´Ù. °¢ ÀÎÅÍÆäÀ̽ºÀÇ ÁÖ¼Ò´Â $TAP0¿Í $TAP1À̶ó´Â º¯¼ö¿¡ ÀúÀåµÇ¾î ÀÖÀ¸¸ç, ³Ý¸Å½ºÅ©´Â ¸ðµÎ 255.255.255.0ÀÌ´Ù. networkÀº $TAP0NET°ú $TAP1NET¿¡ ÀúÀåµÇ¾î ÀÖ´Ù. $TMPFILEÀº ÀÓ½ÃÆÄÀÏ·Î, Å×½ºÆ®°¡ Á¾·áµÇ´Â ½ÃÁ¡¿¡¼ »èÁ¦µÈ´Ù. ¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®´Â testsuite/ µð·ºÅ丮ºÎÅÍ ½ÃÀÛÇؼ, ½ºÅ©¸³Æ®°¡ Á¸ÀçÇÏ´Â ¸ðµç µð·ºÅ丮¸¦ ã¾Æ°¡°Ô µÈ´Ù. Áï ¿©·¯ºÐµéÀº iptables°°Àº µµ±¸¸¦ ½ÇÇà½ÃÅ°±â À§Çؼ´Â `../userspace'·Î ½ÃÀÛÇÏ´Â path¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. $VERBOSE¸¦ ¼³Á¤ÇØ ³õÀ¸¸é ¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®´Â º¸´Ù ¸¹Àº Á¤º¸¸¦ Ãâ·ÂÇϰԵȴÙ. Áï, command line¿¡¼ `-v' ¿É¼ÇÀ» ÁØ °Í°ú µ¿ÀÏÇÑ È¿°ú°¡ µÈ´Ù. 4.3. À¯¿ëÇÑ µµ±¸µé``tools'' µð·ºÅ丮¿¡´Â ¾µ¸¸ÇÑ testsuite µµ±¸°¡ ¸î °³ ÀÖÀ¸¸ç, °¢ µµ±¸´Â ¹®Á¦°¡ ¹ß»ýÇÑ °æ¿ì non-zero exit status¸¦ ¹ß»ý½ÃÅ°¸ç Á¾·áÇÑ´Ù. 4.3.1. gen_ipIP ÆÐŶÀ» »ý¼ºÇÏ´Â ÇÔ¼ö·Î, IP ÆÐŶÀ» Ç¥ÁØ ÀÔ·ÂÀ¸·Î Ãâ·ÂÇÑ´Ù. ¿©·¯ºÐµéÀº Ç¥ÁØ Ãâ·ÂÀ» /dev/tap0¿Í /dev/tap1À¸·Î Àü¼ÛÇÏ¿© tap0¿Í tap1¿¡ ÆÐŶÀ» º¸³¾ ¼ö ÀÖ´Ù. (/dev/tap0¿Í /dev/tap1ÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é testsuite°¡ ÃÖÃÊ ½ÇÇà µÉ ¶§ »ý¼ºµÈ´Ù.)
´ÙÀ½Àº °Á¦ ¿É¼ÇÀÌ´Ù.
4.3.2. rcv_ip`rcv_ip'¸¦ »ç¿ëÇϸé IP ÆÐŶÀ» º¼ ¼ö ÀÖÀ¸¸ç, °¡´ÉÇÑ get_ip·Î µé¾î¿À´Â ¿ø·¡ÀÇ °ª¿¡ °¡±õ°Ô ¸í·É Çà¿¡ Ãâ·ÂÇÑ´Ù.(fragments´Â Á¦¿Ü) ÀÌ ÇÔ¼ö´Â ÆÐŶÀ» ºÐ¼®ÇÏ´Â µ¥ ¸Å¿ì À¯¿ëÇϸç, ´ÙÀ½°ú °°Àº °Á¦ ¿É¼ÇÀÌ µÎ°³ ÀÖ´Ù.
´ÙÀ½ ½ºÅ©¸³Æ®´Â `rcv_ip'¸¦ »ç¿ëÇϴ ǥÁØÀ» º¸ÀÎ °ÍÀÌ´Ù.
4.3.3. get_errÇ¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÐŶ(¿¹¸¦ µé¸é, gen_ip·Î »ý¼ºµÈ ÆÐŶ)À» ÃëÇÏ°í, ICMP ¿¡·¯·Î º¯È¯½ÃŲ´Ù. ¼¼°³ÀÇ Àü´ÞÀÎÀÚ·Î ¼Ò½º IP ÁÖ¼Ò, ŸÀÔ°ú Äڵ带 ¹Þ´Â´Ù. ¸ñÀûÁö ÀÔ·ÂÀº Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ¹ÞÀº ¼Ò½º IP ÁÖ¼Ò·Î ¼³Á¤µÈ´Ù. 4.3.4. local_ipÇ¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÐŶÀ» ¾ò¾î¼ raw ¼ÒÄÏÀ¸·Î Àü´ÞÇÑ´Ù. ·ÎÄÿ¡¼ »ý¼ºµÈ ÆÐŶÀÇ ¸ð¾çÀ» º¸¿©ÁØ´Ù(ethertap ÀåÄ¡ Áß Çϳª·Î ÀÔ·ÂµÈ ÆÐŶÀ¸·ÎºÎÅÍ ºÐ¸®ÇÏ´Â °æ¿ì, ¿ÜºÎ¿¡¼ »ý¼ºµÈ ÆÐŶó·³ º¸ÀδÙ). 4.4. »ý°¢³ª´Â ´ë·Î ÇÏ´Â Ãæ°í¸ðµç µµ±¸´Â ÀÐ°í ¾²±â¸¦ Çѹø ÇÒ ¶§ ¸ðµç °ÍÀ» ÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. Áï ethertap ÀåÄ¡¿¡ ´ëÇؼ´Â »ç½ÇÀÌÁö¸¸, pipe¸¦ ÀÌ¿ëÇÏ¿© ¾à°£ º¹ÀâÇÑ ÀÛ¾÷À» ÇÒ ¶§´Â ¹Ýµå½Ã ¿Ç´Ù°í ¸»ÇÒ ¼ö´Â ¾ø´Ù. ÆÐŶÀ» ÀÚ¸£±â À§Çؼ dd¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. dd´Â ÀÏȸ¼º ÀÛ¾÷À¸·Î ÆÐŶÀ» Ãâ·ÂÇϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â obs(output block size)¶ó´Â ¿É¼ÇÀÌ ÀÖ´Ù. ù ¹ø°¿¡ ¼º°øÇϵµ·Ï Å×½ºÆ®ÇÏ´Â °ÍÀÌ ÁÁ´Ù. Áï, ÆÐŶÀÌ ¼º°øÀûÀ¸·Î ºí·° µÇµµ·Ï Å×½ºÆ®ÇØ¾ß ÇÑ´Ù. óÀ½¿¡´Â ÆÐŶÀÌ Á¤»óÀûÀ¸·Î Åë°úÇϵµ·Ï Å×½ºÆ®¸¦ ÇÏ°í ³ª¼, ÀϺΠÆÐŶÀÌ ºí·° µÇµµ·Ï Å×½ºÆ®ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¾û¶×ÇÑ ¿À·ù·Î ÀÎÇØ ÆÐŶÀÌ ÁøÇàÇÏ´Â °ÍÀ» ÁßÁö½Ãų ¼ö µµ ÀÖ´Ù. ¾Æ¹«°Å³ª ¸· º¸³»°í ³ª¼ ¾î¶² °á°ú°¡ ÀϾ´Â È®ÀÎÇÏÁö ¸»°í, Á¤È®ÇÑ Å×½ºÆ®¸¦ ÇÒ ¼ö ÀÖµµ·Ï ÇؾßÇÑ´Ù. Á¤È®ÇÑ Å×½ºÆ®°¡ Àß ¸øµÈ °æ¿ì¶ó¸é, ¹«¾ùÀÌ Àß ¸ø µÇ¾ú´ÂÁö ¾Ë ¼ö ÀÖÁö¸¸, ·£´ý Å×½ºÆ®°¡ À߸ø µÇ¸é ÀüÇô µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù. ¾Æ¹«·± ¸Þ½ÃÁöµµ ³²±âÁö ¾Ê°í Å×½ºÆ®°¡ ½ÇÆÐÇÑ °æ¿ì, ¾î¶² ¸í·ÉÀÌ ½ÇÇàµÇ°í ÀÖ´ÂÁö ¾Ë¾Æº¸±â À§ÇØ ½ºÅ©¸³Æ®ÀÇ ¸Ç À§¿¡ `-x'¸¦ Ãß°¡ ÇÒ ¼ö ÀÖ´Ù. Áï, `#!/bin/sh -x'. Å×½ºÆ®°¡ ºÒ±ÔÄ¢ÀûÀ¸·Î ½ÇÆÐÇϸé, ¸ðµç ¿ÜºÎ ÀåÄ¡¸¦ Â÷´ÜÇϰųª ÇÏ´Â ½ÄÀ¸·Î, ·£´ý ³×Æ®¿÷ Æ®·¡ÇÈ¿¡ ´ëÇÏ¿© È®ÀÎÇØ º¸´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¸é,Andrew Tridgelló·³ µ¿ÀÏÇÑ ³×Æ®¿÷ »ó¿¡ ÀÖÀ¸¸é, À©µµ¿ìÀÇ ºê·Îµå ij½ºÆÿ¡ ÀÇÇØ ¼ö¸¹Àº °£¼·À» ¹Þ°Ô µÈ´Ù. 5. °³¹ß µ¿±âÇÊÀÚ°¡ ipchains¸¦ °³¹ßÇÏ°í ³ª¼, ½Ãµå´ÏÀÇ Áß±¹½Ä´ç ÀÔ±¸¿¡ µé¾î¼·Á´Â ¼ø°£ ºÒÇöµí ¸Ó¸®´Â ½ºÄ¡´Â »ý°¢¿¡ ÆÐŶ ÇÊÅ͸µÀÌ ¾û¶×ÇÑ °÷¿¡¼ ÀÌ·ç¾î Áö°í ÀÖ´Ù´Â »ç½ÇÀ» ±ú´Þ¾Ò´Ù. Áö±ÝÀº ¾îµðÀÎÁö ãÀ» ¼ö ¾øÁö¸¸, ÇÑ°¡Áö ±â¾ïÇÏ´Â °ÍÀº Alan Cox¿¡°Ô ¸ÞÀÏÀ» º¸³Â°í, Ä£ÀýÇÏ°Ôµµ ±×´Â `óÀ½¿£ ¾Æ¹«¸® ´ç½ÅÀÌ ¿Ç¾Ò´Ù°í ÇÒÁö¶óµµ ÇÑÀÏÀ» ³¡³»´Â °ÍÀÌ ¾î¶²°¡¿ä?'¶ó´Â ´äÀåÀ» º¸³Â´Ù. ÀÌ ÂªÀº ¸» ÇѸ¶´Ù¿¡¼ ½Ç¿ëÁÖÀÇ°¡ Á¤µµ¸¦ À̰ܹö·È´Ù. ÃÖÃÊ¿¡´Â ipfwadmÀÇ Ä¿³Î ÆÄÆ®ÀÇ ¸¶ÀÌ³Ê ¼öÁ¤À̾úÁö¸¸ °á±¹¿¡´Â ¸¹Àº ºÎºÐÀ» ´Ù½Ã ÀÛ¼ºÇÏ¿© ipchains¸¦ ¸¶¹«¸®Áþ°í HOWTO¸¦ ¾²°í ³ª¼¾ß, ÆÐŶ ÇÊÅ͸µ, ¸Å½ºÄ¿·¹À̵ù, Æ÷Æ®Æ÷¿öµù°ú À¯»óÇÑ ¿©·¯ À̽´¿¡ ´ëÇÏ¿© ¸®´ª½º Ä¿¹Â´ÏƼ¿¡¼ ¸¹Àº È¥¶õÀÌ ÀÖ¾ú´Ù´Â °ÍÀ» ¾Ë°Ô µÇ¾ú´Ù. ÀÌ·± °ÍµéÀÌ ¹Ù·Î ¿©·¯ºÐµéÀÇ µµ¿òÀ¸·ÎºÎÅÍ ¾ò´Â Áñ°Å¿òÀÌ´Ù. ¿©·¯ºÐµéÀº »ç¿ëÀÚµéÀÌ ¹«¾ùÀ» ÇÏ·Á°í ÇÏ°í, ¶Ç ¹«¾ùÀ» °¡Áö°í ³íÀïÇÏ´Â Áö º¸´Ù °¡±îÀ̼ ´À³¥ ¼ö ÀÖ´Ù. ÇÁ¸®¼ÒÇÁÆ®¿þ¾î¶ó´Â °ÍÀº ¸¹Àº »ç¿ëÀÚµéÀÌ »ç¿ëÇÏ°í ÀÖÀ» ¶§ °¡Ä¡°¡ ÀÖ°í, º¸´Ù ½±°Ô ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¹®¼°¡ ¾Æ´Ñ ±¸Á¶(architecture)°¡ ÃÖ´ë °áÇÔÀ̾ú´Ù. ±×·¡¼ ÇÊÀÚ´Â ipchains Äڵ带 °¡Áö°í »ç¶÷µéÀÌ ÇÏ·Á°í Çß´ø ¾ÆÀ̵ð¾î¿Í °æÇèÀ» ¾ò¾ú´Ù. ¹®Á¦´Â ´ÜÁö µÑ »ÓÀ̾ú´Ù. ù ¹ø°·Î, ÇÊÀÚ´Â º¸¾È ÂÊÀ¸·Î ´Ù½Ã µ¹¾Æ°¡°í ½ÍÁö ¾Ê¾Ò´Ù. º¸¾È ÄÁ¼³ÅÏÆ®°¡ µÈ´Ù´Â °ÍÀº ¿©·¯ºÐÀÇ ¾ç½É°ú ºÎÀÇ »çÀÌ¿¡ ÀÖ´Â ¿µ¿øÇÑ µµ´öÀûÀÎ ÀüÀïÀÌ´Ù. ±âº»ÀûÀÎ ¼öÁØ¿¡¼, ¿©·¯ºÐµéÀº ½ÇÁ¦ º¸¾ÈÀÌ ¾Æ´Ñ º¸¾È¿¡ ´ëÇÑ ºÐÀ§±â¸¦ ÆÈ°í ÀÖ´Â °ÍÀÌ´Ù. º¸¾ÈÀ» ÀÌÇØÇÏ°í ÀÖ´Â ±º´ë¿¡¼ ±º»ç¿ëÀ¸·Î ÀÛ¾÷À» ÇÏ´õ¶ó°í, ´Ù¸¦ ¹Ù´Â ¾ø´Ù. µÎ ¹ø° ¹®Á¦´Â »õ·Î¿î »ç¿ëÀÚµéÀº °ü½É ¹ÛÀÇ ¹®Á¦¿´´Ù. Å« ȸ»ç¿Í ISPµéÀÌ ¾Õ´ÙÅý ÀÌ ¹°°ÇÀ» »ç¿ëÇÏ°í ÀÖ´Ù. ³»°¡ ÇÊ¿äÇÑ °ÍÀº, ¹°·Ð ±×µéÀÌ ³»ÀÏÀÇ È¨À¯ÀúÀÇ ±Ô¸ð°¡ µÉ ¼öµµ ÀÖÁö¸¸, ÀÌ·± ·ùÀÇ »ç¿ëÀÚµé ºÎÅÍÀÇ ½Å·Ú¸¦ ¹Þ´Â °ÍÀ̾ú´Ù. WatchGuard¿¡ ´ëÇÑ ³ëÃâÀÌ ³»°Ô ÇÊ¿äÇÑ ´ë±Ô¸ðÀÇ Å¬¶óÀ̾ðÆ®ÀÇ ³ëÃâÀ» °¡Á®´Ù ÁÖ¾ú°í, ±×µé·ÎºÎÅÍ µ¶¸³ÇÏ°íÀÚ ÇÏ´Â °ÍÀÌ ¸ðµç »ç¿ëÀڵ鿡°Ô µ¿ÀÏÇÏ°Ô Áö¿øµÇµµ·Ï ÇÏ¿´´Ù. ±×·¡¼ ÇÊÀÚ´Â ½±°Ô ÀÛ¼ºµÈ netfilter¸¦ °¡Áú ¼ö ÀÖ¾ú°í, ÃÖ»óÀ§¿¡ ipchains¸¦ Æ÷Æà ÇÏ¿©, À̸¦ °¡Áö°í ¸ðµç °ÍÀ» Çس´Ù. ºÒÇàÇÏ°Ôµµ Ä¿³Î¿¡¼ ¸ðµç ¸Å½ºÄ¿·¹À̵ù Äڵ尡 »ç¶óÁ® ¹ö·È´Ù. Áï, ÇÊÅ͸µÀ¸·ÎºÎÅÍ ¸Å½ºÄ¿·¹À̵ùÀ» µ¶¸³½ÃÅ°°íÀÚ ÇÏ´Â °ÍÀÌ ÆÐŶ ÇÊÅ͸µÀ¸·Î À̵¿ÇÏ°ÔµÈ ÁÖµÈ ÀÌÀ¯ÀÌÁö¸¸, ±×·¸°Ô ÇÔÀ¸·Î½á ¸Å½ºÄ¿·¹À̵ù ¿ª½Ã netfilter ÇÁ·¹ÀÓ ¿÷À¸·Î À̵¿ÇÒ ÇÊ¿ä°¡ ÀÖ¾ú´Ù. ipfwadmÀÇ `interface-address'(ipchains¿¡¼ ÇÊÀÚ°¡ »èÁ¦ÇÑ °Í Áß Çϳª)ÀÇ Æ¯¼º¿¡ ´ëÇÑ ³ªÀÇ °æÇèÀ¸·Î ¹è¿î °ÍÀº, ´Ü¼øÈ÷ ¸Å½ºÄ¿·¹À̵ù Äڵ带 ºÐ¸®ÇÏ°í ³ª¸¦ ´ë½ÅÇÏ¿© netfilter¿¡ Æ÷ÆÃÇØ ÁÙ »ç¶÷À» ±â´Ù¸®´Â °ÍÀº ¾Æ¹«·± Èñ¸ÁÀÌ ¾ø´Ù´Â °ÍÀÌ´Ù. ±×·¡¼ ÇÊÀÚ´Â ÃÖ¼ÒÇÑ ÇöÀç Äڵ常Š¸¹Àº Ư¼ºÀ» È®º¸ÇÒ ÇÊ¿ä°¡ ÀÖ¾ú´Ù. Ãʱ⿡ µµÀÔÇÑ niche users¸¦ ºÏµ¸±â À§ÇØ, Á¤È®È÷ ¸»Çϸé Á¶±Ý ´õ ÇÊ¿äÇß´Ù. ÀÌ´Â Åõ¸íÇÑ ÇÁ¶ô½Ã, ¸Å½ºÄ¿·¹À̵ù°ú Æ÷Æ® Æ÷¿öµùÀ» ´ëüÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¹Ù²ã ¸»Çϸé, ¿Ïº®ÇÑ NAT °èÃþÀÌ µÇ´Â °ÍÀÌ´Ù. ÀϹÝÀûÀÎ NAT ½Ã½ºÅÛÀ» ÀÛ¼ºÇÏ´Â ´ë½Å, ±âÁ¸ÀÇ ¸Å½ºÄ¿·¹À̵ù °èÃþÀ» Æ÷ÆÃÇϱâ·Î °áÁ¤Çß¾úÁö¸¸, ¸Å½ºÄ¿·¹À̵ùÀº ¿¬·û°ú À¯Áöº¸¼öÀÇ ºÎÀç°¡ ¹®Á¦½ÃµÇ¾ú´Ù. ±×·¯´Ï±î ¸Å½ºÄ¿·¹À̵ù ¸ÞÀÎÅͳʰ¡ ¾ø´Ù´Â À̾߱â´Ù. ¼ø¼öÇÑ »ç¿ëÀÚµéÀº ¸Å½ºÄ¿·¹À̵ùÀ» »ç¿ëÇÏÁö ¾Ê°í, À¯Áöº¸¼ö ÀÛ¾÷À» ÇÏ·Á°í Çϴ Ȩ À¯Àúµéµµ ¸¹Áö ¾Ê´Ù. Juan Ciarlante °°ÀÌ ¿ë°¨ÇÑ »ç¶÷µéÀÌ ¹ö±×¸¦ °íÃÆÁö¸¸, °á±¹ ´Ù½Ã ÀÛ¼ºÇØ¾ß ÇÏ´Â ¼öÁØ¿¡ À̸£°Ô µÇ¾ú´Ù. ÇÊÀÚ´Â NAT¸¦ ´Ù½Ã ÀÛ¼ºÇÑ »ç¶÷ÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ¾Ë¾ÆÁֱ⠹ٶõ´Ù. Áï ÇÊÀÚ´Â ´õ ÀÌ»ó ¸Å½ºÄ¿·¹À̵ùÀ» »ç¿ëÇÏÁö ¾Ê°í, ´ç½Ã ±âÁ¸ÀÇ Äڵ带 »ìÆ캸Áöµµ ¾Ê¾Ò´Ù. ¾Æ¸¶µµ ÀÌ°ÍÀÌ ³»°¡ »ý°¢ÇÑ °Íº¸´Ù ¸¹Àº ½Ã°£ÀÌ ¼Ò¿äµÈ ÀÌÀ¯ÀÏ °ÍÀÌ´Ù. ÇÏÁö¸¸ ÇÊÀÚÀÇ °ßÇطδ °á°ú´Â ²Ï ÁÁ¾Ò°í, ¸¹Àº °ÍÀ» ¹è¿ï ¼ö ÀÖ¾ú´Ù. ¾ó¸¶³ª ¸¹Àº »ç¶÷µéÀÌ »ç¿ëÇÏ°í ÀÖ´Â Áö ¾Ë°Ô µÇ¸é, µÎ ¹ø° ¹öÀüÀº ÈξÀ ´õ ÁÁ¾Æ Áú °ÍÀ̶ó´Â Á¡Àº ¹Ï¾î ÀǽÉÄ¡ ¾Ê´Â´Ù. 6. °¨»çÀÇ ¸»µµ¿ÍÁֽŠ¸ðµç ºÐµé¿¡°Ô °¨»ç µå¸®¸ç, ƯÈ÷ protocol helpers¸¦ ÀÛ¼ºÇØ ÁֽŠHarald Welte¿¡°Ô °¨»ç µå¸³´Ï´Ù. |
You are going to have a new love affair. |