NAT
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 Network address translation
1.1 SNAT
1.2 Masquerade
1.3 rp_filter
1.4 DNAT
1.4.1 DNAT¸¦ ÀÌ¿ëÇÑ Load balancing
1.4.2 ¼º´É ÃøÁ¤ °á°ú
1.4.3 ¹®Á¦ ÇØ°á ¹× Æ©´×
2 stateless NAT
3 history

1 Network address translation

"ÄÄÇ»ÅÍ ³×Æ®¿öÅ©¿¡¼­ NAT´Â IP ÆÐŶ Çì´õÀÇ IP ÁÖ¼Ò¸¦ º¯°æÇÏ´Â °úÁ¤À» ÀǹÌÇÑ´Ù" ¶ó°í ¼³¸íÀ» ÇÕ´Ï´Ù. ´ëÃæ Àǹ̴ ¾Ë°Ú´Âµ¥, ¾îµð¿¡ ¾µ¸ð°¡ ÀÖÀ»Áö°¡ ±Ã±ÝÇÕ´Ï´Ù.

ÀÎÅͳÝÀº °ø°³¸Á ÀÔ´Ï´Ù. Public ¸ÁÀ̶ó°í ÇÏÁÒ. ¸ðµç Á¤º¸°¡ °ø°³µË´Ï´Ù. "¸ðµç°Ô °ø°³µÈ´Ù!!" ¸ÚÁø ¸»À̱ä ÇÏÁö¸¸ ¿ÜºÎ·Î ºÎÅÍ °Ý¸®µÈ ¸Á¿¡¼­ Ȱµ¿ÇÏ°í ½ÍÀ» ¶§µµ Àֱ⠸¶·ÃÀÔ´Ï´Ù. ȸ»ç ¾÷¹«¿¡ ¾²´Â ¸ÁÀÌ ±×·¸½À´Ï´Ù. ±×·¡¼­ ¿ÜºÎ·Î ºÎÅÍ °Ý¸®µÈ ¸ÁÀ» ¸¸µå´Âµ¥, Private ¸ÁÀ̶ó°í ÇÕ´Ï´Ù.

private¸ÁÀº private¸Á ±¸¼º¿ëÀ¸·Î ³²°ÜµÐ ip ÁÖ¼Ò¿µ¿ªÀ» »ç¿ëÇÕ´Ï´Ù. °¢ Ŭ·¡½º º°·Î private ¸Á ±¸¼º¿ë ÁÖ¼Ò¸¦ ³²°Üµ×½À´Ï´Ù.

RFC1918 À̸§ IP ÁÖ¼Ò ¹üÀ§ ÁÖ¼Ò °¹¼ö CIDR (subnet mask) host id Å©±â
24-bit ºí·° 10.0.0.0 ~ 10.255.255.255 16,777,216 10.0.0,0/8 (255.0.0.0) 24bits
20-bit ºí·° 172.16.0.0 ~ 172.31.255.255 1,048,576 172.16.0.0/12 (255.240.0.0) 20bits
16-bit ºí·° 192.168.0.0 ~ 192.168.255.255 65,536 192.168.0.0/16 (255.250.0.0) 16bits

ȸ»ç °³¹ßÆÀÀÌ »ç¿ëÇÒ private¸ÁÀ» 192.168.100.0/24·Î ±¸ÃàÀ» Çϸé ÀÎÅͳݿ¡¼­ °Ý¸®ÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù.


°³¹ß¸ÁÀÇ IP´Â ¿ÜºÎ¿¡¼­ Á¢±ÙÇÒ ¼ö ¾øÀ¸¹Ç·Î ¾ÈÀüÇÏ°Ô ¿î¿ëÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù.

ÇÏÁö¸¸ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. ¿ÜºÎ¿¡¼­ °Ý¸®µÉ »Ó¸¸ ¾Æ´Ï¶ó ³»ºÎ¿¡¼­ ¿ÜºÎ·Î ³ª°¥ ¼ö ¾ø±â ¶§¹®ÀÌ. °³¹ßÀÚ ÀÔÀå¿¡¼­´Â ÀÎÅͳÝÀ» »ç¿ëÇÒ ¼ö ¾ø°Ô µÇ´Â °ÅÁÒ.

±×·³ IP ÁÖ¼Ò¸¦ ¹Ù²Ù¸é ¾î¶»°Ô µÉ±î¿ä ? 192.168.100.5 ÁÖ¼Ò°¡ switch¸¦ ÅëÇØ¼­ ÀÎÅͳÝÀ¸·Î ³ª°¥ ¶§, source ip ÁÖ¼Ò¸¦ Public IP ÁÖ¼Ò·Î ¹Ù²ã ¹ö¸®´Â °ÅÁÒ.


