Агрегирование сетевых интерфейсов
Настоящий документ содержит описание способа совместного использования Продуктов компании ООО
«С-Терра СиЭсПи» и Продуктов третьих производителей.
ООО «С-Терра СиЭсПи» осуществляет сопровождение настоящего сценария в части настроек Продуктов Компании. Упоминание наименований, продуктов, торговых марок третьих организаций исключительно неформально и не является поддержкой, рекомендацией либо рекламой. ООО «С-Терра СиЭсПи» не несет какой-либо ответственности в отношении работоспособности и использования этих Продуктов.
Документ имеет статус вспомогательного материала, который может быть использован технологическими партнерами, компаниями-интеграторами, при разработке собственных решений.
Решения, разработанные на базе данного сценария, могут применяться в действующих сетях/системах
только после тестовой и/или опытной эксплуатации.
Сценарий проиллюстрирует настройку агрегирования сетевых интерфейсов на шлюзе безопасности «С-Терра Шлюз 4.2» и коммутаторе Cisco WS-C3560X-24.
Схема стенда (Рисунок 1):
Рисунок 1
Физические интерфейсы eth2 и eth3 шлюза GW01 будут объединены в один логический интерфейс bond0 (Gi1/0). На шлюзе будет настроен режим агрегирования сетевых интерфейсов по стандарту 802.3ad с использованием протокола LACP. Данный протокол позволяет обеспечить отказоустойчивость физических интерфейсов и балансировку трафика. На коммутаторе Cisco будет настроен EtherChannel с использованием протокола LACP.
Важно: Поддержка протокола LACP необходима со стороны коммутатора
Настройка шлюза безопасности GW01 производиться с учетом того, что шлюз был инициализирован и импортированы все необходимые сертификаты. Настройка производится через локальную консоль или удаленно (SSH с правами суперпользователя) по доверенному каналу связи.
Выберите физические интерфейсы, которые необходимо объединить в логический интерфейс. В данном сценарии используются интерфейсы eth2 и eth3, которые будут объедены в один логический bond0.
1. Внесите следующие настройки для агрегированного канала в файл /etc/network/interfaces:
root@sterragate:~# vim.tiny /etc/network/interfaces
auto bond0
iface bond0 inet static
address 10.1.1.1
netmask 255.255.255.0
slaves eth2 eth3
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 и объединяемых интерфейсов eth2 и eth3.
Важно! Если в данном файле присутствуют строки с настройками для интерфейсов eth2 и eth3, необходимо их удалить.
Более полное описание настроек, относящихся к агрегированным каналам для ОС Linux смотрите в соответствующем документе.
Важно! Предполагается, что изменения IP-адреса, маски подсети и значения MTU для интерфейсов bond0, eth2, eth3 будет происходить через файл /etc/network/interfaces, а не через cisco-like консоль, поэтому необходимо прописать настройки до строки ###netifcfg-begin###.
В данном сценарии описывается настройка агрегации каналов по стандарту 802.3ad с использованием протокола LACP. Пример настройки в режиме Active-Backup представлен в Приложении в разделе “Использование режима Active-Backup”.
Пример настройки VLAN на bond-интерфейсе представлен в Приложении в разделе “Использование VLAN на интерфейсе bond0”.
2. Для применения настроек выполните перезапуск сетевого сервиса:
root@sterragate:~# service networking restart
3. Проверьте логический и физические интерфейсы:
root@sterragate:~# ip address show | grep bond0
4: eth2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
5: eth3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
10: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
inet 10.1.1.1/24 brd 10.1.1.255 scope global bond0
Наглядно видно, что интерфейсы eth2 и eth3 находятся в режиме SLAVE, а bond0 в режиме MASTER.
4. Для работы IPsec на интерфейсе bond0 необходимо прописать данный интерфейс в файл /etc/ifaliases.cf. Строки с интерфейсами eth2 и eth3 необходимо удалить.
root@sterragate:~# vim.tiny /etc/ifaliases.cf
interface (name="GigabitEthernet0/0" pattern="eth0")
interface (name="GigabitEthernet0/1" pattern="eth1")
interface (name="GigabitEthernet1/0" pattern="bond0")
5. Пересчитайте контрольную сумму измененного файла:
root@sterragate:~# integr_mgr calc -f /etc/ifaliases.cf
SUCCESS: Operation was successful.
6. Перезапустите сервис VPN агента:
root@sterragate:~# service vpngate restart
Stopping IPsec daemon.... done.
Starting IPsec daemon.. done.
7. После проведенных настроек можно прикрепить крипто-карту на интерфейс bond0 (GigabitEthernet1/0).
Важно! IP-адрес интерфейса bond0 необходимо изменять только через файл /etc/network/interfaces, как описывается в п. 1.
Для того чтобы настроить протокол 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, а на шлюзе используется режим агрегации каналов по стандарту 802.3ad с использованием протокола LACP. При необходимости использования на шлюзе режима агрегации каналов Active-Backup, настраивать на коммутаторе EtherChannel нет необходимости. Каналы могут идти через разные коммутаторы (Рисунок 2).
Для того чтобы убедиться, что настройка протокола 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 0010.18a7.89dc 12s 0x0 0x11 0x1 0x3D
Gi0/2 SA 255 0010.18a7.89dc 12s 0x0 0x11 0x2 0x3D
Обратите внимание на колонку Dev ID. Данные адреса должны соответствовать MAC-адресам логических интерфейсов (bond0).
2. На шлюзе безопасности GW01 выполните команду:
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: slow
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 2
Number of ports: 2
Actor Key: 17
Partner Key: 1
Partner Mac Address: 58:8d:09:c9:5f:00
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:10:18:a7:89:dc
Aggregator ID: 2
Slave Interface: eth3
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:10:18:a7:89:de
Aggregator ID: 2
MAC-адрес партнера по протоколу LACP: 58:8d:09:c9:5f:00, данный адрес должен соответствовать адресу на коммутаторе Switch01:
SWITCH01#show lacp sys-id
32768, 588d.09c9.5f00
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 с хоста 192.168.1.100 на адрес 192.168.2.100 и 192.168.2.101 с интервалом 0.1. Данный трафик будет идти по разным каналам.
root@IPHost1:~# ping 192.168.2.101 -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
auto bond0
iface bond0 inet static
address 10.1.1.1
netmask 255.255.255.0
slaves eth2 eth3
bond_mode active-backup
bond_miimon 100
Важно! Если в данном файле присутствуют строки с настройками для интерфейсов eth2 и eth3, необходимо их удалить.
Более полное описание настроек, относящихся к агрегированным каналам для ОС Linux смотрите в соответствующем документе.
Важно! Предполагается, что изменения IP-адреса, маски подсети и значения MTU для интерфейсов bond0, eth2, eth3 будет происходить через файл /etc/network/interfaces, а не через cisco-like консоль, поэтому необходимо прописать настройки до строки ###netifcfg-begin###.
Балансировки трафика в данном режиме не предусмотрено.
Существует возможность использовать данный режим не только для резервирования каналов, но и для резервирования коммутаторов (
Рисунок 2).
Рисунок 2
Дальнейшая настройка не отличается от настройки агрегации каналов по стандарту 802.3ad с использованием протокола LACP.
1. При необходимости использования VLAN на интерфейсе bond0 отредактируйте файл /etc/network/interfaces.
root@sterragate:~# vim.tiny /etc/network/interfaces
auto bond0
iface bond0 inet manual
slaves eth2 eth3
bond_mode 802.3ad
bond_miimon 100
bond_xmit_hash_policy layer2+3
auto bond0.10
iface bond0.10 inet static
address 10.1.1.1
netmask 255.255.255.0
auto bond0.11
iface bond0.11 inet static
address 10.2.1.1
netmask 255.255.255.0
Важно! Предполагается, что изменения IP-адреса, маски подсети и значения MTU для интерфейсов bond0, bond0.10, bond0.11, eth2, eth3 будет происходить через файл /etc/network/interfaces, а не через cisco-like консоль, поэтому необходимо прописать настройки до строки ###netifcfg-begin###.
В данном случае добавляем два VLAN интерфейса – bond0.10 и bond0.11.
Важно! Интерфейс bond0 должен быть с параметром inet maual, а не inet static, так как IP-адреса на данном интерфейсе не задан.
1.1. При использовании на VLAN-интерфейсах значений MTU отличных от 1500, необходимо прописать в файле /etc/network/interfaces строки для задания MTU интерфейса bond0 и VLAN-интерфейсов.
auto bond0
iface bond0 inet manual
post-up ifconfig bond0 mtu 1700
slaves eth2 eth3
bond_mode 802.3ad
bond_miimon 100
bond_xmit_hash_policy layer2+3
auto bond0.10
iface bond0.10 inet static
post-up ifconfig bond0 mtu 1700
address 10.1.1.1
netmask 255.255.255.0
iface bond0.11 inet static
auto bond0.11
post-up ifconfig bond0 mtu 1700
address 10.2.1.1
netmask 255.255.255.0
Важно! MTU VLAN-интерфейсов bond0.10 и bond0.11 не может быть больше, чем MTU интерфейса bond0.
2. Для применения настроек выполните перезапуск сетевого сервиса:
root@sterragate:~# service networking restart
3. Для работы IPsec на VLAN интерфейсе необходимо выполнить следующие действия.
3.1. Добавьте данный интерфейс в файл /etc/ifaliases.cf:
interface (name="GigabitEthernet1/0.10" pattern="bond0.10")
В данном случае добавляем только интерфейс bond0.10.
3.2. Пересчитайте контрольную сумму измененного файла:
root@sterragate:~# integr_mgr calc -f /etc/ifaliases.cf
SUCCESS: Operation was successful.
3.3. Перезапустите сервис VPN агента:
root@sterragate:~# service vpngate restart
Stopping IPsec daemon.... done.
Starting IPsec daemon.. done.
3.4. После проведенных настроек можно прикрепить крипто-карту на интерфейс bond0.10 (GigabitEthernet1/0.10).
4. Проверить принадлежность трафика к 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, 10.1.1.1 > 10.1.1.2: 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, 10.1.1.2 > 10.1.1.1: ICMP echo reply, id 2143, seq 9, length 64