Тут всё как обычно, кроме того, что порты xe-0/0/1 и xe-0/0/2 на CEs объединяются в один агрегированный интерфейс, будто на другом конце одно устройство. Сам конфиг:
Для настройки связности между двумя PE-коммутаторами нам нужно настроить Lo0 адреса и для отдельного VLAN'а настроить IRB-интерфейс, после чего включить на интерфейсах IRB и Lo0 OSPF. Это необходимо для того, чтобы была связность между LoopBack-адресами и функционировал Inter-Control Center Communications Protocol (ICCP), речь о котором пойдёт далее. Вот так выглядит конфигурация на одном из PE-коммутаторов:
root@Active-PE1# run ping 10.0.0.2 source 10.0.0.1 count 4
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=64 time=103.254 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=103.791 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=103.857 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=112.798 ms
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 103.254/105.925/112.798/3.975 ms
Связность есть, поэтому можно переходить к настройке ICCP.
3. Настройка ICCP (Inter-Control Center Communications Protocol)
ICCP отвечает за передачу информации между устройствами, состоящими в MC-LAG. Связность по данному протоколу настраивается также, как и в iBGP, т.е. устройства являются друг для друга пирами, а связность устанавливается на LoopBack-адресах.
Тут, как видно, настроен протокол ICCP. Нужно разобрать по строчкам что делает каждая команда.
Команда
Расшифровка
set switch-options service-id 1
Устанавливаем Service ID для каждого MC-AE интерфейса, который принадлежит к LAG. Необходим для синхронизации MAC-таблиц, ARP-таблиц и т.д.
set protocols iccp local-ip-addr 10.0.0.1
Устанавливаем Source-IP, с которого будет послыаться информация об этом шасси
set protocols iccp peer 10.0.0.2 redundancy-group-id-list 1
Тут устанавливаем LoopBack-IP пира и указываем его Service-ID (Должен совпадать с нашим)
set protocols iccp peer 10.0.0.2 liveness-detection minimum-interval 1000
Разворачиваем BFD и ставим интервал отправки Hello-пакетов в 1000мс (в рабочих условиях чаще)
set protocols iccp peer 10.0.0.2 liveness-detection multiplier 3
Ставим сколько пакетов BDF должен недополучить, чтобы считать соседа мертвым (т.е после 3 секунд наш сосед будет считаться мёртвым)
Т.е. топология сети может быть разной, и если прямой линк пропадёт, то связность по протоколу ICCP всё равно останется. В данном случае такого не произойдёт, так как у нас только один линк от роутера. Это сделано, чтобы не настраивать STP, который будет рассмотрен в других главах.
Посмотрим установилось ли соединение по ICCP и BFD:
root@Active-PE1# run show bfd session
Detect Transmit
Address State Interface Time Interval Multiplier
10.0.0.2 Up 3.000 1.000 3
1 sessions, 1 clients
Cumulative transmit rate 1.0 pps, cumulative receive rate 1.0 pps
{master:0}[edit protocols iccp]
root@Active-PE1# run show iccp
Redundancy Group Information for peer 10.0.0.2
TCP Connection : Established
Liveliness Detection : Up
Redundancy Group ID Status
1 Up
Client Application: lacpd
Redundancy Group IDs Joined: None
Client Application: l2ald_iccpd_client
Redundancy Group IDs Joined: None
4. Active-Standby Mode
Такая конфигурация редко где используется, но проще настраивается по причине того, что в Active-Active в передаче трафика участвуют два устройства. Настройка выглядит так:
set interfaces ae1 aggregated-ether-options lacp system-id aa:bb:cc:dd:ee:ff
set interfaces ae1 aggregated-ether-options lacp admin-key 1
Это необходимо, чтобы со стороны клиента всё выгяледло так, будто его интерфейсы
подсоединены к одному устройству. Т.е. это нужно, чтобы клиентские интерфейсы
сформировали LAG.
set interfaces ae1 aggregated-ether-options mc-ae mc-ae-id 1
Идентификатор агрегированного интерфейса. Должен совпадать на обоих интерфейсах двух
устройств со стороны провайдера, смотрящих в сторону одного клиента.
set interfaces ae1 aggregated-ether-options mc-ae redundancy-group 1
Группа избыточности. Нужно для ICCP. должно совпадать на интерфейсах в сторону одного
клента.
set interfaces ae1 aggregated-ether-options mc-ae chassis-id 0
Указываем ID для шасси, чтобы мы могли понять какой интерфейс кому принадлежит.
Может быть 0 или 1. ID должен быть разным на разных устройствах.
set interfaces ae1 aggregated-ether-options mc-ae mode active-standby
Указываем Operational Mode для MC-LAG. Должен быть одинкаовым на всех шасси.
set interfaces ae1 aggregated-ether-options mc-ae status-control active
Тут мы выбираем Operational Mode уже для конкретного шасси
Заодно добавим на Router Bridge-Domain и интерфейс для маршрутизации:
interfaces {
ge-0/0/0 {
unit 0 {
family bridge {
interface-mode trunk;
vlan-id-list 10;
}
}
}
ge-0/0/1 {
unit 0 {
family bridge {
interface-mode trunk;
vlan-id-list 10;
}
}
}
irb {
unit 10 {
family inet {
address 8.8.8.1/24;
}
}
}
lo0 {
unit 0 {
family inet {
address 50.0.0.1/32;
}
}
}
}
bridge-domains {
v10 {
vlan-id 10;
routing-interface irb.10;
}
}
5. Active-Active Mode
Тут всё аналогично, только добавляется несколько новых команд:
Multi-chassis-protection необходимо для функционирования Active-Active. Если даже протокол ICCP cкажет, что пир недоступен (например, если ICCP установлен не на LoopBack-адресах), то Multi-chassis-protection позволит избежать петли.
6. Проверка работы
Active-Active cо стороны провайдера:
root@Active-PE3> show interfaces mc-ae extensive
Member Link : ae1
Current State Machine's State: mcae active state
Local Status : active
Local State : up
Peer Status : active
Peer State : up
Logical Interface : ae1.0
Topology Type : bridge
Local State : up
Peer State : up
Peer Ip/MCP/State : 10.0.0.4 ae0.0 up
MCAE Configuration
Redundancy Group : 1
MCAE ID : 1
MCAE Mode : active_active
Status Control : active
Chassis ID : 0
LACP Configuration
System ID : ff:ee:dd:cc:bb:aa
Admin Key : 1
root@Active-PE4> show interfaces mc-ae extensive
Member Link : ae1
Current State Machine's State: mcae active state
Local Status : active
Local State : up
Peer Status : active
Peer State : up
Logical Interface : ae1.0
Topology Type : bridge
Local State : up
Peer State : up
Peer Ip/MCP/State : 10.0.0.3 ae0.0 up
MCAE Configuration
Redundancy Group : 1
MCAE ID : 1
MCAE Mode : active_active
Status Control : standby
Chassis ID : 1
LACP Configuration
System ID : ff:ee:dd:cc:bb:aa
Admin Key : 1
Active-Active cо стороны клиента:
root@CE2> show lacp interfaces
Aggregated interface: ae0
LACP state: Role Exp Def Dist Col Syn Aggr Timeout Activity
xe-0/0/1 Actor No No Yes Yes Yes Yes Fast Active
xe-0/0/1 Partner No No Yes Yes Yes Yes Fast Active
xe-0/0/2 Actor No No Yes Yes Yes Yes Fast Active
xe-0/0/2 Partner No No Yes Yes Yes Yes Fast Active
LACP protocol: Receive State Transmit State Mux State
xe-0/0/1 Current Fast periodic Collecting distributing
xe-0/0/2 Current Fast periodic Collecting distributing
Active-Standby cо стороны провайдера:
root@Active-PE1> show interfaces mc-ae
Member Link : ae1
Current State Machine's State: mcae active state
Local Status : active
Local State : up
Peer Status : standby
Peer State : up
Logical Interface : ae1.10
Topology Type : bridge
Local State : up
Peer State : up
Peer Ip/MCP/State : N/A
root@Standby-PE2> show interfaces mc-ae
Member Link : ae1
Current State Machine's State: mcae standby state
Local Status : standby
Local State : up
Peer Status : active
Peer State : up
Logical Interface : ae1.10
Topology Type : bridge
Local State : up
Peer State : up
Peer Ip/MCP/State : N/A
Active-Standby cо стороны клиента:
root@CE1> show lacp interfaces
Aggregated interface: ae0
LACP state: Role Exp Def Dist Col Syn Aggr Timeout Activity
xe-0/0/1 Actor No No Yes Yes Yes Yes Fast Active
xe-0/0/1 Partner No No Yes Yes Yes Yes Fast Active
xe-0/0/2 Actor No No No No Yes Yes Fast Active
xe-0/0/2 Partner No No No No No Yes Fast Active
LACP protocol: Receive State Transmit State Mux State
xe-0/0/1 Current Fast periodic Collecting distributing
xe-0/0/2 Current Fast periodic Attached
Т.е. отличия Active-Standby от Active-Active тут видны хорошо.
Ну и пинги, как проверка работы канала и IRB:
root@Linux2:~# ping 8.8.8.8 -c 4
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=64 time=108 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=64 time=114 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=64 time=203 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=64 time=288 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 108.100/178.723/288.424/73.704 ms
root@Linux2:~# ping 50.0.0.1 -c 4
PING 50.0.0.1 (50.0.0.1) 56(84) bytes of data.
64 bytes from 50.0.0.1: icmp_seq=1 ttl=64 time=103 ms
64 bytes from 50.0.0.1: icmp_seq=2 ttl=64 time=102 ms
64 bytes from 50.0.0.1: icmp_seq=3 ttl=64 time=159 ms
64 bytes from 50.0.0.1: icmp_seq=4 ttl=64 time=166 ms
--- 50.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 102.810/132.991/166.167/29.741 ms