switch¿¡ ÆÐŶÀÌ µµÂøÇϸé source ipÁÖ¼Ò¸¦ 201.12.23.44·Î ¹Ù²ã¼­ ÀÎÅͳÝÀ¸·Î º¸³»´Â °Ì´Ï´Ù. ÀÌ ÁÖ¼Ò´Â ÀÎÅͳݿ¡ ¾Ë·ÁÁø ÁÖ¼ÒÀ̹ǷΠÀÎÅÍ³Ý µ¥ÀÌÅÍ Åë½ÅÀÌ °¡´ÉÇØÁö°ÚÁÒ. switch´Â NAT¸¦ Àû¿ëÇÑ ÆÐŶÀÇ Á¤º¸¸¦ À¯ÁöÇÕ´Ï´Ù. ±×·¡¼­ NATµÈ ÆÐŶÀÌ µé¾î¿À¸é, À̸¦ È®ÀÎÇØ¼­ ¼ö½Å ÆÐŶÀÇ destination address¸¦ 192.168.100.5·Î ¹Ù²ã¼­ ³»ºÎ¸ÁÀ¸·Î º¸³À´Ï´Ù.

1.1 SNAT

À§ ¿¹¿¡¼­´Â Source IP ÁÖ¼Ò¸¦ º¯°æÇß½À´Ï´Ù. À̰ÍÀ» SNAT¶ó°í ÇÕ´Ï´Ù. SNAT¸¦ ÇÏ¸é ³»ºÎ ÀÎÅͳݿ¡¼­ ¿ÜºÎ ÀÎÅͳÝÀ¸·Î ³ª°¥ ¼ö ÀÖ°ÚÁÒ ? °ú°Å ¸®´ª½º·Î Ȩ³×Æ®¿öÅ©¸¦ ±¸¼ºÇϱâ À§Çؼ­ »ç¿ëÇß´ø IP ¸Å½ºÄ¿·¹À̵ù°ú °°Àº ±â¼úÀ̶ó°í º¸½Ã¸é µË´Ï´Ù.

SNAT´Â ³»ºÎ¿¡¼­ ¿ÜºÎ·Î ³ª°¥ ¼ö´Â ÀÖÁö¸¸, ¿ÜºÎ¿¡¼­ ³»ºÎ·Î µé¾î¿Ã ¼ö´Â ¾ø½À´Ï´Ù. ¿ÜºÎ¿¡¼­ ³»ºÎ·Î µé¾î¿À·Á¸é DNAT¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. DNAT´Â ´ÙÀ½ Àå¿¡¼­ ÀÚ¼¼È÷ ´Ù·ê °Ì´Ï´Ù.

¸®´ª½º¿¡¼­´Â iptables¸¦ Á¶ÀÛÇØ¼­ SNAT¸¦ ±¸¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·³ ½ÇÁ¦ ±¸¼ºÀ» ÇØº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

SNAT ±¸¼ºÀ» À§Çؼ­´Â ÃÖ¼Ò 2°³ÀÇ ÄÄÇ»ÅͰ¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. SNAT¸¦ ¼öÇàÇÏ´Â router ÄÄÇ»ÅÍ, ±×¸®°í ³»ºÎ ¸Á ±¸¼ºÀ» À§ÇÑ ÄÄÇ»ÅÍ Çϳª. Àú´Â virtualbox¸¦ ÀÌ¿ëÇØ¼­ Å×½ºÆ® ȯ°æÀ» ±¸ÃàÇß½À´Ï´Ù. ¿î¿µÃ¼Á¦ ȯ°æÀº ´ÙÀ½°ú °°½À´Ï´Ù.


  • Linux Box : virtualbox¸¦ ½ÇÇàÇÒ Á¦ Linux ¹Ú½ºÀÔ´Ï´Ù. ¿î¿µÃ¼Á¦´Â Ubuntu 11.10ÀÔ´Ï´Ù. iptables¸¦ Á¶ÀÛÇØ¼­ SNAT¸¦ ¼öÇàÇÒ °Ì´Ï´Ù.
  • Test VM : Å×½ºÆ®¸¦ À§Çؼ­ »ç¿ëÇÏ´Â VMÀ¸·Î guest ¿î¿µÃ¼Á¦´Â ¿ª½Ã Ubuntu 11.10ÀÔ´Ï´Ù.

Linux BoxÀÇ routing Å×À̺íÀÔ´Ï´Ù. °¡»ó ÀÎÅÍÆäÀ̽ºÀÎ vboxnet0À» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇØ¼­ test vm°ú Åë½ÅÀ» ÇÒ°Ì´Ï´Ù.
# route -n 
Kernel IP routing table 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 
172.30.1.0      0.0.0.0         255.255.255.0   U     2      0        0 wlan0 
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 vboxnet0 
0.0.0.0         172.30.1.254    0.0.0.0         UG    0      0        0 wlan0 
 
