3. ³ÝÇÊÅÍ ¾ÆÅ°ÅØÃ³

³ÝÇÊÅÍ´Â ´ÜÁö ÇÁ·ÎÅäÄÝ ½ºÅÃÀÇ ´Ù¾çÇÑ Æ÷ÀÎÆ®¿¡ Á¸ÀçÇÏ´Â ÈÅÀÇ ¿¬¼ÓÀÏ »ÓÀÌ´Ù. ÀÌ»óÀûÀÎ IPv4ÀÇ ÁøÇà°æ·Î ´ÙÀ̾î±×·¥Àº ´ÙÀ½°ú °°´Ù.
A Packet Traversing the Netfilter System:
   --->[1]--->[ROUTE]--->[3]--->[4]--->
                 |            ^
                 |            |
                 |         [ROUTE]
                 v            |
                [2]          [5]
                 |            ^
                 |            |
                 v            |
ÆÐŶÀº ±×¸²ÀÇ ÁÂÃøÀ¸·ÎºÎÅÍ µé¾î¿Í¼­ ´Ü¼øÇÑ µ¥ÀÌÅÍ Ã¼Å©(Áï, µ¥ÀÌÅͰ¡ Àß·È´ÂÁö, ȤÀº IP üũ ¼¶ÀÇ ÀÌ»óÀ¯¹«, µÚÁ×¹ÚÁ× µÇÁö´Â ¾Ê¾Ò´Â Áö µî)¸¦ °ÅÃÄ, ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷ÀÇ NF_IP_PRE_ROUTING[1] ÈÅÀ¸·Î Àü´ÞµÈ´Ù.

´ÙÀ½À¸·Î, ÆÐŶÀº ¶ó¿ìÆÃ ÄÚµå·Î µé¾î°¡¸ç, ¿©±â¼­ ÆÐŶÀÌ ´Ù¸¥ ÀÎÅÍÆäÀ̽º·Î ÇâÇÏ´ÂÁö ¶Ç´Â ·ÎÄà ÇÁ·Î¼¼½º·Î ÇâÇÏ´ÂÁö °áÁ¤µÈ´Ù. ÆÐŶÀÌ ¶ó¿ìÆÃµÉ ¼ö ¾ø´Â °æ¿ì, ¶ó¿ìÆÃ ÄÚµå´Â ÆÐŶÀ» ¹ö¸®±âµµ ÇÑ´Ù.

¸¸ÀÏ ÆÐŶÀÇ ¸ñÀûÁö°¡ µé¾î¿Â ¹Ú½º¶ó¸é, ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷Àº ÆÐŶÀ» ÇÁ·Î¼¼½º·Î Àü´ÞÇϱâ Àü¿¡ 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¿¡ ´ëÇÑ ³ÝÇÊÅÍÀÇ ¿¹¸¦ º¸ÀÏ °ÍÀ̸ç, À̸¦ ÅëÇØ ¿©·¯ºÐµéÀº °¢°¢ÀÇ ÈÅÀÌ µ¿ÀÛÇÏ´Â ½ÃÁ¡À» ÀÌÇØÇÏ°Ô µÉ °ÍÀÌ´Ù. ÀÌ °ÍÀÌ ¹Ù·Î ³ÝÇÊÅÍÀÇ ±âÃÊÀÌ´Ù.

Ä¿³Î ¸ðµâÀº ¾Õ¼­ ¾ð±ÞÇÑ ¾î¶°ÇÑ ÈÅ¿¡ ´ëÇØ¼­ ÀÀ´äÇÒ ¼ö ÀÖµµ·Ï µî·ÏÇÒ ¼ö ÀÖÀ¸¸ç, ¾î¶² ÇÔ¼ö¸¦ µî·ÏÇÑ ¸ðµâÀº ÈÅ ³»¿¡¼­ ÇÔ¼öÀÇ ¿ì¼±¼øÀ§¿¡ ´ëÇÏ¿© ¹Ýµå½Ã ¸í½ÃÇÏ¿©¾ß ÇÑ´Ù. ÄÚ¾î ³×Æ®¿öÅ· ÄÚµå·ÎºÎÅÍ ³ÝÇÊÅÍ ÈÅÀÌ È£ÃâµÇ´Â °æ¿ì, °¢ Æ÷ÀÎÆ®¿¡ µî·ÏµÈ °¢°¢ÀÇ ¸ðµâÀº ¿ì¼±¼øÀ§¿¡ µû¶ó È£ÃâÀÌ µÇ°í, ÆÐŶÀ» ÀÚÀ¯·ÎÀÌ ´Ù·ê ¼ö ÀÖ´Ù. ¸ðµâÀº ³ÝÇÊÅÍ¿¡°Ô ´ÙÀ½ÀÇ ´Ù¼¸ °¡Áö µ¿ÀÛÀ» Çϵµ·Ï ¿äûÇÑ´Ù.

  1. NF_ACCEPT: º¸Åëó·³ °è¼Ó ÁøÇà½ÃŲ´Ù.

  2. NF_DROP: ÆÐŶÀ» ¹ö¸°´Ù. Áï °è¼Ó ÁøÇà½ÃŰÁö ¾Ê´Â´Ù.

  3. NF_STOLEN: ÆÐŶÀ» Á¢¼öÇϰڴÙ. Áï °è¼Ó ÁøÇà½ÃŰÁö ¾Ê´Â´Ù.

  4. NF_QUEUE: ÆÐŶÀ» Å¥·Î º¸³½´Ù.(º¸Åë »ç¿ëÀÚ °ø°£¿¡¼­ÀÇ Ã³¸®¸¦ ¸ñÀûÀ¸·Î ÇÑ´Ù.)

  5. NF_REPEAT: ÇöÀç ÈÅÀ» ´Ù½Ã È£ÃâÇÑ´Ù.

