IT_etc/유용한 전산 지식들..

[펌] L4 Switch

JJun ™ 2010. 12. 6. 10:10

-------------------------------------------------------------------------------------------------

[출처]

1. http://sid39346.springnote.com/pages/4062893

2. http://fendys.egloos.com/1088874

3. http://theeye.pe.kr/entry/L4-SWITCH-DSR-%EB%AA%A8%EB%93%9C%EC%97%90%EC%84%9C%EC%9D%98-%EC%84%9C%EB%B2%84-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95

-------------------------------------------------------------------------------------------------

 

 

 

한마디로 말하면,  L4의 핵심은 'IP, 포트, 세션' 을 기반으로 한 로드 밸런싱(Load Balancing)이다!
라고 말하고 싶네요. L4에서 가장 중요한건 역시 4계층답게 포트(port)라는 생각이 드네요.

2계층의 MAC
3계층의 IP
4계층은 바로 포트 입니다.

그리고 이 포트와 맞물려 로드 밸런싱이라는 개념이 등장 합니다.
L4 스위치는 마치 포트와 로드밸런싱의 오묘한 조합이랄까요.

L4 스위치 = 포트 + 로드밸런싱(물론 IP,세션도 중요합니다)

L4스위치가 로드밸런싱을 수행하는 장비이기 때문에 L4스위치를 다른말로 로드 밸랜서(Load Balancer) 라고도 합니다. 로드밸런싱은, 동일한 역할을 수행하는 서버 그룹을 VIP를 통해 관리하며, 서버로 향하는 트래픽을 일단 VIP를 가진 L4스위치로 수신한 후 분배정책에 따라 적절한 서버에 분배해 주는 것을 말합니다.

VIP는 Virtual IP의 약자로, 서버그룹의 대표 IP라 할 수 있습니다. 이 VIP를 로드밸런싱을 수행하는 L4 스위치가 가지고 있습니다. 서버와 통신하고자 하는 클라이언트는 VIP를 향해 트래픽을 전송하고 L4스위치가 이

트래픽을 받아 적절한 서버에 로드밸런싱 해주는 것이 L4스위치의 역할입니다.

한마디로, L4 스위치는 부하분산 장비입니다.
요즘 웬만한 사이트는 서버 한 대로 사용자들의 트래픽을 감당하기 어렵기 떄문에 동일한 역할을 수행하는

서버를 여러 대 두어서 사용자들의 트래픽이 많아져도 유연하고 안정적으로 사이트를 운영하기 위해
L4스위치를 통한 로드밸런싱
을 하는걸로 알고 있습니다.

L4스위치, 즉 로드밸란서가 없어도 네트워크를 하는데 지장은 없습니다.
하지만 IT가 발전하고 트래픽이 과도해지면서 로드밸런서 없이는 안정적인 네트워크를 구성하는 것이

불가피해지고 있다는 생각이 드네요.

 
이 그림에서 보는바와 같이, 클라이언트와 서버 사이에 로드밸란서가 위치하여 서버 2대에 대해 로드밸런싱을 수행합니다. 즉, 로드밸런서가 트래픽을 왼쪽 서버로 보낼 수도 있고, 오른쪽 서버에 보낼 수도 있습니다.

 

###################################################

 

그러면 L4를 왜 쓰느냐??  2가지 이유가 있습니다.

 

첫 번째 로드를 분산하기 위해서 입니다.(로드 발란싱) 예를 들어 한 서버에 웹 서비스(80)를 하는 서버가

있습니다. 그런데 서버에 부하 때문에 서버를 증설 해야 합니다.

 

하지만 서버를 분리 시키면 IP가 하나 더 필요하게 되고 IP가 늘어나면 기존 서비스와 IP가 달라지는 문제가 생깁니다. 이 때 사용하는 것이 L4장비의 VIP입니다.

 

예를 들어 기존에 사용하는 서버의 IP가 128.x.x.1이라고 합시다.

이 IP를 L4장비에 VIP로 할당합니다.  (VIP는 가상의 아이피를 말합니다.)

 

128.x.x.1 for 80          128.x.x.1 regarding 80

 

기존 서버에는 128.x.x.2 와 새로운 서버에는 128.x.x.3을 할당합니다.

(물론 기존 서버와 새로운 서버는 데이타가 동기되어 있어야 합니다.)

그리고 L4장비에 로드발란싱이 가능하게 세팅합니다.

 

 

그러면 이제 128.x.x.1로 요청하는 응답에 대해서 L4가 처리 하게됩니다. (대표IP로 서버여러대를 가지치기 할 수 있다.)  L4는 로드발란싱 규칙에 따라서 기존 서버에서 응답하게 할 수도 있고 신규 서버에서 응답하게 할 수도 있습니다.

 