ÀÎÅͳÝÀ¸·Î ³ª°¡´Â ÀÎÅÍÆäÀ̽º´Â wlan0ÀÔ´Ï´Ù.

Test VMÀÇ routing Å×À̺í ÀÔ´Ï´Ù. °ÔÀÌÆ®¿þÀ̰¡ 192.168.56.1ÀÎ °ÍÀ» È®ÀÎÇÒ ¼ö Àֳ׿ä.
# route 
Kernel IP routing table 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 
192.168.56.0    *               255.255.255.0   U     0      0        0 eth0 
default         192.168.56.1    0.0.0.0         UG    100    0        0 eth0 
 

Test VM¿¡¼­ 192.168.100.1·ÎÀÇ Åë½ÅÀº ¹®Á¦°¡ ¾ø½À´Ï´Ù. ÇÏÁö¸¸ ÀÎÅÍ³Ý Åë½ÅÀÌ ºÒ°¡´ÉÇÕ´Ï´Ù. ±×·³ ÀÎÅÍ³Ý Åë½ÅÀÌ °¡´ÉÇϵµ·Ï Linux Box¿¡ SNAT¸¦ Àû¿ëÇØ º¸°Ú½À´Ï´Ù.
# iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o wlan0 -j SNAT --to 172.30.1.3 
 
Ãâ¹ßÁö ÁÖ¼Ò°¡ 192.168.56.0/24ÀÎ ÆÐŶ¿¡ ´ëÇØ¼­ nat·êÀ» °Ì´Ï´Ù. ÀÌ ÆÐŶÀº ÀÎÅͳÝÀ¸·Î ³ª°¡¾ß ÇϰÚÁÒ. ±×·¯´Ï wlan0À¸·Î º¸³»°Ú½À´Ï´Ù. SNAT¸¦ Àû¿ëÇϱâ·Î Çß½À´Ï´Ù. SNAT¸¦ Àû¿ëÇÑ´Ù´Â °ÍÀº source ip address¸¦ º¯°æÇÑ´Ù´Â ¾ê±âÀÔ´Ï´Ù. --to ¿É¼ÇÀ» ÀÌ¿ëÇØ¼­ ¼Ò½º ¾ÆÀÌÇÇ ÁÖ¼Ò¸¦ 172.30.1.3À¸·Î ¹Ù²Ù±â·Î Çß½À´Ï´Ù. POSTROUTING´Â ¶ó¿ìÆÃÀÌ ³¡³­ ÈÄ nat·êÀ» Àû¿ëÇϰڴٴ ÀǹÌÀÔ´Ï´Ù.

nat·êÀ» Àû¿ëÇÑ ÈÄ ¸®´ª½º Ä¿³ÎÀÇ ip_forward¸¦ 1·Î º¯°æÇØ ÁÝ´Ï´Ù.
# echo 1 > /proc/sys/net/ipv4/ip_forward 
 
sysctlÀ» ÀÌ¿ëÇØ¼­ °ªÀ» º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.
# sysctl -w net.ipv4.ip_forward=1 
 
ÀÌ Á¤º¸´Â Èֹ߼ºÀÔ´Ï´Ù. ºÎÆÃÇÏ¸é ³¯¾Æ°¡´Â Á¤º¸ÁÒ. sysctl.conf¿¡ Ãß°¡ÇÏ¸é ±âº» °ªÀ¸·Î À¯Áö µË´Ï´Ù.
# cat /etc/sysctl.conf 
.... 
net.ipv4.ip_forward=1 
.... 
 

nat·êÀÌ Àß Àû¿ë µÆ´ÂÁö Çѹø È®ÀÎÇØ º¸°Ú½À´Ï´Ù.
# iptables -t nat -L 
Chain POSTROUTING (policy ACCEPT) 
target     prot opt source               destination          
SNAT       all  --  192.168.56.0/24      anywhere            to:172.30.1.3  
 

ÀÌÁ¦ test vm (192.168.56.101)¿¡¼­ ÀÎÅͳÝÀÌ Àß µÇ´ÂÁö È®ÀÎ ÇØº¸°Ú½À´Ï´Ù. ¸ÕÀú ±¸±Û dns ¼­¹ö·Î ping Å×½ºÆ®¸¦ Çß½À´Ï´Ù.
# ping 8.8.8.8 
64 bytes from 8.8.8.8: icmp_req=1 ttl=48 time=206 ms 
64 bytes from 8.8.8.8: icmp_req=2 ttl=48 time=204 ms 
 
