== [wiki:NAT NAT] == * ÀÛ¼ºÀÚ [wiki:minzkn Á¶ÀçÇõ] ([mailto:minzkn@minzkn.com]) * °íÄ£°úÁ¤ 2010³â 10¿ù 24ÀÏ : óÀ½¾¸ == NATÀÇ Çʿ伺 == NATÀº ´ÙÀ½°ú °°Àº ¿ä±¸»çÇ×À» ÃæÁ·Çϱâ À§Çؼ­ ź»ýÇÏ¿´½À´Ï´Ù. * °øÀÎ IPÀÇ ºÎÁ· NATÇÏÀ§¿¡¼­´Â »ç¼³ IP¸¦ »ç¿ëÇÏ°í, ¿ÜºÎ InternetÁÖ¼Ò·Î Á¢¼Ó½Ã »ç¼³ IP¸¦ °øÀÎ IPÁÖ¼Ò·Î º¯È¯Çϵµ·Ï ÇÔÀ¸·Î½á °øÀÎ IPÁÖ¼ÒÀÇ ºÎÁ·¹®Á¦¸¦ ÇØ°áÇÕ´Ï´Ù. * NATÇÏÀ§ÀÇ ³×Æ®¿÷À» ¿ÜºÎ·ÎºÎÅÍ º¸È£ Á÷Á¢ÀûÀ¸·Î ¿ÜºÎ·ÎºÎÅÍ NATÀÇ ³»ºÎ·Î Á¢±ÙÀÌ Á¦ÇÑµÇ¸ç ³»ºÎ »ç¼³ IP´ë¿ªÀÇ Æ®·¡ÇÈÀÌ ¿ÜºÎ InternetÀ¸·Î Á¢¼ÓÇÏ·Á´Â °æ¿ì°¡ ¾Æ´Ï¸é ±âº»ÀûÀ¸·Î RoutingµÇÁö ¾ÊÀ¸¹Ç·Î ¿ÜºÎ·ÎºÎÅÍ º¸È£µË´Ï´Ù. == NATÀÇ Á¾·ù == ÀϹÝÀûÀ¸·Î NATÀº ÁÖ¼Òº¯È¯À» Çϱâ À§ÇÏ¿© PacketÀÇ ´ÙÀ½»çÇ×À» Á¶Á¤ÇÕ´Ï´Ù. 1. IP headerÀÇ IP addressºÎºÐ 1. UDP headerÀÇ portºÎºÐ 1. TCP headerÀÇ portºÎºÐ ´ÙÀ½Àº InternalÀ§Ä¡¿¡¼­ OutputBound½Ã¿¡ ¾î¶»°Ô ExternalÀ§Ä¡·Î ¹Ù²î´Â°¡ÀÇ ÁÖ¼Òº¯È¯±ÔÄ¢¿¡ ÀÇ°ÅÇÑ ºÐ·ù¿¡ ÀÇÇÑ ¸íĪÀÔ´Ï´Ù. * Full Cone InternalÀ§Ä¡¿¡¼­ UDP packetÀ» ¸ñÀûÁö·Î º¸³¾¶§ NAT¿¡¼­´Â ÇØ´ç Interal IP¿Í Port¸¦ ÀϽÃÀûÀ¸·Î ±â¾ïÇÏ°í NATÀÇ Port¿Í mappingÇÏ¿© ÁÖ¸ç ÇØ´ç Port·Î Data°¡ µé¾î¿À¸é Ãâ¹ßÁö¸¦ »ó°üÇÏÁö ¾Ê°í ±â¾ïÇÏ¿´´ø InternalÀ§Ä¡·Î forwardÇØÁÝ´Ï´Ù. * Port Restricted Cone InternalÀ§Ä¡¿¡¼­ UDP packetÀ» ¸ñÀûÁö·Î º¸³¾¶§ NAT¿¡¼­´Â ÇØ´ç Interal IP¿Í Port, ±×¸®°í ¸ñÀûÁö IP¿Í Port¸¦ ÀϽÃÀûÀ¸·Î ±â¾ïÇÏ°í NATÀÇ Port¿Í mappingÇÏ¿© ÁÖ¸ç ÇØ´ç Port·Î Data°¡ µé¾î¿À¸é Ãâ¹ßÁöIP ¹× Port¿Í ±â¾ïÇÏ°í ÀÖ´Â ¸ñÀûÁö IP ¹× Port°¡ °°À»¶§ ÇØ´ç InternalÀ§Ä¡·Î forwardÇØÁÝ´Ï´Ù. * Restrict Cone InternalÀ§Ä¡¿¡¼­ UDP packetÀ» ¸ñÀûÁö·Î º¸³¾¶§ NAT¿¡¼­´Â ÇØ´ç Interal IP¿Í Port, ±×¸®°í ¸ñÀûÁö IP¸¦ ÀϽÃÀûÀ¸·Î ±â¾ïÇÏ°í NATÀÇ Port¿Í mappingÇÏ¿© ÁÖ¸ç ÇØ´ç Port·Î Data°¡ µé¾î¿À¸é Ãâ¹ßÁöIP¿Í ±â¾ïÇÏ°í ÀÖ´Â ¸ñÀûÁö IP°¡ °°À»¶§ ÇØ´ç InternalÀ§Ä¡·Î forwardÇØÁÝ´Ï´Ù. * Symmetric Cone InternalÀ§Ä¡¿¡¼­ UDP packetÀ» ¸ñÀûÁö·Î º¸³¾¶§ NAT¿¡¼­´Â ÇØ´ç Interal IP¿Í Port, ±×¸®°í ¸ñÀûÁö IP¿Í Port¸¦ ÀϽÃÀûÀ¸·Î ±â¾ïÇÏ°í NATÀÇ Port¿Í mappingÇÏ¿© Áִµ¥ ¸ñÀûÁö Port°¡ ¹Ù²î¸é ¿ª½Ã »õ·Î¿î Port·Î mappingÇÕ´Ï´Ù. ÇØ´ç Port·Î Data°¡ µé¾î¿À¸é Ãâ¹ßÁöIP ¹× Port¿Í ±â¾ïÇÏ°í ÀÖ´Â ¸ñÀûÁö IP ¹× Port°¡ °°À»¶§ ÇØ´ç InternalÀ§Ä¡·Î forwardÇØÁÝ´Ï´Ù. NATÀÇ ±¸Çö¹æ¹ý¿¡ µû¶ó¼­ ´ÙÀ½°ú °°ÀÌ ºÐ·ùµË´Ï´Ù. NATÀº Exclude => Redirect => Reverse => Normal ÀÇ ¼ø¼­·Î Àû¿ëµÇµµ·Ï ±¸ÇöÇϴ°ÍÀÌ ÀϹÝÀûÀ̸ç Àû¿ë¼ø¼­°¡ ´Ù¸¥ °æ¿ì Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏÁö ¾ÊÀ»¼öµµ ÀÖ½À´Ï´Ù. * Normal NAT »ç¼³ IP¸¦ 1°³ÀÇ °øÀÎ IP·Î ¹Ù²Ù´Â ÇüÅ·Πµ¿½Ã¿¡ SessionÀ» ¾à 50000~65535°³Á¤µµ±îÁö¸¸ ó¸®ÇÒ¼ö Àִ°ÍÀÌ º¸ÅëÀ̸ç ÀÌ°ÍÀº ´õÀÌ»ó Port¸¦ ÇÒ´çÇÒ¼ö ¾ø±â ¶§¹®¿¡ ¹ß»ýÇÏ´Â Á¦¾à»çÇ×ÀÔ´Ï´Ù. ±×·¯³ª ÀÌ °æ¿ì °øÀÎIP¸¦ 2°³ÀÌ»óÀ» ¹­¾î¼­ ±¸ÇöÇÏ°Ô µÇ¸é ±× ¸¸Å­ µ¿½Ãó¸® Session À» ¿¬ÀåÇÒ¼ö Àֱ⵵ ÇÕ´Ï´Ù. * Reverse NAT Normal NAT¿¡¼­ ¼³Á¤µÈ °øÀÎ IP·ÎºÎÅÍ ³»ºÎ »ç¼³¸ÁÀ¸·Î Á¢¼Ó¿ä±¸¸¦ ¹Þ´Â °æ¿ì ¿©·¯°³ÀÇ »ç¼³ IPÁß¿¡¼­ ¾î¶² IP·Î º¯È¯ÇØ¾ß ÇÏ´ÂÁö ¾Ë¼ö ¾ø°Ô µË´Ï´Ù. ÀÌ °æ¿ì¿¡ ÁÖ¼Òº¯È¯¿¡ ´ëÇÑ ¼³Á¤ÀÌ µû·Î ÀÖ¾î¾ß ÇÕ´Ï´Ù. À̶§ ¼³Á¤À» Reverse NAT·Î 1:1 Mapping ¶Ç´Â Static mappingÀ̶ó°í ºÎ¸£±âµµ ÇÕ´Ï´Ù. * Redirect NAT ¸ñÀûÁö ÁÖ¼Ò¸¦ ÀçÁöÇâ(º¯È¯)Çϴ°ÍÀ» ¸»ÇÕ´Ï´Ù. * Exclude NAT NAT°ú Router»çÀÌ¿¡ ¼­¹ö°¡ ÀÖ°í ³»ºÎ »ç¼³IP»ç¿ëÀÚ°¡ ÀÌ ¼­¹ö·Î Á¢¼ÓÀ» ÇÒ¼ö ÀÖµµ·Î Çϱâ À§Çؼ­ Normal NATÀÇ Àû¿ëÀ» ¹ÞÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. == UDP Hole-punching == [attachment:STUN°³¿ä.png] * Client A¿Í B´Â ¸ðµÎ ÀϹÝÀûÀ¸·Î 30ÃÊ(NAT°øÀ¯±âÀÇ ¼³Á¤¿¡ ÀÇÁ¸Àû)¸¦ ³ÑÁö ¾Ê´Â °£°ÝÀ¸·Î Server¿Í UDP¼Û¼ö½ÅÀ» ¼öÇàÇÕ´Ï´Ù. À̶§ ClientA ¿Í B´Â Server·Î ¸ÕÀú UDP packetÀ» Àü¼ÛÇÏ°Ô µÇ¸ç À̶§ ¹Ýµå½Ã Server ´Â ¼ö½ÅµÈ UDP packetÀÇ Source IP¿Í Source Port·Î ÀÀ´äÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. * (1) : Client A¿Í B¿¡¼­ Server·Î Àü¼ÛÇÑ PacketÀº NATÀ» Åë°úÇϸ鼭 SourceIP´Â ExternalIP·Î º¯È¯µÇ¸ç SourcePort´Â ÀÓÀÇÀÇ ExternalPort·Î ÀϽÃÀûÀÎ ½Ã°£µ¿Àº MappingµÇ¾î À¯ÁöµË´Ï´Ù. * (2) : Server·Î µµÂøµÈ PacketÀº SourceIP:SourcePort°¡ NATÀÇ ExternalIP¿Í ÀÓÀÇ·Î MappingµÈ Port·Î ÇÏ¿© ¼ö½ÅµË´Ï´Ù. * (3) : Server´Â µµÂøµÈ PacketÀÇ SourceIP:SourcePort·Î ÀÀ´äÆÐŶÀ» Àü¼ÛÇÕ´Ï´Ù. * (4) : Server·ÎºÎÅÍ Àü¼ÛµÈ PacketÀº NAT¿¡ µµ´ÞÇϸé ÇØ´ç Port mappingÀÌ À¯È¿ÇÒ¶§ ÇØ´ç PrivateIP¿Í Port·Î º¯È¯ÇÏ¿© Client·Î Àü´ÞÇÕ´Ï´Ù. À̷νá ÇØ´ç ÁÖ¼Ò¿Í Æ÷Æ®¸¦ ÅëÇؼ­ »óÈ£°£ ¾ç¹æÇâ Åë½ÅÀÌ °¡´ÉÇØÁý´Ï´Ù. * (5) : ÀÌÁ¦ Server·ÎºÎÅÍÀÇ ÀÀ´äÆÐŶ¿¡ °¢°¢ÀÇ Client´Â »ó´ë¹æ ClientÀÇ ExternalIP¿Í ExternalPort¸¦ ¼ö½ÅÇÏ¿© ÇØ´ç ÁÖ¼Ò·Î PacketÀ» Àü¼ÛÇÕ´Ï´Ù. * (6) : Àû¾îµµ ÇÑÂÊClientÀÇ PacketÀÌ Àü¼Û¿¡ ¼º°øÇÏ°Ô µÇ¸ç(´Ü, ¾ç´ÜÀÌ Symmetric ConeÀÎ °æ¿ì´Â ½ÇÆÐÇÒ¼ö ÀÖÀ½) ÀÌÈÄ »ó´ë¹æ Client·ÎºÎÅÍ µµÂøÇÑ PacketÀÇ SourceIP:SourcePort·Î Àü¼ÛÇÒ¼ö ÀÖ°Ô µË´Ï´Ù. * (7) : ¸¸¾à Client A¿Í Client B°¡ °°Àº NAT¿¡ ÀÖ´Ù¸é ¼­·Î °°Àº NAT¿¡¼­ ExternalIP·Î Àü¼ÛÇϴ°ÍÀº Àü´ÞµÇÁö ¾ÊÀ»¼ö ÀÖÀ¸¸ç ÀÌ °æ¿ì ¼­·Î BroadcastµîÀ» ÅëÇؼ­ È®ÀÎÇØ¾ß ÇÕ´Ï´Ù. * Åë»óÀûÀ¸·Î ÀÌ ¹æ½ÄÀº ¾ç´ÜÀÌ µÑ´Ù Symmetric ConeÀÌ ¾Æ´Ñ °æ¿ì¿¡ ÇÑÇؼ­ ¼º°øÈ®·üÀÌ ¸Å¿ì ³ô´Ù´Âµ¥ Ä¿´Ù¶õ ÀåÁ¡ÀÌ ÀÖ´Ù. ±×·¯³ª UDP protocolÀ» »ç¿ëÇϹǷΠ¾ç´Ü°£¿¡ ½Å·Ú¼ºÀ» º¸ÀåÇÒ¼ö ÀÖ´Â ¹æ¾ÈÀÌ º¸¿ÏµÇ¾î¾ß Çϸç Àü¼ÛÈ¿À²À» À§Çؼ­ ÀçÀü¼ÛÀ» È¿À²ÀûÀ¸·Î °ü¸®Çϵµ·Ï ¼³°èÇØ¾ß ÇÑ´Ù´Â Á¡¿¡¼­ ´ÜÁ¡À̶ó¸é ´ÜÁ¡À̶ó°í ÇÒ¼ö ÀÖ´Ù. == TCP Hole-punching == ||[attachment:TCPHolePunchingSequence.png] || * TCPÀÇ ±âÃÊÁö½Ä »çÇ× - 3 way handshake (ÀϹÝÀûÀÎ Connection¿¡ ´ëÇÑ ÀýÂ÷) * A¿¡¼­ B·Î ¿¬°áÇÏ´Â °æ¿ì A´Â SYN flag°¡ ONÀÌ°í Seq°ªÀ» ÀÓÀÇ·Î ¼³Á¤ÇÑ ÆÐŶÀ» B·Î Àü¼ÛÇÕ´Ï´Ù. * A´Â SYN_SENT »óÅ * B´Â SYN_RECEIVED »óÅ * B´Â ACK flag¿Í SYN flag°¡ ONÀÌ°í AckSeq?´Â A·Î ºÎÅÍ ¹ÞÀº Seq¿¡ 1À» ´õÇÑ°ªÀ¸·Î ¼³Á¤ÇÏ°í Seq°ªÀ» ÀÓÀÇ·Î ¼³Á¤ÇÑ ÆÐŶÀ» A·Î Àü¼ÛÇÕ´Ï´Ù. * A¿Í B´Â HALF_OPEN »óÅ * ÀÌ °æ¿ì B¿¡¼­´Â HALF_OPEN»óÅ´ Backlog Queue¿¡¼­ °ü¸®µË´Ï´Ù. * A´Â ACK flag¸¸ ONÀÌ°í AckSeq?´Â B·ÎºÎÅÍ ¹ÞÀº Seq¿¡ 1À» ´õÇÑ°ªÀ» ¼³Á¤ÇÏ°í B·Î Àü¼ÛÇÏ¿© ¿¬°á¼º¸³À» ¿Ï¼ºÇÕ´Ï´Ù. * A¿Í B´Â ESTABLISHED »óÅ * TCP Hole-punchingÀÇ ±âº» ¿ø¸®´Â SYN-ACKÀÇ ÆÐŶÀ» ¹Þ¾ÆµéÀ̵µ·Ï ÇѴٴµ¥ ÀÖ´Ù. * Åë»óÀûÀ¸·Î ÀÌ ¹æ½ÄÀÌ ¼º°øÇϱâ´Â ¸Å¿ì ¾î·Æ´Ù. ÇÏÁö¸¸ Á¦´ë·Î ¼º°øÇÑ´Ù¸é Æ®·¡ÇÈÀÌ 100% Client¾ç´Ü°£¿¡¼­ ó¸®ÇÏ°Ô µÇ°í TCP¸¦ ±â¹ÝÀ¸·Î Çϱ⠶§¹®¿¡ ½Å·Ú¼ºµµ ¾î´ÀÁ¤µµ ÇýÅÃÀ» ¾òÀ»¼ö ÀÖÀ¸¸ç Æ®·¡ÇÈÀÌ Server·Î ÁýÁߵǴ °ÍÀ» ¸·À»¼ö ÀÖ´Ù. == Âü°íÀÚ·á == * [^http://www.bford.info/pub/net/p2pnat/#rfc2460] * [^http://en.wikipedia.org/wiki/STUN] * [^http://alumnus.caltech.edu/~dank/peer-nat.html] * [^http://www.mindcontrol.org/~hplus/nat-punch.html] * [^http://tools.ietf.org/rfc/rfc5389.txt RFC5389 - Session Traversal Utilities for NAT (STUN)]