EdgeRouter - 듀얼 WAN 로드 밸런싱 기능 ============================================ download at 2017-02-07T01:11:59Z `origin `_ Overview -------- -------------- 이 문서는 EdgeRouter에서 인터페이스간의 WAN 로드 밸런싱 기능에 대하여 서술합니다. EdgeOS 1.4.0 이상 버전에서 동작합니다. 1.8.0 이전의 EdgeOS는 2개의 WAN인터페이스만 지원하며 1.8.0 버전 이후부터는 8개까지 지원합니다. 로드밸런싱 환경설정은 몇 가지 요구사항이 존재합니다: 1) 로드 밸런싱은 인터페이스를 정의하며, 대상에 핑을 수행하기도 하고, 일정시간동안 타이머를 동작하거나 route-test 등을 수행하기도 합니다. 2) 기준의 맞도록 방화벽이 룰셋을 수정합니다. 3) 2)의 기준을 충족하는 방화벽을 포함한 적어도 1개 이상의 LAN 인터페이스 **Note**: 로드밸런싱을 설정하기 전에, 처음에는 두개의 WNA 인터페이스에 대하여 NAT, 방화벽 등을 설정해보는 것이 좋은 연습이 될 것입니다. WAN 인터페이스 한개를 종료해서 LAN 클라이언트가 인터넷에 접근할 수 있는지 확인해보십시오. 다른 WAN 인터페이스를 대상으로도 반복해 보십시오. 최소한의 환경설정 --------------------- -------------- 아래의 환경설정 예제는 대부분을 기본 값으로 사용합니다 ("show" 명령어를 환경설정 모드에서 사용해보십시오): :: ubnt@ER-Pro# show load-balance group WLB { interface eth0 { } interface pppoe0 { } } ubnt@ER-Pro# show firewall modify modify WAN_WLB { rule 10 { action modify modify { lb-group WLB } } } ubnt@ER-Pro# show interfaces ethernet eth2 description LAN address 192.168.16.1/24 firewall { in { modify WAN_WLB } } 이 환경 설정은 모든 eth2 인바운드 트래픽에 대하여 로드 밸런싱을 시도합니다 (기본 값은 WAN에 50/50으로 로드밸런싱 됩니다). 이 설정은 와치독(watchdog) 스레드를 각 WAN 인터페이스에 생성, 할당하여 매 10초마다 `www.ubnt.com `__ 에 핑을 시도합니다. 연속해서 3번의 실패 발생시, 모든 트래픽은 다른 WAN 인터페이스로 우회하도록 하여 장애를 극복하고자 합니다. 물론 이러한 설정은 기본 값이며, 입맛에 맞게 수정이 가능합니다.   운용 모드 명령어 : show ----------------------- -------------- "show" 명령어는 WAN 로드 밸런싱 그룹에 속하는 인터페이스의 상태를 출력합니다. :: ubnt@ER-Pro:~$ show load-balance status Group WLB interface : eth7 carrier : up status : active gateway : 22.0.0.1 weight : 50 flows WAN Out : 7451 WAN In : 0 Local Out : 8854 interface : pppoe0 carrier : up status : active gateway : pppoe0 weight : 50 flows WAN Out : 7566 WAN In : 0 Local Out : 3904 "show" 명령어를 사용하여 "와치독, watchdog"과 관련된 정보(상태, 실패한 핑 시도, 핑 게이트웨이)도 확인할 수 있습니다.   :: ubnt@ER-Pro:~$ show load-balance watchdog Group G eth7 status: Running pings: 98 fails: 1 run fails: 0/2 route drops: 0 ping gateway: ping.ubnt.com - REACHABLE pppoe0 status: Running pings: 27 fails: 0 run fails: 0/3 route drops: 0 ping gateway: ping.ubnt.com - REACHABLE .. Note:: WAN 인터페이스가 PPPoE인경우, PPPoE 서버에서 경로를 얻지 말고 인터페이스 경로를 추가하는 것이 좋습니다:   :: configure set interfaces ethernet eth1 pppoe 0 default-route none set protocols static interface-route 0.0.0.0/0 next-hop-interface pppoe0 commit save exit 환경설정 옵션 --------------------- -------------- 기본 값을 변경하고 싶다면, 몇개의 옵션이 존재합니다. (결과값을 확인한 이후에 몇가지 참고해야할 사항이 있습니다.)   :: load-balance { group { interface { route { default table } weight failover-only route-test { type { default ping { target } script } initial-delay interval count { success failure } } } } } 경로(Route) ~~~~~~~~~~~~~ 경로(route) 섹션에는 EdgeOS가 인터페이스 사용을 위해서 게이트웨이를 선정한다는 것을 기본 값으로 설정하고 있습니다. 게이트웨이는 "show load-balance watchdog" 명령어의 결과를 바탕으로 선정하고 있습니다. 기본 게이트웨이나 특정 게이트웨이를 참조하도록 강제하고 싶은 경우에는, PBR을 사용하여 라우팅 테이블을 다음과 같이 정의할 수 있습니다:   :: configure set protocols static table route 0.0.0.0/0 next-hop set load-balance group interface route table commit save exit 경로-테스트 경로 테스트 섹션에서는 "watchdog route-test"의 기본 행위 값을 아래의 파라미터를 기준으로 변경할 수 있습니다: - "ping target" 옵션을 사용하여 핑을 시도할 호스트를 결정할 수 있습니다. - "script" 옵션을 사용하여 특정 WAN 인터페이스를 고려할지 말지 결정할 수 있습니다. 스크립트는 3개의 파라미터 (그룹 이름, 인터페이스 이름, "OK" 또는 "DOWN"으로 구별되는 현재 상태)를 입력으로 받습니다. 스크립트의 리턴 값이 0이면 route-test의 결과가 올바른 값을 테스트의 결과로 얻었다는 뜻이며, 다른 값이 나온 경우, 특정 테스트에서 실패한 경우입니다. **Note**: 와치독 타이머가 멀티 스레드로 동작하더라도 스크립트를 오랜 시간 동안 구동하는 작업은 권장하지 않습니다.   **DNS** WAN 주소를 dhcp 또는 pppoe로 얻는다면, ISP가 WAN 인터페이스의 유일한 접속 가능한 주소로 DNS 서버를 주소로 알려주었을 가능성이 높습니다. 로드밸런싱은 양쪽 WAN에서 사용할 수 있도록 /etc/resolv.conf 파일에 있는 든 네임-서버를 필요로 합니다. DHCP와 PPPOE 모두 ISP 네임 서버를 무시할 수 있는 옵션이 존재합니다:   :: configure set interfaces ethernet ethX dhcp-options name-server no-update commit save exit :: configure set interfaces ethernet ethX pppoe name-server none commit save exit 물론 시스템에서 사용할 글로벌 네임서버를 설정할 수도 있습니다. :: configure set system name-server 8.8.8.8 commit save exit **상태(Health) 테스트** 기본 값으로 WAN 인터페이스가 정상 동작하는지 여부는 핑을 통해서 결정합니다. 핑을 받는 기본 호스트는 *ping.ubunt.com* 이지만, 사용자의 선호에 따라서 변경이 가능합니다. DNS가 없다면 주소를 사용합니다. :: configure set load-balance group interface  route-test type ping target 8.8.8.8 commit save exit   LAN-to-LAN 제외하기 -------------------- -------------- 로드밸런싱 기능은 WAN 인터페이스가 사용할 새로운 라우팅 테이블을 만들면서 동작합니다. LAN에서 WAN으로 흐르는 트래픽에는 잘 동작하지만, LAN에서 LAN으로 흐르는 트래픽은 로드밸런싱이 이루어질 필요가 없습니다. 이 문제를 해결할 가장 쉬운 방법은 LAN 네트워크 방화벽 룰셋을 수정하여 LAN을 목적지로 갖는 메인 라우팅 테이블을 수정하는 것입니다. .. Note:: 로드밸런싱 룰보다 상위 룰이어야 합니다.   :: configure set firewall group network-group LAN_NETS network 192.168.0.0/24 set firewall group network-group LAN_NETS network 192.168.1.0/24 set firewall group network-group LAN_NETS network 172.16.0.0/24 commit :: set firewall modify WAN_WLB rule 10 destination group network-group LAN_NETS set firewall modify WAN_WLB rule 10 action modify set firewall modify WAN_WLB rule 10 modify table main commit :: ubnt@WLB# show firewall modify modify WAN_WLB { rule 10 { action modify destination { group { network-group LAN_NETS } } modify { table main } } rule 20 { action modify modify { lb-group WLB } } } [edit] 포트 포워딩 --------------- -------------- 포트 포워딩 트래픽에 대하여 로드 밸런싱이 필요하지는 않을 것입니다. 그러므로 라우터의 퍼블릭 주소를 제외하도록 새로운 룰을 추가합니다. 퍼블릭 주소는 변할 수 있으므로 주소 앨리어스(alias)를 사용합니다. 아래의 경우에는 포트포워딩 룰이 pppoe0인 예제입니다: :: firewall { modify WAN_WLB { rule 10 { action modify description "do NOT load balance lan to lan" destination { group { network-group LAN_NETS } modify { table main } } rule 20 { action modify description "do NOT load balance destination public address" destination { group { address-group ADDRv4_pppoe0 } } modify { table main } } rule 30 { action modify modify { lb-group WLB } } } **같은 WAN에서 세션을 생성하도록 하기** 은행과 같은 웹사이트는 다른 IP 주소에서 접근한 경우 세션을 삭제하도록 동작합니다. 1.7.0 버전부터는 스티키(sticky) 기능이 로드밸런싱 기능에 추가되었습니다. 이 기능은 사용자가 패킷의 일정 필드를 주어진 WAN 인터페이스에 대하여 해싱을 수행합니다: :: configure set load-balance group G sticky source-addr enable set load-balance group G sticky dest-addr enable set load-balance group G sticky dest-port enable commit save exit 스티키 기능은 주어진 WAN에 세션이 종속적이지만, 스티키 기능은 가중치를 부여하는 것만큼 정확합니다. 시간이 지나면서 충분한 트래픽이 생성되면, 트래픽의 양은 결국 비슷하게 분배될 것입니다.  **더 많은 예제들:** - 멀티 WAN 예제 - `LINK. `__ - 간단한 듀얼 WAN, WAN2를 장애 극복을 위하여만 사용하기 - `LINK `__ - 일부 장비를 장애 극복 외에는 하나의 WAN 링크로 제한하기 - `LINK. `__ - HTTPS 트래픽을 장애 극복 외에는 1개의 WAN 링크로 제한하기 - `LINK. `__ - 핑 대신에 경로의 유효성을 스크립트로 확인하기 - `LINK. `__ - WAN 로드 밸런싱가 끊어버린 NAT 헤어핀과 LAN 간 통신 - `LINK. `__ - LAN1에서 WAN1으로, LAN2에서 WAN2로 장애극복 기능을 포함하여 연결하기. - `LINK `__ - 장애극복 스크립트 실행하기 - `LINK. `__ - 로드 밸런싱과 IPsec - `LINK. `__