Àß µÇ´Â ±º¿ä. ½ÇÁ¦ ÆÐŶÀÇ ³»¿ëÀ» »ìÆìº¸°í ½Í¾î¼­, Linux Box¿¡¼­ tcpdump·Î icmp ÆÐŶÀ» ĸÃçÇß½À´Ï´Ù.
# tcpdump icmp -n 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes 
23:30:35.869225 IP 172.30.1.3 > 8.8.8.8: ICMP echo request, id 1562, seq 1, length 64 
23:30:36.072678 IP 8.8.8.8 > 172.30.1.3: ICMP echo reply, id 1562, seq 1, length 64 
23:30:36.870535 IP 172.30.1.3 > 8.8.8.8: ICMP echo request, id 1562, seq 2, length 64 
23:30:37.074904 IP 8.8.8.8 > 172.30.1.3: ICMP echo reply, id 1562, seq 2, length 64 
 
Ãâ¹ßÁö¿Í ¸ñÀûÁöÀÇ ÁÖ¼Ò°¡ 192.168.56.101ÀÌ ¾Æ´Ñ 172.30.1.3À¸·Î º¯°æµÈ°É È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. 192.168.56.101¿¡¼­ icmp ÆÐŶÀ» ĸÃçÇß½À´Ï´Ù.
# tcpdump icmp -n 
23:36:16.883660 IP 192.168.56.101 > 8.8.8.8: ICMP echo request, id 1746, seq 1, length 64 
23:36:17.086226 IP 8.8.8.8 > 192.168.56.101: ICMP echo reply, id 1746, seq 1, length 64 
 
ÁÖ¼Ò°¡ ´Ù½Ã 192.168.56.101·Î ¹Ù²ï °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. SNAT°¡ Àß Àû¿ëµÇ°í Àֳ׿ä.

1.2 Masquerade

±âº»ÀûÀ¸·Î masquerade¿Í snat´Â °°ÀºÀÏÀ» ÇÑ´Ù. À¯ÀÏÇÑ Â÷ÀÌÁ¡Àº snat´Â º¯°æÇÒ source ip¸¦ Á÷Á¢ ¸í½ÃÇϴµ¥, masquerade´Â ¸í½ÃÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. masquerade·êÀ» ¼³Á¤ÇÒ °æ¿ì ¾Ë¾Æ¼­ NICÀÇ ÀÎÅÍ³Ý ÁÖ¼Ò¸¦ ÇÒ´çÇÑ´Ù.
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
 

1.3 rp_filter

rp_filter´Â reverse path filter ¼³Á¤À» À§ÇÑ Ä¿³Î ¿É¼ÇÀÔ´Ï´Ù. ±âº» °ªÀº 1Àε¥, ÀÌ °æ¿ì ¿î¿µÃ¼Á¦´Â ÆÐŶÀÇ Ãâ¹ßÁö ÁÖ¼Ò°¡ ¶ó¿ìÆÃ Å×ÀÌºí¿¡ µî·ÏµÇÀÖ´ÂÁö¸¦ °Ë»çÇÕ´Ï´Ù. ¸¸¾à µî·ÏµÇÀÖÁö ¾Ê´Ù¸é ÆÐŶÀ» µå·ÓÇØ ¹ö¸³´Ï´Ù. NAT ÀåºñÀÇ °æ¿ì ³×Æ®¿öÅ© ±¸¼º¿¡ µû¶ó¼­ private NICÀÇ rp_filter ¿É¼ÇÀ» ²¨¾ß ÇÕ´Ï´Ù.
# echo 0 > /proc/sys/net/ipv4/conf/eth*/rp_filter 
 


1.4 DNAT

DNAT´Â SNATÀÇ ¹Ý´ëÀÔ´Ï´Ù.

¾Õ¼­ SNAT´Â ¿ÜºÎ¿¡¼­ ³»ºÎ·Î´Â Á¢±ÙÇÒ ¼ö ¾ø´Ù°í Çß½À´Ï´Ù. DNAT´Â ¸ñÀûÁö IP ÁÖ¼Ò¸¦ º¯°æÇؼ­ ³»ºÎ·Î Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ÆÐŶÀ» ¼öÁ¤ÇÕ´Ï´Ù.

NAT¸¦ ÀÌ¿ëÇÏ¸é ¿ÜºÎ ÀÎÅÍ³Ý È¯°æÀ¸·Î ºÎÅÍ ³»ºÎ ³×Æ®¿öÅ© ȯ°æÀ» ¼û±æ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ¶§¶§·Î ÀÎÅͳÝÀ» ³»ºÎ ³×Æ®¿öÅ©¸¦ Çã¿ëÇØ¾ß ÇÒ ¶§°¡ ÀÖ½À´Ï´Ù. DNAT¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù. SNATÀÇ ¹Ý´ë¶ó°í º¸½Ã¸é µÇ°Ú½À´Ï´Ù.

