L4 환경을 많이 써보지 않은 상태에서 좀 문제를 겪고 있어서 제가 모르는 점에 대한 조언을 얻고자 글을 올립니다.
[가] 라고 하는 L4 장비가 있는데, A 라는 IP 을 가집니다.
[나], [다] 라는 두 대의 리눅스 장비가 있고, 각각 사설IP 로 B 와 C 라는 IP 을 가집니다. 그래서 각각 eth0 에는 B 와 C 라는 IP 을 가집니다.
보통 리눅스에서 저런 환경이 되면, lo:0 라는 걸 만들고 lo:0 에 VIP 라는 이름으로 A 라는 IP 을 넣어두나요?
저는 주로 웹서버 환경 등에서만 써왔는데, 이번에 소켓을 쓰는데 문제가 되네요. 소켓으로 만든 서버 프로그램이 A 라는 IP 을 통해 L4 거쳐서 리눅스 서버로 요청이 들어갔는데, 리눅스 장비에서 값이 나갈 때 B 와 C IP 로 값이 나가서 L4 로 값이 가질 않아서 클라이언트에게 값이 전달되지 않는다고 하네요.
프로그램에서 연결된 소켓 채널에 그냥 값을 write 해주는게 다인데...
통상적으로 lo:0 와 같이 가상 이더넷을 만들어서 하는게 일반적인지, 그리고 보통 이런 환경에서 정상적으로 요청한 이더넷 쪽으로 보내는 옵션 같은게 있는지...있다면 그런 옵션 이름을 보통 뭐라고 부르는지 궁금합니다.
조언 부탁드립니다.
Á¦°¡ ÇÁ·Î±×·¡¸Ó¶ó Àåºñ ÂÊ µ¿ÀÛÀº Á» ¹«ÁöÇؼ...ÀÌ ºÎºÐµµ ¾Æ½Ã´Â ºÐ °è½Ã¸é Á¶¾ð ºÎŹµå¸³´Ï´Ù.
±×·¡¼ B³ª C¿¡¼ L4 °ÅÄ¡Áö ¾Ê°í ´ÙÀÌ·ºÆ®·Î º¸³¾¶§ B³ª C°¡ A¿¡¼ º¸³½ °Íó·³ ´«¼ÓÀÓÀ» Çϱâ À§Çؼ lo:0 °°Àº °É ¼³Á¤ÇÏ´Â °ÍÀÌÁö¿ä.
¾Æ¸¶µµ ¾ð±ÞÇϽŠ¹æ½ÄÀº ¼¹ö->L4ÀÇ Æ®·¡ÇÈÀ» ÁÙÀ̱â À§Çؼ »ç¿ëÇÏ´Â °Í °°Àºµ¥¿ä, Â÷¶ó¸® ¼¹öµéÀ» L4 ¾ÈÂÊÀ¸·Î µÎ°í NAT±â´ÉÀ» ¾²´Â °Í ÀÌ ³ªÀ» °Í °°½À´Ï´Ù.
¾Æ·¡ ´ñ±Û ´Þ¾ÆÁֽŠ°ÍÀ» ºÁµµ...Àåºñ Â÷¿ø¿¡¼ NAT À» ÇÏÁö ¾Ê°í VIP À» ÀÌ¿ëÇÑ °¡»ó Àåºñ¸¦ ÅëÇؼ Åë½ÅÇÏ·Á°í Çϴµ¥ ÇÁ·Î±×·¥ÀÌ °¡»ó Àåºñ ÂÊÀ¸·Î ¾Èº¸³»¸é...ÇÁ·Î±×·¥À» °íÃÄ¾ß ÇѴٴ°ÅÁÒ...
Àåºñ¸¦ ÀúÈñ°¡ ¼¼ÆÃÇÏ´Â°Ô ¾Æ´Ï¶ó¼...¿ì¸®°¡ ¿øÇÏ´Â ´ë·Î°¡ ¾Æ´Ï¶ó, ¼¼ÆÃÇÑ ÂÊ¿¡ ¸Â°Ô ¿ì¸®°¡ ÇÁ·Î±×·¥À» ¹Ù²ã¾ß ÇÒ °¡´É¼ºÀÌ Å«µ¥...º¸Åë ÀÌ·± ¼¼ÆÃÀÌ Åë»óÀûÀÎ °Ç°¡¿ä? ¾Æ¹«·¡µµ Half NAT ·Î ¼¼ÆÃÇسõÀº °Í °°Àºµ¥, B ³ª C IP ´Â ¿ÜºÎ Åë½ÅÀÌ ¾Æ¿¹ ºÒ°¡´ÉÇÑ ´ë¿ª¿¡ ÀÖ½À´Ï´Ù.
¾î¶² ¼¼¼Ç¿¡ ´ëÇؼ ¿ÜºÎ Ŭ¶óÀ̾ðÆ®ÀÇ ÆÐŶÀÌ DEST IP¸¦ A·Î Çؼ ¹ß¼ÛÇϸé, L4´Â ±× ÆÐŶÀ» ¼ö½ÅÇؼ SRC IP¸¦ A·ÎÇÏ°í DEST IP¸¦ B³ª C·Î ¹Ù²ã¼ ´Ù½Ã º¸³À´Ï´Ù.
¼¹öÃø¿¡¼´Â SRC IP¸¦ ÀÚ½ÅÀÇ IP·Î(B ¶Ç´Â C) ÇÏ°í, DEST IP´Â A·Î Çؼ ÆÐŶÀ» º¸³À´Ï´Ù. ±×·³ L4´Â SRC IP¸¦ A·Î º¯°æÇÏ°í, DEST IP¸¦ Ŭ¶óÀ̾ðÆ®ÀÇ IP¶ó ¹Ù²ã¼ ´Ù½Ã ¹ß¼ÛÇÕ´Ï´Ù.
±×·±µ¥ ¸»¾¸ÇϽô °æ¿ì´Â L4°¡ ÆÐŶÀ» Æ÷¿öµùÇÒ ¶§ SRC IP¸¦ A·Î º¯°æÇÏÁö ¾Ê°í ½ÇÁ¦ Ŭ¶óÀ̾ðÆ®ÀÇ IP ±×´ë·Î »ç¿ëÇÑ °æ¿ìÀÔ´Ï´Ù.
Àåºñ¸¶´Ù ¿ë¾î°¡ ´Ù¸¥ °Í °°Àºµ¥, º¸Åë ÀÌ·± °³³äÀ» Source NAT¶ó°íµµ ÇÏ´Â °Í °°°í¿ä, ¾î¶² Àåºñ´Â ÀüÀÚÀÇ °æ¿ì¸¦ FULL NAT, ÈÄÀÚÀÇ °æ¿ì¸¦ HALF NAT¶ó°íµµ ÇÏ´Â °Í °°³×¿ä.
´Ô²²¼ ¸»¾¸ÇϽô °æ¿ì°¡ ¾Æ·¡ ±Û°ú °°Àº °Í °°³×¿ä.
http://blog.naver.com/PostView.nhn?blogId=ky1004&logNo=30030838930&redirect=Dlog&widgetTypeCall=true
ÀüÀÚÀÇ °æ¿ì·Î ¾²´Â °æ¿ì°¡ ¹®Á¦µÉ °¡´É¼ºÀÌ Àû±ä ÇÏÁÒ. L4 ½ºÀ§Ä¡¸¦ »ç¿ëÇϱâ À§ÇØ ¼¹öÂÊ¿¡ ¹º°¡ ´Ù¸¥ ¼³Á¤À» ÇØ¾ß ÇÏ´Â°Ô ºÒÆíÇϱ⵵ ÇÏ°í¿ä.
Source NAT(Full NAT) ·ÎÀÇ º¯°æÀº ¾î·Æ´Ù°í ÇÏ°í(Á» Å« ¾÷üÀε¥, Àü»ç ¸ðµÎ Half NAT ¶ó¼ º¯°æÇÏ·Á¸é ÀÏ°ý·Î ´Ù ¹Ù²ã¾ßµÈ´Ù°í) Àúµµ ±¹³» ¾÷ü¿Í ÀÏÇÒ ¶§¿¡´Â ÀÌ·± ±¸¼ºÀº º» ÀûÀÌ ¾ø¾î¼ Á» ´çȲÇß½À´Ï´Ù.
´Ù¸¸, ¼¹ö¿¡¼ ÀڽŵéÀÌ ¿øÇÏ´Â VIP À» ´Þ°í return ÇÏ´Â°Ç È®ÀÎÇߴٴµ¥ ¹º°¡ Àß ¾ÈµÇ³×¿ä. ±× ´ÙÀ½Àº ¶Ç ÀÚ±âµéÀÇ ³×Æ®¿öÅ© º¸¾È ¼³Á¤ÀÇ ¹®Á¦°¡ ¾Æ´Ò±î ½Í³×¿ä.
´öºÐ¿¡ ÇÑ °íºñ ³Ñ°å½À´Ï´Ù. Á¤¸» °í¸¿½À´Ï´Ù.
ÈÄÀÚÀÇ °æ¿ì¸¦ »ç¿ëÇÒ ¶§¿¡ ºÒÆíÇϱä ÇÏÁö¸¸ ÀåÁ¡µµ Àִµ¥¿ä, ¼¹öÂÊ¿¡¼ Ŭ¶óÀ̾ðÆ®·Î º¸³¾ ¶§ L4 ½ºÀ§Ä¡¸¦ °ÅÄ¡Áö ¾Ê±â ¶§¹®¿¡ ³×Æ®¿öÅ© Æ®·¡ÇÈÀÌ °¨¼ÒÇÏ°í, ÀÀ´ä ¼Óµµµµ ´õ ºü¸¨´Ï´Ù.
¾Æ¸¶µµ ±×·± ÀÌÀ¯ ¶§¹®¿¡ ±× ¾÷ü¿¡¼´Â Half NAT Á¤Ã¥À» »ç¿ëÇÏ´Â °Í °°³×¿ä.
´Ù¸¥ ¹®Á¦°¡ »ý±â±ä Çß½À´Ï´Ù.
VIP ÂÊÀ¸·Î ¹ÙÀεù Çعö¸®´Ï VIP °¡ ¼³Á¤µÈ interface ÂÊÀÇ ¿äû¸¸ ¼ö½ÅÇؼ...L4 ÀÇ live check °¡ ¾ÈµÈ´Ù°í Çϳ׿ä. live check ´Â ¶Ç eth0 ÂÊÀ» ÅëÇؼ(±×°Íµµ VIP °¡ ¿Ã¶ó°£ Âʸ¸ ƯÁ¤Çؼ) ÇÑ´Ù°í Çϳ׿ä. ±×·¡¼ ÀÌ°É·Î ¶Ç ¹Ý³ªÀý ¼Ò¸ðÇß½À´Ï´Ù. ÀÌ°Ô º¸ÆíÀûÀÎÁö ±Ã±ÝÇϳ׿ä.
°ü·ÃÇؼ...ÇÁ·Î±×·¥ ÂÊ ³»¿ëÀº ¾Æ·¡¿¡ µ¡ºÙÀÌ°Ú½À´Ï´Ù(Ȥ½Ã ´Ù¸¥ ºÐ²² µµ¿òÀÌ µÉ±îºÁ¿ä).
¿©·¯¸ð·Î µµ¿ò Áּż Á¤¸» °í¸¿½À´Ï´Ù.
------------------------------------------------------------------------------------
¸ÕÀú, °ÅÀÇ µ¿½Ã°£¿¡ ¿Ã¸° °Ô½Ã¹°·Î ÀÌ ¹®Á¦´Â ÇØ°áÇß½À´Ï´Ù. Bootstrap ÀÇ bind() ¿¡ port »Ó¸¸ ¾Æ´Ï¶ó hostname À» ¸Å°³º¯¼ö·Î ¹ÞÀ» ¼ö Àִµ¥, ÀÌ hostname ¿¡ ¸í½ÃµÈ interface ·Î¸¸ Åë½ÅÇϵµ·Ï binding ÇÒ ¼ö ÀÖ¾ú°í, ÀÌ ¿É¼ÇÀ¸·Î ¿øÇÏ´Â ´ë·Î A IP ·Î outbount °¡ µÇµµ·Ï ÇÏ¿´½À´Ï´Ù.
±×·¯³ª ¿©ÀüÈ÷ ³²´Â ¹®Á¦´Â, ºÐ¸í L4 ¿¡¼ A ¶ó´Â IP ·Î ¿äûÀ» º¸³ÂÀ½¿¡µµ B ¶ó´Â IP ·Î °ªÀ» µÇµ¹·ÁÁشٴ °ÍÀÔ´Ï´Ù. A ¶ó´Â IP °¡ B ¶ó´Â IP °¡ ¼³Á¤µÈ eth0 À§¿¡ °¡»óÀ¸·Î »ý¼ºµÈ lo:0 ¿¡¼ ³ª¿Â °ÍÀ̱⠶§¹®¿¡ °á±¹ ¿ÜºÎ->A->B->Netty ·Î µé¾î°¬´Ù´Â °ÍÀº ¸Â´Âµ¥, Netty->B->¿ÜºÎ ó·³ ¸®ÅÏ¿¡¼ A °¡ ºüÁ®¹ö¸²À¸·Î½á ¹®Á¦°¡ ¾ß±âµÇ¾ú½À´Ï´Ù. B ´Â ¿ÜºÎ·Î µ¥ÀÌÅ͸¦ ³»º¸³¾ ¼ö ¾ø´Â ȸ¼±À̱⠶§¹®ÀÔ´Ï´Ù.
±×¸®°í, ÀÌÈÄ¿¡ ¹®Á¦°¡ ¹ß»ýÇߴµ¥...L4 ¿¡¼ ÀåºñÀÇ live È®ÀÎÀ» B À» ÅëÇؼ ÇÑ´Ù°í ÇÕ´Ï´Ù. ±×°Íµµ lo:0 °¡ ¿Ã¶ó°£ »óÅ¿¡¼¸¸ °¡´ÉÇϱ⠶§¹®¿¡ bind() ·Î A IP ·Î¸¸ ¿¾îµÐ »óÅ¿¡¼± B ·Î ÇØ´ç Æ÷Æ®·Î Á¢¼ÓÀÌ ¾ÈµÇ¼ L4 ¿¡¼ ¼¹ö°¡ down µÈ °ÍÀ¸·Î ÆÇ´ÜÇؼ dead 󸮸¦ Çعö¸°´Ù°í Çϳ׿ä.
´Ù¸¥ ¾ð¾î¿¡¼³ª ±âº» Java ¿¡¼´Â ¾î¶»°Ô 󸮵ǴÂÁö´Â ¸ð¸£°ÚÀ¸³ª, Netty ÀÇ ÀÌ·± ¹æ½Ä¿¡ ¹®Á¦°¡ Àִ°ÇÁö, ¾Æ´Ï¸é A ·Î µé¾î¿À¸é A ·Î, B ·Î µé¾î¿À¸é B ·Î ÀÀ´äÀ» ÇÏ´Â ¹æ¹ýÀÌ µû·Î ÀÖ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. ½Ã½ºÅÛ ¿£Áö´Ï¾î´Â ÀúÈñ ÂÊÀÇ ¹®Á¦¶ó°í ÁÖÀåÇÏ°í Àְŵç¿ä.