장애 발생 시 인터넷 링크 변경

장애 발생 시 인터넷 링크 변경

상태:

  • 2개의 인터넷 링크(A와 B)는 모두 Linux 라우터에 연결되어 있습니다.
  • 2개의 라우팅 테이블, 첫 번째 테이블은 기본적으로 A를 통과하고 두 번째 테이블은 기본적으로 B를 통과합니다.
  • iptables 및 ip 규칙은 특정 트래픽에 대해 "최적" 테이블을 선택합니다.

모든 것이 잘 작동하지만 이는 정적 구성입니다.

인터넷 링크 중 하나가 다운되면 어떻게 되나요? 이 경우 모든 것이 두 번째 올바른 링크를 통과해야 합니다. 그리고 - 실패한 링크가 다시 돌아오면 - 트래픽이 두 링크를 모두 통과하는 것과 같은 상태로 모든 것이 되돌아가야 합니다.

이를 수행하기 위한 "표준" 도구가 있습니까? 그런 일을 하기 위해 무언가(스크립트)를 작성하는 것은 문제가 되지 않습니다. 하지만 – 아마도 더 많은 표준 도구가 있을까요?

(실패한 링크의 정의 - 중요한 IP 중 하나는 특정 링크에서는 연결할 수 없지만 두 번째 링크에서는 연결할 수 있습니다.)

답변1

내 다중 WAN Draytek 라우터는 ping 또는 arp를 사용하여 이더넷 및 VPN 링크의 연결 유지를 모니터링할 수 있습니다. (분명히 xDSL에 대한 더 나은 옵션이 있습니다.) 내부 연결 유지를 생성하도록 Ssh 및 OpenVPN을 구성할 수 있습니다. 나는 다른 표준 방법을 모른다.

다음과 같은 것(테스트되지 않음):

ROUTE1=up LINK1=up COUNT1=3
ROUTE2=up LINK2=up COUNT2=3
SHOUT=once

while sleep 5
do
    if ping {destination_via1}
    then
        LINK1_UP=up COUNT1=3
    else
        [[ 0 -lt $COUNT1 ]] && COUNT1=$((COUNT1 - 1))
        [[ 0 -ge $COUNT1 ]] && LINK1=down
    fi

    if ping {destination_via2}
    then
        LINK2_UP=up COUNT2=3
    else
        [[ 0 -lt $COUNT2 ]] && COUNT2=$((COUNT2 - 1))
        [[ 0 -ge $COUNT2 ]] && LINK2=down
    fi


    if [[ down = $LINK1 -a up = $ROUTE1 ]]
    then
        # add code here to remove route via LINK1 #
        ROUTE1=down
    elif [[ up = $LINK1 -a down = $ROUTE1 ]]
        # add code here to add route via LINK1 #
        ROUTE1=up
        SHOUT=once
    fi

    if [[ down = $LINK2 -a up = $ROUTE2 ]]
    then
        # add code here to remove route via LINK2 #
        ROUTE2=down
    elif [[ up = $LINK2 -a down = $ROUTE2 ]]
        # add code here to add route via LINK2 #
        ROUTE2=up
        SHOUT=once
    fi

    if [[ once = $SHOUT -a down = $ROUTE1 -a down = $ROUTE2 ]]
    then
        # add code here to shout that both routes are down #
        SHOUT=no
    fi
done

관련 정보