1.4.1 DNAT¸¦ ÀÌ¿ëÇÑ Load balancing

DNATÀÇ °¡Àå ´ëÇ¥ÀûÀÎ »ç¿ë¿ëµµ´Â ¼­ºñ½º Load balancingÀÔ´Ï´Ù. »ç¼³ ³×Æ®¿öÅ©ÀÎ 192.168.0.2, 192.168.0.3 µÎ °³¿¡ À¥ ¼­ºñ½º¸¦ ±¸ÃàÀ» Çß´Ù°í °¡Á¤ÇØ º¸°Ú½À´Ï´Ù. ¿ì¸®°¡ ¿øÇÏ´Â °ÍÀº µÎ °³ÀÇ ³»ºÎ À¥ ¼­¹ö·Î ºÎÇϸ¦ ºÐ»êÇÏ´Â °Ì´Ï´Ù. À¥ ¼­ºñ½º Æ÷Æ® ¹øÈ£´Â 80¹øÀ¸·Î Çß½À´Ï´Ù.

DNAT¸¦ ÀÌ¿ëÇÏ¸é ÆÐŶÀ» ³»ºÎ·Î º¸³¾ ¼ö°¡ ÀÖÀ¸¹Ç·Î, À¥ ¿äûÀ» 192.168.0.2¿Í 192.168.0.3 µÎ °³Áß Çϳª¸¦ ¼±ÅÃÇØ¼­ º¸³»µµ·Ï Á¦¾îÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù. iptable¸¦ ÀÌ¿ëÇØ¼­ ÀÌ·± ÀÏÀ» ÇÒ ¼ö°¡ ÀÖÁÒ.

DNAT Å×½ºÆ®¸¦ À§Çؼ­ ´ÙÀ½°ú °°Àº Å×½ºÆ® ȯ°æÀ» ¸¸µé¾ú½À´Ï´Ù.


Vituralbox¸¦ ÀÌ¿ëÇØ¼­ NAT ȯ°æÀ» ¸¸µé°í, 2 °³ÀÇ VM¿¡ Apache À¥ ¼­¹ö¸¦ ¼³Ä¡Çß½À´Ï´Ù. Å×½ºÆ®¸¦ À§Çؼ­ À©µµ¿ì 7ÀÌ ¼³Ä¡µÈ ³ëÆ®ºÏÀ» ÁغñÇß½À´Ï´Ù. DNAT·Î Load balnacing¸¦ Á¦´ë·Î ±¸ÇöÇÑ´Ù¸é, HTTP ¿äûÀÌ Web server 1°ú 2¿¡ Àû´çÈ÷ ºÐ¹èµÅ¾ß ÇÒ °Ì´Ï´Ù.

¾Æ·¡¿Í °°ÀÌ DNAT ¼³Á¤À» ¸¸µé¾ú½À´Ï´Ù.
# iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -m state \ 
--state NEW -m statistic --mode nth --every 2 --packet 0 -j DNAT --to 192.168.56.102 
# iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -m state \ 
--state NEW -m statistic --mode nth --every 1 --packet 0 -j DNAT --to 192.168.56.101 
 
SNAT¿Í´Â ´Þ¸® PREROUTING·êÀ» Ãß°¡Çß½À´Ï´Ù. ÆÐŶÀÇ IP ÁÖ¼Ò´Â ¶ó¿ìÆÃ µÇ±â Àü¿¡ nat ·êÀÌ °É·Á¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù. ±×·¡¾ß Á¦´ë·Î ¶ó¿ìÆÃÀÌ µÇ´Ï±î¿ä. wlan0 Áï ÀÎÅͳÝÀ¸·Î ºÎÅÍ µé¾î¿À´Â ÆÐŶ Áß ¸ñÀûÁö Æ÷Æ®°¡ 80ÀÎ Æ÷Æ®¿¡ ´ëÇØ¼­ ·êÀ» Àû¿ëÇÕ´Ï´Ù.

-m ¿É¼ÇÀ» ÀÌ¿ëÇØ¼­ ¸ðµâÀ» ·ÎµùÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸ÕÀú state ¸ðµâÀ» ·ÎµùÇߴµ¥¿ä. ÀÌ ¸ðµâÀ» ÀÌ¿ëÇÏ¸é ÆÐŶÀÇ ¿¬°á »óÅ¿¡ µû¸¥ Á¶°ÇÀ» ÁÙ ¼ö°¡ ÀÖ½À´Ï´Ù. ESTABLISHED, 'NEWµîÀ» ÁÙ ¼ö ÀÖ½À´Ï´Ù. NEW´Â »õ·Î ¿¬°áÀ» ¸Î´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

