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 <name> {
        interface <name> {
            route {
                default
                table <name>
            }
            weight <number>
            failover-only
            route-test {
                type {
                    default
                    ping {
                        target <host>
                    }
                    script <name>
                }
                initial-delay <number>
                interval <number>
                count {
                    success <number>
                    failure <number>
                }
            }
        }
    }
}

경로(Route)

경로(route) 섹션에는 EdgeOS가 인터페이스 사용을 위해서 게이트웨이를 선정한다는 것을 기본 값으로 설정하고 있습니다. 게이트웨이는 "show load-balance watchdog" 명령어의 결과를 바탕으로 선정하고 있습니다. 기본 게이트웨이나 특정 게이트웨이를 참조하도록 강제하고 싶은 경우에는, PBR을 사용하여 라우팅 테이블을 다음과 같이 정의할 수 있습니다:

configure
set protocols static table <num> route 0.0.0.0/0 next-hop <gateway IP>
set load-balance group <name> interface <name> route table <num>
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 <num> 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 <name> interface <name> 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.