BGP Балансировка канала между интерфейсами (Mikrotik, Juniper)

Пример балансировки BGP канала между несколькими интерфейсами. В данном примере между двумя. .

Схема сети
Схема Сети

Пример балансировки со стороны Mikrotik есть по адресу - http://wiki.mikrotik.com . Но у данного примера есть один недостаток - в случае пропадания одного из каналов общий канал превращается в неработоспособный. Поэтому немного модернизируем схему - добавляем связность между узлами с помощью OSPF.

Для начала создаем IP-адреса на loopback интерфейсах:
Mikrotik:
/interface bridge
add name=br-local
/ip address
add address=10.100.105.2 interface=br-local network=10.100.105.2

Juniper:
interfaces {
    lo0 {
        unit 0 {
            family inet {
                address 10.100.105.1/32;
            }
        }                               
    }
}

Между этими адресами и будем поднимать BGP сессию, но сперва надо проанонсировать данные IP с помощью протокола OSPF:
Mikrotik:
/routing ospf instance
set [ find default=yes ] redistribute-connected=as-type-1

/ip address
add address=10.100.100.2/30 interface=ether1 network=10.100.100.0
add address=10.100.101.2/30 interface=ether2 network=10.100.101.0

/routing filter
add action=accept chain=ospf-out prefix=10.100.105.2
add action=discard chain=ospf-out
add action=accept chain=ospf-in set-distance=10

/routing ospf interface
add dead-interval=8s hello-interval=2s interface=ether1 network-type=nbma
add dead-interval=8s hello-interval=2s interface=ether2 network-type=nbma

/routing ospf nbma-neighbor
add address=10.100.101.1
add address=10.100.100.1

/routing ospf network
add area=backbone network=10.100.100.0/30
add area=backbone network=10.100.101.0/30

Juniper:

routing-options {
      forwarding-table {
          export load-balancing;
      }
}

interfaces {
    em0 {
        unit 0 {
            family inet {
                address 10.100.100.1/30;
            }
        }
    }
    em1 {
        unit 0 {
            family inet {
                address 10.100.101.1/30;
            }
        }
    }
}
protocols {
   ospf {                              
        export [ ospf-export load-balancing ];
        area 0.0.0.0 {
            interface em0.0 {
                interface-type nbma;
                metric 100;
                hello-interval 2;
                dead-interval 8;
                neighbor 10.100.100.2 eligible;
            }
            interface em1.0 {
                interface-type nbma;
                metric 100;
                hello-interval 2;
                dead-interval 8;
                neighbor 10.100.101.2 eligible;
            }
        }
    }
}
policy-options {
    prefix-list ospf-export {
        10.100.105.1/32;
    }                                   
    policy-statement load-balancing {
        then {
            load-balance per-packet;
        }
    }
    policy-statement ospf-export {
        term 1 {
            from {
                prefix-list ospf-export;
            }
            then accept;
        }
    }
}

В результате мы получаем два равнозначных маршрута на микротике:
Mikrotik ospf route
 

И следующую таблицу на juniper:
Juniper ospf route

На Mikrotik балансировка организована с помощью равнозначных маршрутов, на Juniper используется load-balance per-packet

Остался последний этап - поднимаем BGP-сессию между IP 10.100.105.1 и 10.100.105.2
Mikrotik:
/routing bgp instance
set default redistribute-connected=yes router-id=10.100.105.2

/routing bgp network
add network=10.11.11.0/24 synchronize=no

/routing bgp peer
add multihop=yes name=peer1 out-filter=BGP-out remote-address=10.100.105.1 remote-as=65000 ttl=default update-source=br-local

/routing filter
add action=reject chain=BGP-out prefix=10.100.105.2

Juniper:
routing-options {
    static {
        route 0.0.0.0/0 next-hop 192.168.56.1;
    }
}
protocols {
    bgp {
        group peer {
            type external;
            multihop;
            local-address 10.100.105.1;
            export bgp-export;
            peer-as 65530;
            local-as 65000;
            neighbor 10.100.105.2;
        }
    }
policy-options {
policy-statement bgp-export {
        from {
            protocol static;
            route-filter 0.0.0.0/0 exact;
        }
        then accept;
    }
}

В данном примере мы анонсируем вышестоящему пиру сеть 10.11.11.0/24 и получаем маршрут по умолчанию
Mikrotik bgp route

 

Juniper BGP route

И как результат:
BGP load balancing

В итоге мы получаем отазоустойчивую балансировку BGP сессии между двумя каналами