´ÙÀ½ statistic ¸ðµâÀ» ·ÎµùÇߴµ¥¿ä. ÀÌ ¸ðµâÀº Åë°è¿¡ ±â¹ÝÇØ¼­ ÆÐŶ¿¡ Á¶°ÇÀ» ÁÖ±â À§Çؼ­ »ç¿ëÇÕ´Ï´Ù. random°ú nth°¡ Àִµ¥, Àü nth¸¦ »ç¿ëÇß½À´Ï´Ù. ù¹øÂ° ¿¬°áÀº 101, µÎ¹øÂ° ¿¬°áÀº 102·Î º¸³»¶ó ÀÌ·± ÀǹÌÀÔ´Ï´Ù. random À̶ó¸é Áö ¸¾´ë·Î º¸³»°ÚÁÒ.

windows 7 ³ëÆ®ºÏ¿¡¼­ 172.30.1.3À¸·Î ¸î¹øÀÇ http ¿äûÀ» º¸³Â½À´Ï´Ù. Àß µÇ³×¿ä. ÆÐŶÀÌ ¾î¶»°Ô ºÐ¹èµÆ´ÂÁö iptables·Î È®ÀÎÇØ ºÃ½À´Ï´Ù.
# iptables -t nat -L -v 
Chain PREROUTING (policy ACCEPT 293 packets, 52270 bytes) 
 pkts bytes target     prot opt in     out   source     destination    
    6   312 DNAT       tcp  --  wlan0  any   anywhere   anywhere      
                    tcp dpt:www state NEW statistic mode nth every 2 packet 1 to:192.168.56.102  
    3   156 DNAT       tcp  --  wlan0  any   anywhere   anywhere       
                    tcp dpt:www state NEW statistic mode nth every 2 to:192.168.56.101  
 

1.4.2 ¼º´É ÃøÁ¤ °á°ú

À§ ȯ°æ¿¡¼­ iperf·Î ¼º´ÉÀ» ÃøÁ¤ Çß½À´Ï´Ù¸¸, °³ÀÎ ³ëÆ®ºÏ¿¡ Apache VM¿Ã·Á¼­ Å×½ºÆ® ÇÑ °Å¶ó¼­ ¼º´ÉÃøÁ¤ÀÇ Àǹ̰¡ ¾ø´õ±º¿ä. ¾ÈÁ¤ÀûÀ¸·Î ·Îµå ¹ë·±½ÌÀÌ µÈ´Ù´Â Á¤µµ¸¸ È®ÀÎÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. ±×·¡ ȸ»ç¿¡¼­ À¯»çÇÑ È¯°æÀ» ¸¸µé¾î¼­ ¼º´ÉÃøÁ¤À» Çß½À´Ï´Ù. ±âÁ¸ÀÇ haproxy¿Í ÇÔ²² Å×½ºÆ®¸¦ Çߴµ¥¿ä. ´ë·« Á¤¸®ÇÏÀÚ¸é ´ÙÀ½°ú °°½À´Ï´Ù.

haproxy
  • Å×½ºÆ® ´ë¿ªÆø : 1GBits/sec
  • ·Îµå ¹ë·±½Ì À¥ ¼­¹ö : apache ¼­¹ö 4´ë
  • haproxy : ¾à 360 Mbits/sec
  • iptables DNAT : ¾à 750 Mbits/sec
Âü°í·Î Å×½ºÆ®´Â KT uCloud »ó¿¡¼­ ÀÌ·ç¾îÁ³½À´Ï´Ù. haproxy¿Í DNAT¼­¹ö´Â ¹°¸®ÀûÀÎ ¼­¹ö°¡ ¾Æ´Ñ VM, Áï °¡»ó ¶ó¿ìÅÍ·Î Å×½ºÆ®¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ½À´Ï´Ù.

haproxy´Â 360MBits°¡ ÇѰèÀÔ´Ï´Ù. ÀÌ Âë¿¡¼­ CPU ÀÚ¿øÀ» ¸ðµÎ ¼Ò¸ðÇØ ¹ö¸³´Ï´Ù. core¸¦ ´Ã¸®°í - VMÀ̱⠶§¹®¿¡ core¸¦ ÇÒ´çÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. - haproxy¸¦ ¸ÖƼ ÇÁ·Î¼¼½º ¸ðµå·Î ÀÛµ¿ÇßÁö¸¸ ÇϳªÀÇ core¸¸À» »ç¿ëÇϱ⠶§¹®¿¡ À§ ÇѰ踦 ¹þ¾î³¯ ¼ö ¾ø¾ú½À´Ï´Ù. ³×Æ®¿öÅ© ÀÎÅÍÆäÀ̽º¿¡ ÇϳªÀÇ ring buffer¸¸ ¸¸µé¾îÁö±â ¶§¹®À¸·Î, ¹°¸®ÀûÀÎ ¼­¹ö¶ó¸é ¼º´ÉÀÌ ¿Ã¶ó°¥ ¼ö ÀÖ½À´Ï´Ù.