간단하게 L4에서 홀수 번째 요청은 기존 서버에서 짝수 번째 요청은 신규 서버에서 응답하게 설정 할 경우

요청에 대한 응답을 정확하게 반으로 나눌수 있습니다.

 

이렇게 한 서버의 요청건수를 줄여주어 실제로 한대의 서버가 처리해야 할 요청을 두대(여러 대)의 서버가

처리하게 되는 것을 로드 발란싱이라고 합니다.

 

알테온으로 설명 드리면, 웹서버 두대를 로드밸런싱 하려면 먼저 웹서버를 각각 real server 로 각각 ip를 등록합니다. 그리고 웹서버 즉 real server ip 두개 를 group1 에 소속시킵니다. 그리고 virtual ip (vip=대표ip)를

하나 등록해서 그 ip로 오는 패킷중에 http(80) 패킷에 대해서는 group1으로 보내면 설정된 matric(hash,

라운드로빈, least connection, weighted )값에 의해 로드밸런싱 되는것입니다. 대부분 hash 방식을

사용하죠...

 

이렇게 하면 128.x.x.1 for 80  은 오직 80 포트만을 받고, 다른 포트는 filtering 된다..    

쓸데없는 포트로 들어오는 공격을 막을수 있다.        

 

그리고 L4의 두번째 기능으로 무결성을 위한 fail over기능입니다.

 

흔히 가장 안정적으로 서비스되는 서버는 일년에 다운타임(동작 불능시간)이 50분 미만인 서버라고 합니다.

(1년동안 50분 정도 다운되면 최고로 안정적인  서버가 되는 것입니다.)

 

서버역시 기계인 것이라 영원히 죽지 않는 서버는 존재하지 않습니다. 그러나 사람들은 좀더 서버가 안정적으로 동작하길 윈하게 되죠. 아주 중요한 서버(예를 들면 정치 관련 홈페이지나 은행과 같은 금융 그리고 그 외 쇼핑몰등)의 경우 일년에 50분의 다운이라도 서비스에 큰 타격을 입을 수 있습니다.

 

예를 들어 128.x.x.1이라는 서버가 있습니다.

그러나 이 서버는 중요한 서버라 절대 서버에 장애가 있으면 안됩니다.

이럴경우 사용하는 장비가 L4입니다.

 

L4에 VIP를 이용해서 128.x.x.1이라는 IP를 할당합니다. 기존 서버의 IP를 128.x.x.2로 변경합니다.

새로운 서버에 128.x.x.3으로 할당합니다.(물론 기존 서버와 자료가 같도록 동기화 되어 있어야 합니다.)

 

L4에 fail over기능을 이용 할 경우, 128.x.x.1로 오는 모든 요청에 대해서 L4는 128.x.x.2가 응답하게 합니다.

그리고 128.x.x.2에 장애가 있을 경우(서버가 다운될 경우)에는 128.x.x.3서버가 자동으로 응답하게 처리하게 됩니다.

 

이렇게 미리 동일한 서버를 준비해 놓고 L4를 이용해서 fail over로 연결하면  첫번째 서버(마스터)에 장애가 있을 경우라도 미리 준비해 놓은 서버(슬래이브)가 동작하게 되므로 실제로 서비스에는 문제가 없게되는 것입니다.

  

 

 

Alteon L4 스위치 기본 설정방법


  - Real 서버가 2대이고 1개의 그룹으로 설정, vitural 서버는 1개 사용
  - metric(분산알고리즘) 미설정 시 default는 leastconnection
  - health 체크 미설정 시 default는 tcp, inter=2(매 2초마다 체크), retry=4(4번 실패 체크 시 down으로 정의)
  - DAM(Direct Access Mode)가 default로 disable (Real IP를 통한 직접 서비스 안됨)
    ※ 즉, 여기서는 Real IP를 이용한 http(80번 포트) 접속 안됨
       (하지만 Load Balance와 무관한 서비스는 각각 가능: ssh, 터미널 접속,... 등)

