Агрегирование сетевых интерфейсов
Настоящий документ содержит описание способа совместного использования Продуктов компании ООО
«С-Терра СиЭсПи» и Продуктов третьих производителей.
ООО «С-Терра СиЭсПи» осуществляет сопровождение настоящего сценария в части настроек Продуктов Компании. Упоминание наименований, продуктов, торговых марок третьих организаций исключительно неформально и не является поддержкой, рекомендацией либо рекламой. ООО «С-Терра СиЭсПи» не несет какой-либо ответственности в отношении работоспособности и использования этих Продуктов.
Документ имеет статус вспомогательного материала, который может быть использован технологическими партнерами, компаниями-интеграторами, при разработке собственных решений.
Решения, разработанные на базе данного сценария, могут применяться в действующих сетях/системах
только после тестовой и/или опытной эксплуатации.
Сценарий проиллюстрирует настройку агрегирования сетевых интерфейсов на шлюзе безопасности «С-Терра Шлюз 4.3» и коммутаторе Cisco WS-C3560X-24.
Схема стенда (Рисунок 1):
Рисунок 1
Физические интерфейсы eth1 и eth2 шлюза GW01 будут объединены в один логический интерфейс bond0 (в консоли cisco-like этот интерфейс будет добавлен как Port-channel0). На шлюзе будет настроен режим агрегирования сетевых интерфейсов по стандарту 802.3ad с использованием протокола LACP. Данный протокол позволяет обеспечить отказоустойчивость физических интерфейсов и балансировку трафика. На коммутаторе Cisco будет также настроен EtherChannel с использованием протокола LACP.
Важно: Поддержка протокола LACP необходима со стороны коммутатора
Настройка шлюза безопасности GW01 производиться с учетом того, что шлюз был инициализирован и импортированы все необходимые сертификаты. Настройка производится через локальную консоль или удаленно (SSH с правами суперпользователя) по доверенному каналу связи.
Выберите физические интерфейсы, которые необходимо объединить в логический интерфейс. В данной инструкции будут рассматриваться интерфейсы eth1 и eth2, которые будут объедены в один логический bond0.
1. Внесите следующие настройки для агрегированного канала в файл /etc/network/interfaces.d/bond0:
root@sterragate:~# vim.tiny /etc/network/interfaces.d/bond0
auto bond0
iface bond0 inet static
address 192.168.2.1
netmask 255.255.255.0
slaves eth1 eth2
bond_mode 802.3ad
bond_miimon 100
bond_xmit_hash_policy layer2+3
где:
· address <IP-адрес> - IP-адрес логического интерфейса (bond0);
· slaves <интерфейс> - имена физических интерфейсов, объединяемых в агрегированный канал;
· bond_mode - настройка, отвечающая за протокол, который обеспечивает работу агрегации каналов (в данном примере - это LACP, который основан на стандарте 802.3ad);
· bond_miimon <интервал> - параметр, определяющий интервал времени в миллисекундах. Через заданное время будет происходить проверка физических интерфейсов на их доступность;
· bond_xmit_hash_policy - параметр, определяющий уровень (эталонная модель OSI), на котором будет происходить вычисление хеш-функции для последующей балансировки трафика;
· mtu <значение> - параметр для задания MTU интерфейса; значение по умолчанию - 1500; при изменении MTU интерфейса bond0 меняется MTU и объединяемых интерфейсов eth1 и eth2.
Важно! Если в файле /etc/network/interfaces или в файлах директории /etc/network/interfaces.d/ присутствуют строки с настройками для интерфейсов eth1 и eth2, то необходимо их удалить.
Более полное описание настроек, относящихся к агрегированным каналам для Linux смотрите по ссылке https://www.kernel.org/doc/Documentation/networking/bonding.txt.
Важно! Изменение IP адреса, маски подсети и значения MTU для интерфейса bond0 должно происходить через файл /etc/network/interfaces.d/bond0, а не через cisco-like консоль.
В данной инструкции описывается настройка агрегации каналов по стандарту 802.3ad с использованием протокола LACP. Пример настройки в режиме Active-Backup представлен в Приложении в разделе “Использование режима Active-Backup”.
Пример настройки VLAN на bond-интерфейсе представлен в Приложении в разделе “Использование VLAN на интерфейсе bond0”.
2. Для применения настроек выполните перезапуск сетевого сервиса:
root@sterragate:~# systemctl restart networking.service
3. Проверьте логический и физические интерфейсы:
root@sterragate:~# ip address show | grep bond0
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc mq master bond0 state DOWN group default qlen 1000
4: eth2: <NO-CARRIER,BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc mq master bond0 state DOWN group default qlen 1000
5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet 192.168.2.1/24 brd 192.168.2.255 scope global bond0
Наглядно видно, что интерфейсы eth1 и eth2 находятся в режиме SLAVE, а bond0 в режиме MASTER.
4. Для работы IPsec на интерфейсе bond0 необходимо прописать данный интерфейс в файл /etc/ifaliases.cf. Строки с интерфейсами eth1 и eth2 необходимо удалить.
root@sterragate:~# vim.tiny /etc/ifaliases.cf
...
interface (name="Port-channel0" pattern="bond0")
...
interface (name="default" pattern="*")
5. Пересчитайте контрольную сумму измененного файла:
root@sterragate:~# integr_mgr calc -f /etc/ifaliases.cf
SUCCESS: Operation was successful.
6. Перезапустите VPN сервис:
root@sterragate:~# systemctl restart vpngate.service
7. После проведенных настроек можно прикрепить крипто-карту на интерфейс Port-channel0 (bond0) в консоли cisco-like.
Важно! Изменение IP адреса, маски подсети и значения MTU для интерфейса bond0 должно происходить через файл /etc/network/interfaces.d/bond0, а не через cisco-like консоль.
Для того, чтобы настроить протокол LACP на коммутаторе Cisco WS-C3560X-24, выполните следующие действия:
1. Войдите в режим конфигурирования:
SWITCH01>enable
Password:
SWITCH01#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
2. Укажите алгоритм балансировки трафика:
SWITCH01(config)#port-channel load-balance src-dst-ip
3. Настройте порты Gi0/1 и Gi0/2 коммутатора на работу протокола LACP:
SWITCH01(config)#interface range Gi0/1-2
4. Укажите протокол LACP:
SWITCH01(config-if-range)#channel-protocol lacp
5. Укажите режим работы:
SWITCH01(config-if-range)#channel-group 1 mode active
Creating a port-channel interface Port-channel 1
6. Включите опцию “Portfast” (не обращайте внимание на предупреждение):
SWITCH01(config-if-range)#spanning-tree portfast
%Warning: portfast should only be enabled on ports connected to a single
host. Connecting hubs, concentrators, switches, bridges, etc... to this
interface when portfast is enabled, can cause temporary bridging loops.
Use with CAUTION
%Portfast will be configured in 2 interfaces due to the range command
but will only have effect when the interfaces are in a non-trunking mode.
7. Включите порты:
SWITCH01(config-if-range)#no shutdown
SWITCH01(config-if-range)#exit
8. Сохраните конфигурацию:
SWITCH01#write
Building configuration...
[OK]
В данной инструкции на коммутаторе Cisco применяется EtherChannel с использованием протокола LACP.
Для того, чтобы убедиться, что настройка протокола LACP выполнена корректно выполните следующие проверки:
1. На коммутаторе Switch01 выполните:
SWITCH01#show lacp neighbor
Flags: S - Device is requesting Slow LACPDUs
F - Device is requesting Fast LACPDUs
A - Device is in Active mode P - Device is in Passive mode
Channel group 1 neighbors
Partner's information:
LACP port Admin Oper Port Port
Port Flags Priority Dev ID Age key Key Number State
Gi0/1 SA 255 00:90:0b:4a:c0:b8 12s 0x0 0x11 0x1 0x3D
Gi0/2 SA 255 00:90:0b:4a:c0:b8 12s 0x0 0x11 0x2 0x3D
Обратите внимание на колонку Dev ID. Данные адреса должны соответствовать MAC-адресам логическому интерфейсу bond0 на шлюзе.
2. На шлюзе безопасности GW01 выполните команду:
root@sterragate:~# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2+3 (2)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: 00:90:0b:4a:c0:b8
Active Aggregator Info:
Aggregator ID: 3
Number of ports: 2
Actor Key: 9
Partner Key: 1000
Partner Mac Address: e0:d9:e3:a0:fe:80
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:90:0b:4a:c0:b8
Slave queue ID: 0
Aggregator ID: 3
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 1
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: 00:90:0b:4a:c0:b8
port key: 9
port priority: 255
port number: 1
port state: 61
details partner lacp pdu:
system priority: 1
system mac address: e0:d9:e3:a0:fe:80
oper key: 1000
port priority: 1
port number: 49
port state: 61
Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:90:0b:4a:c0:b9
Slave queue ID: 0
Aggregator ID: 3
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 1
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: 00:90:0b:4a:c0:b8
port key: 9
port priority: 255
port number: 2
port state: 61
details partner lacp pdu:
system priority: 1
system mac address: e0:d9:e3:a0:fe:80
oper key: 1000
port priority: 1
port number: 50
port state: 61
MAC-адрес партнера по протоколу LACP: e0:d9:e3:a0:fe:80, данный адрес должен соответствовать адресу на коммутаторе Switch01:
SWITCH01#show lacp sys-id
32768, e0d9.e3a0.fe80
1. В данной инструкции на коммутаторе используется правило балансировки - dst-src-ip.
2. Проверить правило балансировки можно, выполнив команду:
SWITCH01#show etherchannel load-balance
EtherChannel Load-Balancing Configuration:
src-dst-ip
EtherChannel Load-Balancing Addresses Used Per-Protocol:
Non-IP: Source XOR Destination MAC address
IPv4: Source XOR Destination IP address
IPv6: Source XOR Destination IP address
3. Проверить через какие интерфейсы идет трафик можно выполнив команду:
SWITCH01#test etherchannel load-balance interface port-channel 1 ip 192.168.1.100 192.168.2.100
Would select Gi0/2 of Po1
SWITCH01#test etherchannel load-balance interface port-channel 1 ip 192.168.1.100 192.168.2.101
Would select Gi0/1 of Po1
4. На шлюзе используется правило балансировки bond_xmit_hash_policy layer2+3.
Правила балансировки на используемом коммутаторе Cisco и «С-Терра Шлюз» различаются. Добиться заметного увеличения пропускной способности можно только при большом количестве сессий.
1. Предположим, что есть удаленная подсеть 192.168.2.0/24 с хостами 192.168.2.100 и 192.168.2.101.
2. Запустите утилиту ping с хоста IPHost1 с адресом 192.168.1.100 на адрес 192.168.2.100 и 192.168.2.101 с интервалом 0.1. Данный трафик будет идти по разным каналам.
root@IPHost1:~# ping 192.168.2.100 -i 0.1
root@IPHost1:~# ping 192.168.2.101 -i 0.1
3. Отключите на коммутаторе один из линков.
4. Данный линк перейдет в состояние DOWN:
SWITCH01#show etherchannel summary
Flags: D - down P - bundled in port-channel
I - stand-alone s - suspended
H - Hot-standby (LACP only)
R - Layer3 S - Layer2
U - in use f - failed to allocate aggregator
M - not in use, minimum links not met
u - unsuitable for bundling
w - waiting to be aggregated
d - default port
Number of channel-groups in use: 5
Number of aggregators: 5
Group Port-channel Protocol Ports
------+-------------+-----------+-----------------------------------------------
1 Po1(SU) LACP Gi0/1(D) Gi0/2(P)
5. При этом небольшое количество пакетов пропадет.
64 bytes from 192.168.2.101: icmp_req=269 ttl=64 time=0.101 ms
64 bytes from 192.168.2.101: icmp_req=270 ttl=64 time=0.101 ms
64 bytes from 192.168.2.101: icmp_req=271 ttl=64 time=0.100 ms
64 bytes from 192.168.2.101: icmp_req=272 ttl=64 time=0.102 ms
64 bytes from 192.168.2.101: icmp_req=273 ttl=64 time=0.100 ms
64 bytes from 192.168.2.101: icmp_req=274 ttl=64 time=0.099 ms
64 bytes from 192.168.2.101: icmp_req=282 ttl=64 time=0.112 ms
64 bytes from 192.168.2.101: icmp_req=283 ttl=64 time=0.073 ms
64 bytes from 192.168.2.101: icmp_req=284 ttl=64 time=0.074 ms
64 bytes from 192.168.2.101: icmp_req=285 ttl=64 time=0.095 ms
64 bytes from 192.168.2.101: icmp_req=286 ttl=64 time=0.091 ms
В данном случае сессия перестроилась на другой канал за ~0,8 секунд.
При необходимости использования агрегации каналов в режиме Active-Backup используйте параметр bond_mode active-backup. При этом параметр bond_xmit_hash_policy не используется.
root@sterragate:~# vim.tiny /etc/network/interfaces.d/bond0
auto bond0
iface bond0 inet static
address 192.168.2.1
netmask 255.255.255.0
slaves eth1 eth2
bond_mode active-backup
bond_miimon 100
Важно! Если в файле /etc/network/interfaces или в файлах директории /etc/network/interfaces.d/ присутствуют строки с настройками для интерфейсов eth1 и eth2, то необходимо их удалить.
Балансировки трафика в данном режиме не предусмотрено.
Существует возможность использовать данный режим не только для резервирования каналов, но и для резервирования коммутаторов (
Рисунок 2
Рисунок 2
Дальнейшая настройка не отличается от настройки агрегации каналов по стандарту 802.3ad с использованием протокола LACP.
1. При необходимости использования VLAN на интерфейсе bond0 отредактируйте файл /etc/network/interfaces.d/bond0.
root@sterragate:~# vim.tiny /etc/network/interfaces.d/bond0
auto bond0
iface bond0 inet manual
slaves eth1 eth2
bond_mode 802.3ad
bond_miimon 100
bond_xmit_hash_policy layer2+3
auto bond0.10
iface bond0.10 inet static
address 192.168.2.1
netmask 255.255.255.0
Важно! Предполагается, что изменения IP адреса, маски подсети и значения MTU для интерфейсов bond0, bond0.10 будет происходить через файлы, находящиеся в каталоге /etc/network/interfaces.d/bond0, а не через cisco-like консоль.
Интерфейс bond0 должен быть с параметром inet maual, а не inet static, так как IP адреса на данном интерфейсе не заданы.
При использовании на VLAN интерфейсах значений MTU отличных от 1500, необходимо прописать в файле /etc/network/interfaces.d/bond0 строки для задания MTU интерфейса bond0 и VLAN интерфейсов.
MTU VLAN-интерфейса bond0.10 не может быть больше, чем MTU интерфейса bond0.
Для применения настроек выполните перезапуск сетевого сервиса:
root@sterragate:~# systemctl restart networking.service
Для работы IPsec на VLAN интерфейсе необходимо выполнить следующие действия:
1.1. Добавьте данный интерфейс в файл /etc/ifaliases.cf:
...
interface (name="Port-channel0.10" pattern="bond0.10")
...
interface (name="default" pattern="*")
1.2. Пересчитайте контрольную сумму измененного файла:
root@sterragate:~# integr_mgr calc -f /etc/ifaliases.cf
SUCCESS: Operation was successful.
1.3. Перезапустите VPN сервис:
root@sterragate:~# systemctl restart vpngate.service
1.4. После проведенных настроек можно прикрепить крипто-карту на интерфейс Port-channel0.10 (bond0.10).
Проверить принадлежность трафика к VLAN можно с помощью утилиты tcpdump:
root@sterragate:~# tcpdump -i bond0 -e -n
08:45:45.246018 00:10:18:a7:89:dc > 00:10:18:9e:ed:1c, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, 192.168.2.1 > 192.168.2.100: ICMP echo request, id 2143, seq 9, length 64
08:45:45.246079 00:10:18:9e:ed:1c > 00:10:18:a7:89:dc, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, 192.168.2.100 > 192.168.2.1: ICMP echo reply, id 2143, seq 9, length 64