iptables´Â ´ë¿ªÆøÀÇ ´ëºÎºÐÀ» »ç¿ëÇÏ´Â °ÍÀ¸·Î º¸ÀÔ´Ï´Ù. CPU Á¡À¯À²µµ 5% ¹Ì¸¸À¸·Î haproxy¿¡ ºñÇÒ ¼ö ¾øÀ» Á¤µµ·Î È¿À²ÀûÀÔ´Ï´Ù. ±×·¸´Ù°í ÇØ¼­ haproxy º¸´Ù ¹«Á¶°Ç ÁÁÀº°¡ ÇÏ¸é ±×·¸Áö´Â ¾Ê½À´Ï´Ù. haproxy´Â ´Þ¸® Ä¿³Î ¸ðµå¿¡¼­ ÀÛµ¿Çϱ⠶§¹®¿¡, ·Îµå ¹ë·±½Ì ¼­¹öÀÇ À¥ ¼­ºñ½º¸¦ °Ë»çÇÏ´Â µîÀÇ ±â´ÉÀº ±â´ëÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. health °Ë»ç ±â´ÉÀ» ¸¸µå´Â ¼ö ¹Û¿¡ ¾øÁÒ.

1.4.3 ¹®Á¦ ÇØ°á ¹× Æ©´×

  • /proc/sys/net/ipv4/netfilter/ip_conntrack_count
    ÇöÀç ÃßÀûÇϰí ÀÖ´Â ¿¬°áÀÇ °¹¼ö
  • /proc/net/ip_conntrack
    ÃßÀûÁßÀÎ ¿¬°áÀÇ »ó¼¼ Á¤º¸¸¦ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
  • /proc/sys/net/ipv4/netfilter/ip_conntrack_max
    ÀÚ¿øÀÇ ÇѰ谡 ÀÖ°³ ¶§¹®¿¡, ¿¬°áÀ» ¹«ÇÑÁ¤ ÃßÀûÇÒ ¼ö´Â ¾ø½À´Ï´Ù. ÃßÀû°¡´ÉÇÑ ¿¬°áÀÇ ÃÖ´ë °¹¼ö°¡ Á¤ÀǵŠÀÖ½À´Ï´Ù. ¸¸¾à ÀÌ ÃÖ´ë °¹¼ö¸¦ Ãß°¡Çؼ­ ¿¬°áÀÌ ÀÌ·ïÁö¸é ÆÐŶÀÌ µå¶øµË´Ï´Ù. ¾ÆÁÖ ¹Ù»Û À¥ ¼­¹ö¸¦ DNAT ±â¹ÝÀ¸·Î ·Îµå¹ë·±½Ì ÇÒ °æ¿ì ip_conntrack_max¸¦ ÃʰúÇØ¼­ ÆÐŶÀÌ µå¶øµÉ ¼ö ÀÖ½À´Ï´Ù. À̶§´Â ip_conntrack_maxÀÇ °ªÀ» º¯°æÇÏ¸é µË´Ï´Ù.

    # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max  // ÇöÀç °ª 
    65536 
    # echo 131072 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max 
     
  • /sys/module/nf_conntrack_ipv4/parameters/hashsize
    ¿¬°á Á¤º¸´Â ºü¸¥ °Ë»öÀ» À§Çؼ­ ÇØ½¬ Å×ÀÌºí¿¡ ÀúÀåÀÌ µË´Ï´Ù. ÇØ½¬ Å×À̺íÀÇ Å©±â¸¦ Á¶Á¤ÇÏ´Â °ÍÀ¸·Î ¼º´ÉÀ» Æ©´×ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ù»Û À¥¼­¹ö¶ó¸é ÇØ½¬ Å×À̺íÀ» Å©°Ô ÇØ¼­ ¼±Çü °Ë»ö¿¡ µå´Â ½Ã°£À» ÁÙÀÏ ¼ö ÀÖ°Ú½À´Ï´Ù. ±âº» °ªÀº 16384 ÀÔ´Ï´Ù. ¸¸¾à ¹é¸¸°³ Á¤µµÀÇ ¿¬°áÀ» °ü¸®ÇÑ´Ù¸é, ÇϳªÀÇ ÇØ½¬ ·¹ÄÚµå´Â 1048576/16384 = 64°³ÀÇ Á¤º¸¸¦ °¡Áö°Ô µÉ°Çµ¥, ¼±Çü °Ë»öÇϱ⿡´Â Áö³ªÄ¡°Ô Å« ¼ö ÀÔ´Ï´Ù. 32768·Î Çϸé 32°¡ µÇ´Ï Á»´õ È¿À²ÀûÀ¸·Î ÀÛµ¿ÇÒ °Ì´Ï´Ù.

    # echo 32768 > /sys/module/nf_conntrack_ipv4/parameters/hashsize 
     
  • ÇØ½¬ Å×À̺íÀ» Å©°Ô ÇÏ¸é ¸Þ¸ð¸®µµ ±×¸¸Å­ ´õ ¼ÒºñÇÏ°Ô µÇ°ÚÁÒ. conntrack ÇϳªÀÇ Å©±â´Â 228 byteÀÌ´Ï ÇØ½¬ Å×À̺í Å©±â¿¡ µû¸¥ »ç¿ë ¸Þ¸ð¸®¸¦ °è»êÇÏ½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù.