Main#
Main# /cfg/l3     ; 스위치 IP 설정...
(또는 Main# /cfg/ip)
Layer 3# if 1     ; 스위치 자체 IP 설정...
IP Interface 1# addr 1.2.3.4  ; IP address 할당
IP Interface 1# mask 255.255.255.0  ; subnet mask 할당 (필요시)
IP Interface 1# ena    ; IP address 활성화

IP Interface 1# /cfg/l3/gw   ; default gateway 설정...
Enter default gateway number: (1-255) 1 [Enter] ; gateway 번호 입력 (필요시)
Default gateway 1# addr 1.2.3.1  ; default gateway 할당
Default gateway 1# ena    ; gateway 활성화

Default gateway 1# /cfg/slb/real 1  ; 첫번째 real 서버 설정...
Real server 1# rip 1.2.3.5   ; real 서버 IP address 할당
Real server 1# ena    ; 첫번째 real 서버 활성화

Real server 1# /cfg/slb/real 2   ; 두번째 real 서버 설정...
Real server 2# rip 1.2.3.6   ; real 서버 IP address 할당
Real server 2# ena    ; 두번째 real 서버 활성화

Real server 2# /cfg/slb/group 1   ; real 서버 그룹 설정...
Real server group1# add 1   ; 등록된 real 서버 1번을 그룹에 추가
Real server group1# add 2   ; 등록된 real 서버 2번을 그룹에 추가

Real server group1# /cfg/slb/virt 1  ; virtual 서버 설정...
Virtual server 1# vip 1.2.3.2  ; virtual 서버 IP address 할당
Virtual server 1# ena    ; virtual 서버 활성화
Virtual server 1# service http   ; http 서비스 설정...
Virtual server 1 http Service# group 1  ; http 서비스를 real 서버 그룹에 할당
(필요시 Virtual server 1 http Service# rport 8080 ; http 서비스를 real 서버의 8080 포트에 매핑)

Virtual server 1# /cfg/slb/port 1  ; L4의 물리적인 포트 1번 설정...
SLB port 1# server ena    ; 포트 1번을 서버 포트로 할당
SLB port 1# /cfg/slb/port 2   ; L4의 물리적인 포트 2번 설정...
SLB port 2# server ena    ; 포트 2번을 서버 포트로 할당

SLB port 8# /cfg/slb/port 8   ; L4의 물리적인 포트 8번 설정...
SLB port 8# client ena    ; 포트 8번을 클라이언트 포트로 할당

SLB port 8# /cfg/slb    ; SLB 설정...
Layer 4# on     ; Server Load Balancing 모드 on
Layer 4# apply     ; 변경된 설정값 적용
Layer 4# cur     ; 현재 설정값 확인
Layer 4# save     ; FLASH 메모리에 현재 설정내용 저장
Layer 4# /info/slb/dump    ; SLB 정보 확인


    ------------------------------------------------------
   | ㅁ1 ㅁ2 ㅁ3 ㅁ4   ㅁ3 ㅁ4 ㅁ5 ㅁ6   ㅁ5 ㅁ6 ㅁ7 ㅁ8  |  --> Alteon L4 스위치
    --+---+--------------------------------------+--------
      |   |                                                           |
      |   |                                                           |--> 클라이언트 포트 (외부 연결)
      |   |
      |   |--> 서버 포트 (서버 연결)
      |
      |
      |--> 서버 포트 (서버 연결)

     

※ 설정 시  port 9번은 미사용 

 

 

 

 


 

 

보통 수많은 서버를 가지고 서비스를 하는 업체라면 L4 스위치가 한대이상 존재할 것입니다.
L4 스위치한대만으로도 엄청나게 빠른 속도로 많은 량의 분산처리를 위한 라우팅을 완벽하게 해내죠.

L4란 OSI 7계층을 공부하시면서 들오보셨을 텐데 Layer 4 라우팅을 하는 스위치라는 뜻입니다.
L4 스위치의 라우팅 모드중에 DSR(Direct Server Return)이라는 평범하지 않은 모드가 있습니다.
말그대로 서버에서 결과를 바로 리턴한다는 뜻이지요. 어떤 것인지 다음의 그림을 보면서 설명 드리겠습니다.

 


위와 같은 네트워크 구조가 있다고 합시다. 위의 구조는 전형적인 DSR을 위한 구조이지만 우선 평범한 SLB(Server Load Balancer) 에 대해 설명 드리겠습니다.

편의를 위해 L3 스위치의 아이피는 표시하지 않았습니다. 123.123.123.123은 외부에 공개되는 아이피입니다.
저 아이피를 통해 웹서비스에 접속할 수 있습니다. 10.1.1.x 대의 아이피들은 잘 아시겠지만 내부 네트워크입니다.

이것을 보시면 외부 인터넷에서 L4를 거치지 않고는 웹서버들에게 접근할 수 없다는 것을 알 수 있습니다.
일반적인 로드밸런싱은 다음과 같은 방법으로 이루어 집니다. DSR용 구조라 설명이 좀 복잡합니다;;

 



SLB 접속 :

Internet  A  L3 Switch  B   L4 Switch  C  L3 Switch  D  Web Server 1  D  L3 Switch  C  L4 Switch  B  L3 Switch  A  Internet



설명을 적으면서 계속 잘못되었다는 생각이 들지만 중요한점은 클라이언트의 Request와 서버의 Response가 둘다 L4를 거쳐간다는것만 알아주시면 됩니다.

하지만 DSR구조는 L4가 서버들의 로드밸런싱은 하지만 리턴은 서버에서 클라이언트에게 바로 리턴합니다. L4를 거치지 않습니다.

그렇다면 다음과 같은 방법으로 이루어 지겠죠.

DSR 접속 :

Internet  A  L3 Switch  B  L4 Switch  C  L3 Switch  D  Web Server 1  D  L3 Switch  A  Internet



어떤 차이가 있는지 보이시나요? 답장은 L4를 거치지 않고 바로 클라이언트에게 전송됩니다.

하지만 여기서 서버에 추가적인 설정이 필요합니다.

클라이언트는 분명히 123.123.123.123으로 Request를 보냈기 때문에 마찬가지로 123.123.123.123으로부터 Response가 돌아와야 합니다.

하지만 10.1.1.2아이피를 가지고 있는 서버가 반환을 하였죠. 클라이언트의 컴퓨터는 답장을 받았지만 잘못된 패킷으로 인지하고 버려버리게 됩니다.

이래선 통신이 제대로 되질 못하죠. 해결 방법은 서버의 Loopback 주소를 변경하면 됩니다.

하지만 제가 무식하게 lo의 아이피를 127.0.0.1에서 123.123.123.123으로 바꿨더니 서버가 바보가 되더군요.

채널본딩을 사용하면 됩니다. lo가 특수한 장치라서 정상적인 설정 방법으로는 채널본딩이 안되지만 다음과 같은 명령어는 잘됩니다.

/sbin/ifconfig lo:0 123.123.123.123 netmask 255.255.255.255



이때 주의할것인 서브넷마스크가 255.255.255.255여야 한다는겁니다. 이렇게 함으로써 잘못된 Loopback주소를 브로드캐스팅 하는것을 막을 수있습니다.

[eye@theeye /] $ ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0B:DB:95:0E:E1   
          inet addr:123.123.123.123  Bcast:123.123.123.255  Mask:255.255.255.0 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:30871472 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:42803475 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000  
          RX bytes:414432160 (395.2 MiB)  TX bytes:1433412018 (1.3 GiB) 
          Interrupt:185 

 

lo        Link encap:Local Loopback              inet addr:127.0.0.1  Mask:255.0.0.0            inet6 addr: ::1/128 Scope:Host            UP LOOPBACK RUNNING  MTU:16436  Metric:1            RX packets:30192781 errors:0 dropped:0 overruns:0 frame:0            TX packets:30192781 errors:0 dropped:0 overruns:0 carrier:0            collisions:0 txqueuelen:0             RX bytes:1340081608 (1.2 GiB)  TX bytes:1340081608 (1.2 GiB)

 

lo:0      Link encap:Local Loopback              inet addr:123.123.123.123  Mask:255.255.255.255            UP LOOPBACK RUNNING  MTU:16436  Metric:1

 


 

L2 스위치, L3 스위치, L4 스위치

 

 

L2 스위치, L3 스위치, L4 스위치는 OSI7 layer중 어느 layer에서 수행되는가에 따라 결정


 

L2 스위치

2Layer(Datalink Layer)의 프로토콜인 이더넷, 프레임릴레이, ATM 등에서 스위칭 기능을 수행한다.

(MAC Address)


 

L3 스위치

3Layer(L3: Network layer)의 프로토콜인 IP, IPX등에서 스위칭 기능을 수행하여, 라우팅 기능을

스위치가 가지게 된다. (IP Address)

 

 

L4 스위치

4Layer(L4: Transport Layer)의 프로토콜인 TCP, UDP등을 스위칭하며, 이때 TCP와 UDP 그리고 RTP(Real Time Protocol) 등의 헤더를 사용하여, FTP, HTTP, TFTP. SMTP 등의 프로토콜 중 어느 것에 대한 요구가 우선하는지 파악한 후 스위칭하게 된다.  주로 서버나 네트웍의 트래픽을 LoadBalancing하는데 이용된다.

 

 

L7 스위치 

패킷의 헤더정보만 확인하는 L4에 비해 payload(e-mail제목/내용의 문자열, HTTP컨텐츠URL, FTP파일 제목, SSL ID, Cookie 정보, 특정 바이러스(e.g. CodeRed, Nimda)패턴등을 분석해 Packet을 처리하므로, 보안에 이용되어지는데 보다 높은 수준의 Intelligence를 갖춘 스위치일수록 더 정교한 패킷의 부하분산(Load Ballancing)및 Qos기능 구현이 가능함.

 

1) Dos/SYN Attack에 대한 방어

2) CodeRed/Nimda등 바이러스 감염 패킷의 필터링

3) 네트워크 자원의 독점 방지를 통한 네트워크 시스템의 보안성 강화가 가능함.

 

 

 

L4교육자료.ppt

L4교육자료.ppt
1.64MB