³ÝÇÊÅÍÀÇ ´Ù¸¥ ºÎºÐÀº µÚ¿¡ ³ª¿À´Â Ä¿³Î ºÎºÐ¿¡¼­ ´Ù·ç±â·Î ÇÑ´Ù.

ÀÌ»ó°ú °°Àº °ÍÀÌ ±âÃʰ¡ µÇ¾î, ÀúÀÚµéÀº ´ÙÀ½ µÎ Àý¿¡ º¸ÀÎ °Í°ú °°Àº º¹ÀâÇÑ ÆÐŶ 󸮸¦ ¸¸µé ¼ö ÀÖ´Ù.

3.2. ÆÐŶ ¼±ÅÃ: IP Tables

IP tableÀ» È£ÃâÇÏ´Â ÆÐŶ ¼±Åà ½Ã½ºÅÛÀº ³ÝÇÊÅÍ ÇÁ·¹ÀÓ¿÷À» ±â¹ÝÀ¸·Î ±¸¼ºµÇ¾úÀ¸¸ç, ÀÌ´Â È®À强À» °¡Áö°í ipchains·ÎºÎÅÍ Á÷Á¢ ¹°·Á¹ÞÀº À¯»êÀÌ´Ù.(ipchains´Â ipfwadmÀ¸·ÎºÎÅÍ ¹°·Á¹Þ°í, ipfwadmÀº BSDÀÇ ipfw IIRC·ÎºÎÅÍ ¹°·Á¹Þ¾Ò´Ù.) Ä¿³Î ¸ðµâÀº »õ·Î¿î Å×À̺íÀ» µî·ÏÇÒ ¼ö ÀÖÀ¸¸ç, ÀÓÀÇÀÇ ÆÐŶÀÌ ÁÖ¾îÁø Å×À̺íÀ» Åë°úÇϵµ·Ï ¿äûÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ÆÐŶ ¼±Åà ¹æ¹ýÀº ÆÐŶ ÇÊÅ͸µ(Áï `ÇÊÅÍ' Å×À̺í), ³×Æ®¿÷ ÁÖ¼Ò º¯È¯(`nat' Å×À̺í) ±×¸®°í Á¾ÇÕÀûÀÎ pre-route ÆÐŶ mangling(`mangling' Å×À̺í')¿¡ »ç¿ëÇÑ´Ù.

³ÝÇÊÅÍ¿¡ µî·ÏµÈ ÈÅÀº ´ÙÀ½°ú °°´Ù.(¿©±â¼­´Â °¢°¢ÀÇ ÇÔ¼ö°¡ ½ÇÁ¦·Î È£ÃâµÇ´Â ¼ø¼­·Î °¢°¢ÀÇ ÈÅ¿¡ ÀÖ´Â ÇÔ¼ö¿Í °°ÀÌ º¸¿´´Ù.)
   --->PRE------>[ROUTE]--->FWD---------->POST------>
       Conntrack    |       Filter   ^    NAT (Src)
       Mangle       |                |    Conntrack
       NAT (Dst)    |             [ROUTE]
       (QDisc)      v                |
                    IN Filter       OUT Conntrack
                    |  Conntrack     ^  Mangle
                    |                |  NAT (Dst)
                    v                |  Filter
		

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. ±×ÀÌ¿Ü Ãß°¡µÈ »çÇ×

»õ·Î¿î À¯¿¬¼º ¶§¹®¿¡ Á¤¸»·Î ¹«¼­¿î ÀÏÀ» °ÞÀ» ±âȸ°¡ ¸¹¾ÆÁ³Áö¸¸, ´Ù¸¥ »ç¶÷µéÀÌ Çâ»óµÈ Äڵ带 ÀÛ¼ºÇϰųª ±âÁ¸ÀÇ Äڵ带 ¿ÏÀüÈ÷ ´ëÃ¼ÇØ ¹ö¸± ¼ö ÀÖ´Â ±âȸ ¿ª½Ã ¸¹¾ÆÁ³´Ù.