ÀÌÁ¦ tcp timeout¿¡ ´ëÇÑ ½Ã°£À» Æ©´×ÇÏ¸é µË´Ï´Ù. timeout ½Ã°£ÀÌ ±æ¸é, ¿À·§µ¿¾È ÇØ½¬ Å×ÀÌºí¿¡ ³²¾Æ ÀÖÀ¸´Ï ¼º´ÉÀÌ ¶³¾îÁú ¼ö ¹Û¿¡ ¾ø½À´Ï´Ù. ÇØ½¬ Å×À̺íÀÌ °¡µæ Â÷¼­ ÆÐŶÀÌ µå¶øµÉ ¼öµµ ÀÖ½À´Ï´Ù. ±×·¯´Ï °¡´ÉÇÑ ÇØ½¬ Å×À̺íÀ» ºü¸£°Ô ºñ¿öÁÖ´Â°Ô ÁÁ°ÚÁÒ. ¹°·Ð ±×·¸´Ù°íÇØ¼­ timeoutÀ» ³Ê¹« ª°Ô ÇÏ¸é ¼­ºñ½º¿¡ ¹®Á¦°¡ »ý±æ ¼ö ÀÖÀ¸´Ï Àû´çÈ÷ Á¶ÀýÇØ Áà¾ß °Ú½À´Ï´Ù. °ü·Ã ÆÄÀϵéÀº /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_* ÀÔ´Ï´Ù.

¸®´ª½ºÀÇ ±âº» °ªÀº ±²ÀåÈ÷ Å®´Ï´Ù. °¡´ÉÇÑ ¿¬°áÀ» ¿À·¡ º¸Á¸Çϰڴٴ ¾ê±âÁÒ.
net.ipv4.ip_conntrack_max = 65496 
net.ipv4.netfilter.ip_conntrack_generic_timeout = 600 
net.ipv4.netfilter.ip_conntrack_icmp_timeout = 30 
net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 180 
net.ipv4.netfilter.ip_conntrack_udp_timeout = 30 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 259200 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120 
net.ipv4.netfilter.ip_conntrack_max = 65496 
 

ÀÌ°É À¥ ¼­ºñ½º¿¡ ¸Â°Ô Á¶ÀýÀ» Çß½À´Ï´Ù. À¥Àº ¿¬°áÀ» À¯ÁöÇÏ´Â ¼­ºñ½º°¡ ¾Æ´Ï´Ï timeoutÀ» ª°Ô °¡Á®°¡µµ ±¦ÂúÀ» °Ì´Ï´Ù. °ªÀº ¼­ºñ½º Á¾·ù¿Í Á¢¼Ó·®µî¿¡ µû¶ó¼­ ´Þ¶óÁú ¼ö ÀÖÀ¸´Ï, Àû´çÈ÷ Æ©´×ÇØ¼­ »ç¿ëÇÏ½Ã¸é µÇ°Ú½À´Ï´Ù.
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 20 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 20 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 20 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 20 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 30 
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 20  
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 20  
 

2 stateless NAT

Stateless NATÀº dumb NAT ¶ó°í ºÎ¸£±âµµ ÇÑ´Ù. NATÀÇ °¡Àå °£´ÜÇÑ ÇüÅ·Π´ÜÁö SNATÀº Source IP ÁÖ¼Ò¸¸ º¯È¯Çϰí, DNATÀº Destination IP¹Ý º¯È¯Çؼ­ ³Ñ±ä´Ù. conntrack¸¦ À¯Áö ÇÏÁö ¾ÊÀ¸¹Ç·Î stateful NAT º¸´Ù ºü¸£°Ô ÀÛµ¿ÇÒ °ÍÀ̶ó°í »ý°¢µÈ´Ù. ¹Ý¸é 1:1 static NAT¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

3 history

  • ÀÛ¼ºÀÏ : 2011³â 11¿ù 27ÀÏ
    • 2011³â 12/2ÀÏ : conntrack °ü·Ã ³»¿ë Ãß°¡


category_management
category__15
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.