Что такое зеркалирование портов?
Зеркалирования портов— технология дублирования пакетов одного порта сетевого коммутатора (или отдельной VLAN) на другом. Большое количество управляемых сетевых коммутаторов позволяют дублировать трафик от одного или нескольких портов и/или VLAN на отдельно взятый порт.
Зеркалирования портов используется на сетевом коммутаторе или маршрутизаторе для отправки копии сетевых пакетов, видимых на указанных портах (исходный порт), на другие указанные порты (порт назначения). При включенном зеркалировании портов пакеты можно отслеживать и анализировать. Зеркалирование портов применяется широко, например, сетевые инженеры могут использовать зеркалирование портов для анализа и отладки данных или диагностики ошибок в своих сетях, без влияя на возможности обработки пакетов сетевых устройств. А Министерство культуры и общественной безопасности могут собирать связанные данные из зеркалирования портов для анализа поведения сети, чтобы обеспечить здоровую сетевую среду.
Как работает зеркалирование портов?
Локальное и удаленное зеркалирование портов — это два типа зеркалирования портов, основанные на разных рабочих диапазонах зеркалирования. Они работают по разным принципам.
Локальное зеркалирование портов является наиболее простой формой зеркалирования. Все исходные порты расположены на том же сетевом устройстве как порт назначения. Как показано на рисунке 1, зеркалирование локального порта позволяет сетевому коммутатору переслать копию пакета с исходного порта (Eth 1/1) на порт назначения (Eth 1/2). Затем устройство мониторинга, подключенное к порту назначения, может отслеживать и анализировать пакет.
Что касается зеркалирования удаленных портов, исходные порты и порты назначения не находятся на одном устройстве. Как показано на рисунке 2, исходные порты (Eth 1/3) находится на одном коммутаторе, а порт назначения (Eth 1/3) — на другом коммутаторе. Исходный порт пересылает копию пакета на порт назначения через соединение восходящей линии связи, достигнутое портом (Eth 1/4) на двух коммутаторах. Следовательно, зеркалирование локальных портов позволяет осуществлять мониторинг и анализ данных на разных устройствах.
Общие чаво и решения
1. Как настроить зеркалирование портов?
Обязательным условием настройки зеркалирования портов является обеспечение того, что сетевое устройство (независимо от коммутатора или маршрутизатора) поддерживает зеркалирование портов. Затем выберите один из режимов: зеркалирование локальных портов или настройка зеркалирования удаленных портов.
Схема конфигурации зеркалирования локального порта:
1. Создайте VLAN.
2. Добавьте порт источника и порт назначения в VLAN.
3. Настройте IP-адрес.
4. Настройте зеркалирование порта на порте назначения и скопируйте пакет с исходного порта на порт назначения.
План настройки зеркалирования удаленных портов:
1. Создайте исходный порт в глобальной схеме.
2. Настройте порт восходящей связи на одном коммутаторе.
3. Создайте порт назначения в глобальной схеме.
4. Настройте порт восходящей линии связи на другом коммутаторе.
Обратите внимание, что:
1. Конфигурация вступает в силу после установки одного порта в качестве порта источника и установки другого порта в качестве порта назначения в зеркалировании локального порта.
2. При создании группы зеркалирования можно установить только один порт назначения, но в группе может быть один или несколько исходных портов.
3. Если один порт был указан в качестве исходного порта в одной группе зеркалирования, он не может быть членом другой группы зеркалирования.
4. Если один порт был указан как порт назначения в одной группе зеркалирования, он не может быть членом другой группы зеркалирования.
5. Рекомендуется не применять STP, RSTP или MSTP к порту назначения, в противном случае устройство может работать со сбоями.
2. Зеркалирование портов и зеркалирование трафика, в чем разница?
Зеркалирование порта и Зеркалирование трафика относятся к функции зеркалирования.
Зеркалирование трафика — функция коммутатора, предназначенная для перенаправления трафика с одного порта коммутатора на другой порт этого же коммутатора (локальное зеркалирование) или на удаленный коммутатор (удаленное зеркалирование). Как показано на рисунке 3, исходный порт копирует поток данных, соответствующий правилу от клиента 2 к порту назначения, который затем отправляет скопированный поток данных на устройство мониторинга. Соответствующий поток данных может быть установлен ACL (Access Control List) или командами конфигурации. При зеркалировании трафика на устройство мониторинга отправляется только выбранный или согласованный трафик, а при зеркалировании портов копируется каждый пакет, который проходит через интерфейс, на устройство мониторинга.
3. Зеркальное отображение портов и сопоставление портов: в чем разница?
Port mapping — это переадресация принимаемых данных таким образом, чтобы данные, принимаемые на какой-то порт одного компьютера автоматически переадресовывались на какой-то другой порт другого компьютера. Все передаваемые вами данные безо всяких искажений передаются на другой компьютер, который может быть расположен где угодно. Эта технология в чем-то аналогична прокси серверу, однако она гораздо проще и гораздо менее гибкая. Таким образом, port mapping — это процесс пересылки данных, а зеркалирование порта — это процесс копирования данных.
4. Как проверить зеркалирование портов?
В общем, пользователи могут проверить результаты зеркалирования портов с помощью программного обеспечения захвата пакета. Запустите программное обеспечение на устройстве мониторинга, конфигурация завершится успешно при получении пакета, отправленного или полученного исходным портом.
Требования к использованию
Дата последнего обновления: 01-21-2021 09:28:06 AM
117094
Эта статья подходит для:
TL-ER6120 , TL-ER6020 , TL-ER5120 , TL-R480T+ , TL-R470T+ , TL-ER604W
Зеркалирование порта (Port Mirror) позволяет дублировать дейтаграмму с одного порта на другой. Эта функция может быть полезна администраторам сети для получения дейтаграммы с определенных портов для диагностики различных проблем или мониторинга сети.
Настроим зеркалирование на примере роутера TL-ER6120:
- Перейдите в раздел Switch в разделе Network. Затем нажмите на Port Mirror.
- Установите галочку для включения функции Port Mirror. Затем можно выбрать тип трафика для мониторинга: Ingress (входящий), Egress (исходящий) или Ingress & Egress (входящий и исходящий).
- Теперь выберите Mirroring Port (порт назначения) и Mirrored Port (исходный порт, с которого получаются данные). Обратите внимание, что портов, за которыми можно наблюдать, может быть несколько.
- Нажмите Save для применения настроек.
После выполнения всех указанных на скриншоте настроек, все входящие и исходящие данные портов 2 и 4 будут пересылаться на порт 3.
Внимание: модели TL-R470T+ V6.0 и TL-R480T+ V9.0 не поддерживают данную функцию.
Был ли этот FAQ полезен?
Ваш отзыв поможет нам улучшить работу сайта.
Что вам не понравилось в этой статье?
- Недоволен продуктом
- Слишком сложно
- Неверный заголовок
- Не относится к моей проблеме
- Слишком туманное объяснение
- Другое
Как мы можем это улучшить?
Спасибо
Спасибо за обращение
Нажмите здесь, чтобы связаться с технической поддержкой TP-Link.
Huawei uses machine translation combined with human proofreading to translate this document to different languages in order to help you better understand the content of this document.
Note: Even the most advanced machine translation cannot match the quality of professional translators.
Huawei shall not bear any responsibility for translation accuracy and it is recommended that you refer to the English document (a link for which has been provided).
What Is Mirroring
- Concepts of Mirroring
- Understanding Mirroring
- Configuring Mirroring
- Deleting the Mirroring Configuration
Concepts of Mirroring
Security Declaration
The switch supports the mirroring function, which is used for network detection and fault management and may involve personal communication information. Huawei cannot collect or store user communication information without permission. It is recommended that relevant functions used to collect or store user communication information be enabled in adherence with applicable laws and regulations. During the usage and storage of user communication information, measures must be taken to protect user communication information.
This document uses S series switches of V200R013C00 as an example.
Definition
Mirroring copies (or mirrors) traffic received or sent (or both) on a specified source to a destination port for analysis. The specified source is called mirrored source, the destination port is called observing port, and the copied traffic is called mirrored traffic.
Mirroring sends a copy of the traffic through an observing port on a switch to a monitoring device for service analysis, without affecting the processing of original traffic on the source.
Figure 1-1 Example of mirroring
Mirrored Port and Observing Port
In Figure 1-1, all original traffic on the two source ports (mirrored ports) is mirrored to a destination port (the observing port), and the observing port sends the mirrored traffic to monitoring device. Observing ports are classified into three types based on how observing ports are connected to the monitoring device.
-
Local observing port: is directly connected to a monitoring device. These ports are used for local mirroring.
-
Layer 2 remote observing port: is connected to a monitoring device across a Layer 2 network. These ports are used for Layer 2 remote mirroring.
-
Layer 3 remote observing port: is connected to a monitoring device across a Layer 3 network. These ports are used for Layer 3 remote mirroring. Only S series modular switches support Layer 3 remote mirroring. For more information, see How Can I Obtain the Layer 3 Remote Mirroring (ERSPAN) Plug-in and Related Documentation?
You must dedicate observing ports for mirroring use and do not configure other services on them to prevent mirrored traffic and other service traffic from affecting each other.
If mirroring is deployed on many ports of a switch, a great deal of internal forwarding bandwidth will be occupied, affecting the forwarding of other services. Additionally, if mirrored and observing ports provide different bandwidths, for example, 1000 Mbit/s on a mirrored port and 100 Mbit/s on an observing port, the observing port may fail to forward all mirrored traffic in a timely manner due to insufficient bandwidth, leading to packet loss.
Mirrored Source
Mirrored sources can be any one of the following:
-
Port: Traffic received or sent on a specified port is copied to an observing port. This mirroring function is port mirroring.
-
VLAN: Traffic received on all active ports in a specified VLAN is copied to an observing port. This mirroring function is VLAN mirroring.
-
MAC address: Traffic with a specified source or destination MAC address in a given VLAN is copied to an observing port. This mirroring function is MAC address mirroring.
-
Traffic: Traffic matching specified rules is copied to an observing port. This mirroring function is traffic mirroring.
Mirroring Directions
Mirroring directions define whether received or sent (or both) traffic is copied from mirrored ports to observing ports:
-
Inbound: The switch sends a copy of traffic received by mirrored ports to observing ports. This mirroring function is inbound mirroring.
-
Outbound: The switch sends a copy of traffic sent by mirrored ports to observing ports. This mirroring function is outbound mirroring.
-
Both: The switch sends a copy of traffic received and sent by mirrored ports to observing ports.
Understanding Mirroring
Port Mirroring
Port mirroring allows you to copy traffic received or sent by a mirrored port to an observing port. Depending on the observing port type, port mirroring is classified into local port mirroring and Layer 2 remote port mirroring
Local Port Mirroring
Local port mirroring copies traffic to an observing port that is directly connected to a monitoring device. Figure 1-2 shows that a local observing port forwards the traffic copied from a mirrored port to the directly connected monitoring device.
Figure 1-2 Local port mirroring
Layer 2 Remote Port Mirroring
Layer 2 remote port mirroring copies traffic to an observing port that is connected to a monitoring device across a Layer 2 network. Figure 1-3 shows the process of mirrored traffic forwarding in Layer 2 remote port mirroring.
-
The mirrored port copies original traffic and sends them to the Layer 2 remote observing port.
-
The Layer 2 remote observing port receives the mirrored traffic from the mirrored port, adds another VLAN tag (VLAN 20) to the original traffic tagged with VLAN 10, and then forwards the traffic to the intermediate Layer 2 network. Note that in this step, you can directly specify VLAN 20 while configuring the Layer 2 remote observing port, without the need to add the port to VLAN 20.
-
SwitchC receives the mirrored traffic sent from the Layer 2 remote observing port and then forwards the traffic to the monitoring device. To enable SwitchB, SwitchC, and the monitoring device to communicate at Layer 2, you need to add the ports connecting the intermediate Layer 2 device (SwitchC) to the Layer 2 remote observing port and monitoring device to VLAN 20.
In Layer 2 remote mirroring, a Layer 2 remote observing port is connected to a monitoring device across a Layer 2 network, so a VLAN on this Layer 2 network needs to be reserved for mirrored traffic forwarding. This VLAN is similar to VLAN 20 in Figure 1-3 and is called Layer 2 remote mirroring VLAN.
-
Create this VLAN and add ports to the VLAN on all intermediate devices in the Layer 2 network across which an observing port is connected to a monitoring device so that mirrored traffic can be flooded through the VLAN to the monitoring device.
-
Disable MAC address learning in this VLAN on all intermediate devices.
-
This VLAN cannot be the VLAN to which the original traffic belongs.
Figure 1-3 Layer 2 remote port mirroring
VLAN Mirroring
VLAN mirroring copies traffic received in a specified VLAN to an observing port. In Figure 1-4, the switch copies only the packets of VLAN 10 to the monitoring device. Similar to port mirroring, VLAN mirroring is classified into local VLAN mirroring and Layer 2 remote VLAN mirroring depending on the observing port type. Be aware of the following:
- Only S series switches support VLAN mirroring.
- The switch supports only inbound VLAN mirroring. That is, the switch can copy only the packets received in a specified VLAN to observing ports.
- In Layer 2 remote VLAN mirroring, the VLAN to which the original traffic belongs must be different from the Layer 2 remote mirroring VLAN used on the intermediate Layer 2 network to forward mirrored traffic.
Figure 1-4 VLAN mirroring
MAC Address Mirroring
MAC address mirroring copies traffic with a specified source or destination MAC address in a specified VLAN to an observing port. MAC address mirroring is a more accurate mirroring mode, allowing you to monitor packets of a specified device for analysis. In Figure 1, the switch copies only the packets sent from HostA to the monitoring device. Similar to port mirroring, traffic mirroring is classified into local traffic mirroring and Layer 2 remote traffic mirroring depending on the observing port type. Be aware of the following:
-
Only S series switches support MAC address mirroring.
- The switch supports only inbound MAC address mirroring. That is, the switch can copy only the packets with a specified source or destination MAC address and are received in a specified VLAN to observing ports.
-
In Layer 2 remote MAC address mirroring, the VLAN to which the original traffic belongs must be different from the Layer 2 remote mirroring VLAN used on the intermediate Layer 2 network to forward mirrored traffic.
Figure 1-5 MAC address mirroring
Traffic Mirroring
Implementation
Traffic mirroring copies traffic matching specified rules from one or more mirrored ports to one or more observing ports, which then send the traffic to monitoring devices for analysis. Figure 1 shows the process of traffic mirroring. The mirrored port copies service flow 2 that matches rules to the observing port, which then forwards the copied flow to the monitoring device.
Similar to port mirroring, traffic mirroring is classified into local traffic mirroring and Layer 2 remote traffic mirroring depending on the observing port type.
Figure 1-6 Traffic mirroring
Traffic Mirroring Rules
A traffic policy containing a traffic mirroring behavior can be applied globally, in a VLAN, or on a mirrored port. Traffic mirroring rules can be configured using Modular QoS Command-Line Interface (MQC) and ACL.
-
Using MQC: It is complex to configure but supports more matching rules than ACL. MQC-based traffic mirroring can be applied to both inbound and outbound directions.
-
Using ACL: It is easy to configure but supports fewer matching rules than MQC. ACL-based traffic mirroring can only be applied to the inbound direction.
In Layer 2 remote traffic mirroring, if a traffic policy containing traffic mirroring is applied in a VLAN, the VLAN cannot be the Layer 2 remote mirroring VLAN used on the intermediate Layer 2 network to forward mirrored packets.
Configuring Mirroring
Configuring Observing Ports
Context
You must dedicate observing ports for mirroring use and do not configure other services on them to prevent mirrored traffic and other service traffic from affecting each other.
You can configure observing ports in two ways:
-
Configure a single observing port.
-
Configure an observing port group. This method is often used in 1:N mirroring to simplify the configuration and save observing port indexes. This is because an observing port group occupies only one observing port index regardless of how many ports are configured in the group.
NOTE:
Only the S5720EI, S5720HI, S5730HI, S6720EI, S6720HI, S6720S-EI, and all modular switches support observing port groups.
The management interface cannot be configured as an observing port.
Procedure
-
Configure local observing ports.
Configuration
Procedure
Configure a single local observing port.
-
Run the system-view command to enter the system view.
-
Run the observe-port [ observe-port-index ] interface interface-type interface-number [ untag-packet ] command to configure a single local observing port.
-
(Recommended) Run the observe-port observe-port-index forwarding disable command to disable the specified observing port from forwarding data packets.
By default, an observing port forwards data packets.
Configure a local observing port group.
-
Run the system-view command to enter the system view.
-
Run the observe-port [ observe-port-index ] interface-range { interface-type interface-number [ to interface-type interface-number ] } &<1-n> [ untag-packet ] command to configure a local observing port group.
In &<1-n>, n is 4 on S5720EI, S6720EI, and S6720S-EI or 8 on S5720HI, S5730HI, S6720HI, and modular switches.
-
(Optional) Run the observe-port observe-port-index interface-range { add | delete } interface-type interface-number command to add or delete specified observing ports to or from the local observing port group.
-
(Recommended) Run the observe-port observe-port-index forwarding disable command to disable the specified observing port from forwarding data packets.
By default, an observing port forwards data packets.
-
-
Configure Layer 2 remote observing ports.
Configuration
Command
Configure a single Layer 2 remote observing port.
-
Run the system-view command to enter the system view.
-
Run the observe-port [ observe-port-index ] interface interface-type interface-number vlan vlan-id command to configure a single Layer 2 remote observing port and specify the Layer 2 remote mirroring VLAN.
-
(Recommended) Run the observe-port observe-port-index forwarding disable command to disable the specified observing port from forwarding data packets.
By default, an observing port forwards data packets.
Configure a Layer 2 remote observing port group.
-
Run the system-view command to enter the system view.
-
Run the observe-port [ observe-port-index ] interface-range { interface-type interface-number [ to interface-type interface-number ] } &<1-n> vlan vlan-id command to configure a Layer 2 remote observing port group and specify the Layer 2 remote mirroring VLAN.
In &<1-n>, n is 4 on S5720EI, S6720EI, and S6720S-EI or 8 on S5720HI, S5730HI, S6720HI, and modular switches.
-
(Optional) Run the observe-port observe-port-index interface-range { add | delete } interface-type interface-number command to add or delete specified observing ports to or from the Layer 2 remote observing port group.
-
(Recommended) Run the observe-port observe-port-index forwarding disable command to disable the specified observing port from forwarding data packets.
By default, an observing port forwards data packets.
-
Verifying the Configuration
# Run the display observe-port command to view the observing port configuration. The following is a sample command output.
<HUAWEI> display observe-port ---------------------------------------------------------------------- Index : 1 Untag-packet : No Forwarding : Yes Interface : GigabitEthernet0/0/1 ---------------------------------------------------------------------- Index : 2 Untag-packet : No Forwarding : Yes Interface-range: GigabitEthernet0/0/2 Vlan : 20 ---------------------------------------------------------------------- Index : 3 Untag-packet : No Forwarding : Yes Interface-range: GigabitEthernet0/0/3 to GigabitEthernet0/0/5 ----------------------------------------------------------------------
Configuring the Mirroring Mode
Procedure
Mirroring Mode |
Procedure |
---|---|
Port mirroring |
|
VLAN mirroring |
|
MAC address mirroring |
|
Traffic mirroring |
MQC-based traffic mirroring:
|
ACL-based traffic mirroring:
|
Verifying the Configuration
# Run the display port-mirroring command to view the mirroring configuration. The following is a sample command output.
<HUAWEI> display port-mirroring ---------------------------------------------------------------------- Observe-port 1 : GigabitEthernet0/0/1 Observe-port 2 : GigabitEthernet0/0/2 Observe-port 3 : GigabitEthernet0/0/3 Observe-port 4 : GigabitEthernet0/0/4 ---------------------------------------------------------------------- Port-mirror: ---------------------------------------------------------------------- Mirror-port Direction Observe-port ---------------------------------------------------------------------- 1 GigabitEthernet0/0/15 Inbound Observe-port 1 ---------------------------------------------------------------------- Stream-mirror: ---------------------------------------------------------------------- Behavior Direction Observe-port ---------------------------------------------------------------------- 1 b1 - Observe-port 2 ---------------------------------------------------------------------- Vlan-mirror: ---------------------------------------------------------------------- Mirror-vlan Direction Observe-port ---------------------------------------------------------------------- 10 Inbound Observe-port 3 ---------------------------------------------------------------------- Mac-mirror: ---------------------------------------------------------------------- Mirror-mac Vlan Direction Observe-port ---------------------------------------------------------------------- 0001-0001-0001 10 Inbound Observe-port 4 ----------------------------------------------------------------------
Deleting the Mirroring Configuration
Context
If you want to delete the mirroring configuration and restore observing ports as service ports, perform the following operations.
Before deleting the mirroring configuration, you can run the display port-mirroring command and display current-configuration command to view the mirroring configuration on the device. The following example describes how to delete the mirroring configuration.
Procedure
-
Delete the port mirroring configuration.
<HUAWEI> system-view [HUAWEI] interface gigabitethernet 0/0/2 [HUAWEI-GigabitEthernet0/0/2] undo port-mirroring to observe-port 1 inbound // Unbind the mirrored port from the observing port 1. [HUAWEI-GigabitEthernet0/0/2] quit [HUAWEI] undo observe-port 1 // Delete the observing port.
-
Delete the VLAN mirroring configuration.
<HUAWEI> system-view [HUAWEI] vlan 10 [HUAWEI-vlan10] undo mirroring to observe-port 1 inbound // Unbind the VLAN from the observing port 1. [HUAWEI-vlan10] quit [HUAWEI] undo observe-port 1 // Delete the observing port.
-
Delete the MAC address mirroring configuration.
<HUAWEI> system-view [HUAWEI] vlan 10 [HUAWEI-vlan10] undo mac-mirroring 1-1-1 to observe-port 1 inbound // Unbind the MAC address from the observing port 1. [HUAWEI-vlan10] quit [HUAWEI] undo observe-port 1 // Delete the observing port.
-
Delete the traffic mirroring configuration.
<HUAWEI> system-view [HUAWEI] interface gigabitethernet 0/0/2 [HUAWEI-GigabitEthernet0/0/2] undo traffic-policy p1 inbound // Cancel the traffic policy. [HUAWEI-GigabitEthernet0/0/2] quit [HUAWEI] undo traffic policy p1 // Delete the traffic policy. [HUAWEI] undo traffic behavior b1 // Delete the traffic behavior. [HUAWEI] undo traffic classifier c1 // Delete the traffic classifier (This operation is optional. If this traffic classifier is being used by another traffic policy, it can be retained.) [HUAWEI] undo observe-port 1 // Delete the observing port.
Сегодня мы поговорим о зеркалировании трафика на маршрутизаторах Juniper серии MX. После свичей производства Cisco, Huawei или Arista конфигурация SPAN и RSPAN на JunOS будет казаться очень сложной, но за сложной (на первый взгляд) конфигурацией скрываются огромные возможности платформы MX в области зеркалирования трафика. Подход Juniper хоть и на первый взгляд сложен, но становится прост и понятен, если не тупо копипастить конфиги с одной коробки на другую, а понимать, что и зачем делается. Идеология JunOS предполагает использовать filter based forwarding (FBF) в целях зеркалирования, что дает нам определенную гибкость в реализации сложных схем зеркалирования трафика.
Итак, начнем. Мы рассмотрим несколько примеров зеркалирования:
1. Локальное зеркалирование с порта на порт
2. Зеркалирование на два и более потребителя
3. Зеркалирование на удаленный хост
4. Избирательное зеркалирование на два и более потребителя
5. Локальное зеркалирование L2 трафика
6. Зеркалирование L2 трафика на удаленный сервер
7. Использование более двух mirroring инстансов на одном FPC
Итак, начнем по порядку.
Локальное зеркалирование с порта на порт.
Наш тестовый стенд будет постоянно меняться — будем добавлять потребителей, изменять их желания по получаемой копии трафика и т.д. На первом этапе тестовый стенд выглядит так:
Примечание: сначала я хотел использовать генератор трафика, но потом решил, что и сгенерированные hping3 tcp/udp/icmp пакеты, отловленные на анализаторе трафика (как анализатор использовался просто хост с ubuntu server 14.04 на борту) будут более наглядны, чем просто счетчики с портов в pps (можно к примеру сравнить актуальность отправленных и принятых данных). Счетчики же надо использовать при проведении нагрузочного тестирования для проверки производительности маршрутизатора при использовании данного функционала. Но на виртуальном MX проверять производительность нет смысла — все равно все упрется в возможности сервера вируализации.
Предположим, что между серверами Server-1 (11.0.0.1) и Server-2 (12.0.0.1) есть какой то обмен трафиком. Владельцы сервера Analyzer-1 хотят видеть, что именно передается между этими двумя серверами, поэтому нам надо настроить отправку копии всего трафика между Server-1 и Server-2 на Analyzer-1 — то есть сделать локальное зеркалирование. Итак, приступим.
В теории это должно работать так: мы создаем мирроринг инстанс, в котором указываем параметры входящего трафика (с какой периодичностью зеркалировать трафик) и исходящие параметры в какой или какие порты отравить трафик. Для того, чтобы направить трафик в созданный нами инстанс надо на интерфейс или интерфейсы, с которого(-ых) мы хотим снять копию трафика повесить специальный фильтр, который и завернет наш трафик в нужный инстанс. То есть это классическая схема policy base routing-а, ну или filter base routing-а в терминах Juniper. С теорией разобрались, теперь перейдем к практике — нам надо собрать такую схему зеркалирования:
Сначала нам надо создать инстанс в иерархии [edit forwarding-options port-mirroring], который мы будем использовать для зеркалирования трафика.
[edit forwarding-options port-mirroring]
bormoglotx@RZN-PE-1# show
instance {
SPAN-1 {
input {
rate 1;
run-length 0;
}
family inet {
output {
interface ge-0/0/1.0 {
next-hop 169.254.0.1;
}
}
}
}
Конфигурация инстанса состоит из двух частей. Сначала разберемся с секцией input — как не трудно догадаться, это параметры входящего трафика, который должен быть отзеркалирован. Тут важными являются параметры rate и run-length. Первый параметр отвечает за то, с какой частотой будут зеркалироваться пакеты (срабатывать триггер), второй параметр отвечает за то, сколько пакетов еще будет отзеркалировано после срабатывания триггера rate.
В нашем случае rate выставлен в 1, то есть каждый пакет будет отзеркалирован. Run-length выставлен в 0-ль, так как при rate, равным 1 его наличие не играет никакой роли.
Для полноты понимания разберем значение данных параметров на более наглядном примере. Параметр rate задает частоту зеркалирования трафика, предположим rate равен 5, то есть триггер будет срабатывать на каждом 5-м пакете, а значит каждый 5-й пакет будет отзеркалирован. Теперь предположим, что run-length установлен в 4. Это говорит нам о том, что еще 4-ре пакета будут отзеркалированы, после каждого 5-го пакета. То есть сначала сработал триггер на 5-м пакете — этот пакет будет отзеркалирован, теперь еще 4-ре пакета, следующие за уже отзеркалированным, будут тоже отзеркалированы. В итоге получим, что мы зеркалируем каждый 5-й пакет плюс еще 4 следующих за ним пакета — итого 100% трафика. Изменяя эти параметры можно отзеркалировать например каждые 10 пакетов из 100 и т д (ну это больше нужно для сэмплинга, нежели зеркалирования, просто принцип работы тот же).
Если вернуться к нашему случаю, то мы и так зеркалируем каждый пакет, поэтому параметр run-length нам просто не нужен и оставлен по умолчанию равный нулю.
Для расчета процента отзеркалированного трафика можно пользоваться формулой
%=((run-length+1)/rate)*100)
. Логично что при параметрах run-length 1 и rate 1, мы получаем зеркалирование 200% трафика или например при rate 1 и run-length 4 — 500% трафика. Огорчу вас или обрадую — больше чем 100% трафика не отзеркалируется — размножать пакеты Juniper не станет, что более чем логично. Да и придумать сценарий, когда вам необходимо сделать две копии одного и того же трафика я так и не смог (если кто знает — пишите в комментарии).
И еще один важный параметр — maximum-packet-length. Это максимальный размер пакета, который будет отзеркалирован. Если вы выставите его например в 128, то при получении пакета, больше чем 128 байт (ну к примеру 1514), от него будет отрезаны первые 128 байт и отправлены потребителю. Остальная часть пакета будет просто отброшена. Это удобно, когда вам на сервер надо отправить только заголовки и пейлоад вам не нужен. Не рекомендуется ставить менее чем 20 для ipv4.
Теперь перейдем к output параметрам. Тут в общем случае нам необходимо указать интерфейс, в который мы ходим отзеркалировать трафик. В случае, когда у нас просто p2p интерфейс, то больше ничего указывать не надо — все и так полетит. Но как мы все помним, ethernet — это далеко не p2p (если быть точным то это csma/cd), и помимо интерфейса нам надо указать адрес хоста, которому предназначен трафик, как IP, так и MAC (но до этого мы дойдем чуть позже). Я выбрал адрес из диапазона линк-локал адресов, чтобы избежать каких либо пересечений с уже имеющимися адресами — вы же можете брать любую адресацию, это абсолютно не изменит ничего в принципе работы технологии. В ethernet чтобы отправить пакет какому то хосту, маршрутизатору необходимо выяснить MAC адрес это хоста с помощью ARP. В моем же случае на стороне сервера-получателя ничего не сконфигурено — просто пустой интерфейс и получится, что маршрутизатор будет тщетно пытаться разрезолвить адрес удаленного хоста. Естественно все зеркалирование на этом закончится. Как быть в данной ситуации? Все гениальное просто — делается статическая ARP запись:
bormoglotx@RZN-PE-1# show interfaces ge-0/0/1
description Analyzer-1;
unit 0 {
family inet {
address 169.254.0.0/31 {
arp 169.254.0.1 mac 02:00:00:00:00:01;
}
}
}
В итоге будем иметь вот такую запись на интерфейсе:
[edit]
bormoglotx@RZN-PE-1# run show arp interface ge-0/0/1.0
MAC Address Address Name Interface Flags
02:00:00:00:00:01 169.254.0.1 169.254.0.1 ge-0/0/1.0 permanent
Тут хотелось бы остановиться поподробнее. Теоретически вы можете отправить трафик на какой то реальный адрес, сконфигурированный на сервере, но самым простым и наиболее гибким подходом является создание фиктивного IP адреса и ARP записи в сторону потребителя трафика — то есть попросту мы заставляем Juniper думать, что за указанным интерфейсом находится указанный нами IP/MAC адрес, что в итоге заставляет коробку тупо слать туда трафик, не разбираясь, а есть ли там реально указанный хост или нет — главное чтобы порт был в up. Использование статической ARP записи в зеркалировании имеет большое преимущество — статическая ARP запись не устаревает, а так же маршрутизатор не станет отправлять на сервер ARP запросы (которые могут попасть в дамп снимаемого трафика, что не очень хорошо).
Теперь, что бы трафик стал зеркалироваться, нам надо его как то завернуть в созданный нами инстанс. Для этого используется filter base forwarding. Мы создаем фильтр и применяем его на интересующий нас интерфейс:
[edit]
bormoglotx@RZN-PE-1# show firewall family inet filter MIRROR>>>SPAN-1
term MIRROR {
then port-mirror-instance SPAN-1;
}
[edit]
bormoglotx@RZN-PE-1# show interfaces ge-0/0/3
description Server-1;
unit 0 {
family inet {
filter {
input MIRROR>>>SPAN-1;
output MIRROR>>>SPAN-1;
}
address 11.0.0.254/24;
}
}
Так как нам надо собрать и входящий и исходящий трафик, то мы навешиваем фильтр на на оба направления.
Как показывает практика данный фильтр не блокирует прохождение трафика между самими серверами, поэтому писать действие accept нет необходимости, но для подстраховки его частенько добавляют.
Теперь можно проверить состояние сессии зеркалирования:
bormoglotx@RZN-PE-1> show forwarding-options port-mirroring
Instance Name: SPAN-1
Instance Id: 2
Input parameters:
Rate : 1
Run-length : 0
Maximum-packet-length : 0
Output parameters:
Family State Destination Next-hop
inet up ge-0/0/1.0 169.254.0.1
Судя по всему мирроринг в работе. Давай теперь запустим 5 пакетов с Server-1 на Server-2 и посмотрим, что мы сможем отловить на анализаторе Analyzer-1:
bormoglotx@Server-1:~$ sudo hping3 -S -c 5 12.0.0.1 -d 40 -I eth1
HPING 12.0.0.1 (eth1 12.0.0.1): S set, 40 headers + 40 data bytes
len=40 ip=12.0.0.1 ttl=63 DF id=34108 sport=0 flags=RA seq=0 win=0 rtt=3.4 ms
len=40 ip=12.0.0.1 ttl=63 DF id=34121 sport=0 flags=RA seq=1 win=0 rtt=3.5 ms
len=40 ip=12.0.0.1 ttl=63 DF id=34229 sport=0 flags=RA seq=2 win=0 rtt=3.5 ms
len=40 ip=12.0.0.1 ttl=63 DF id=34471 sport=0 flags=RA seq=3 win=0 rtt=3.5 ms
len=40 ip=12.0.0.1 ttl=63 DF id=34635 sport=0 flags=RA seq=4 win=0 rtt=3.5 ms
--- 12.0.0.1 hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
Теперь посмотрим что удалось задампить на сервере Analyzer-1:
bormoglotx@Analyzer-1:~$ sudo tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
Все не так радужно, из вывода видно, что у нас собственно ничего и не работает, хотя Juniper нам рапортовал в выводе выше, что все ок. Дело в том, что инстанс для зеркалирования можно создать самим (что мы и сделали) или же использовать дефолтный инстанс (он один на всю коробку). Если мы создаем инстанс сами, то мы должны ассоциировать данный инстанс с FPC, на которой мы делаем мирроринг (если порты на нескольких FPC — то значит ассоциировать с несколькими). Давайте вернем на Juniper и указем в конфигурации FPC созданный нами инстанс. Почему я на этом сделал акцент? Дело в том, что пару раз и сам на это натыкался и не мог понять в чем подвох — ведь выводы говорят, что все отлично.
[edit]
bormoglotx@RZN-PE-1# show | compare
[edit]
+ chassis {
+ fpc 0 {
+ port-mirror-instance SPAN-1;
+ }
+ }
Теперь снова проверим, работает ли зеркало:
bormoglotx@Server-1:~$ sudo hping3 -S -c 5 12.0.0.1 -d 40 -I eth1
HPING 12.0.0.1 (eth1 12.0.0.1): S set, 40 headers + 40 data bytes
len=40 ip=12.0.0.1 ttl=63 DF id=43901 sport=0 flags=RA seq=0 win=0 rtt=4.4 ms
len=40 ip=12.0.0.1 ttl=63 DF id=44117 sport=0 flags=RA seq=1 win=0 rtt=3.4 ms
len=40 ip=12.0.0.1 ttl=63 DF id=44217 sport=0 flags=RA seq=2 win=0 rtt=3.4 ms
len=40 ip=12.0.0.1 ttl=63 DF id=44412 sport=0 flags=RA seq=3 win=0 rtt=3.7 ms
len=40 ip=12.0.0.1 ttl=63 DF id=44416 sport=0 flags=RA seq=4 win=0 rtt=3.5 ms
--- 12.0.0.1 hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 3.4/3.7/4.4 ms
bormoglotx@Analyzer-1:~$ sudo tcpdump -i eth1 -B 4096
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
14:48:43.641475 IP 11.0.0.1.2237 > 12.0.0.1.0: Flags [S], seq 1075183755:1075183795, win 512, length 40
14:48:43.642024 IP 12.0.0.1.0 > 11.0.0.1.2237: Flags [R.], seq 0, ack 1075183796, win 0, length 0
14:48:44.641981 IP 11.0.0.1.2238 > 12.0.0.1.0: Flags [S], seq 1410214066:1410214106, win 512, length 40
14:48:44.642818 IP 12.0.0.1.0 > 11.0.0.1.2238: Flags [R.], seq 0, ack 1410214107, win 0, length 0
14:48:45.642022 IP 11.0.0.1.2239 > 12.0.0.1.0: Flags [S], seq 1858880488:1858880528, win 512, length 40
14:48:45.642873 IP 12.0.0.1.0 > 11.0.0.1.2239: Flags [R.], seq 0, ack 1858880529, win 0, length 0
14:48:46.642127 IP 11.0.0.1.2240 > 12.0.0.1.0: Flags [S], seq 1472273281:1472273321, win 512, length 40
14:48:46.642947 IP 12.0.0.1.0 > 11.0.0.1.2240: Flags [R.], seq 0, ack 1472273322, win 0, length 0
14:48:47.642017 IP 11.0.0.1.2241 > 12.0.0.1.0: Flags [S], seq 1810623498:1810623538, win 512, length 40
14:48:47.642601 IP 12.0.0.1.0 > 11.0.0.1.2241: Flags [R.], seq 0, ack 1810623539, win 0, length 0
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
В итоге весь обмен трафиком между Server-1 и Server-2 попал на анализатор, чего мы и добивались.
Двигаемся далее, наша схема изменилась и теперь у нас появился Analyzer-2, который также хочет получать весь трафик между Server-1 и Server-2:
Зеркалирование на два и более потребителя
В итоге имеем очередную задачу — надо реализовать новую схему зеркалирования, которая выглядит так:
Вроде бы ничего сложного — создадим интерфейс в сторону Analyzer-2, добавим его в инстанс и дело в шляпе.
[edit]
bormoglotx@RZN-PE-1# show interfaces ge-0/0/2
description Analyzer-2;
unit 0 {
family inet {
address 169.254.0.2/31 {
arp 169.254.0.3 mac 02:00:00:00:00:01;
}
}
}
[edit]
bormoglotx@RZN-PE-1# show forwarding-options port-mirroring instance SPAN-1
input {
rate 1;
run-length 0;
}
family inet {
output {
interface ge-0/0/1.0 {
next-hop 169.254.0.1;
}
interface ge-0/0/2.0 {
next-hop 169.254.0.3;
}
}
}
Но при попытке добавить еще один порт в иерархию output в мирроринг инстанс мы получаем ошибку при коммите:
[edit]
bormoglotx@RZN-PE-1# commit check
[edit forwarding-options port-mirroring instance SPAN-1 family inet output]
Port-mirroring configuration error
Port-mirroring out of multiple nexthops is not allowed on this platform
error: configuration check-out failed
Страшная на первый взгляд фраза — ограничения платформы не дают нам установить сразу два next-hop-а для отзеркалированного трафика. Но это ограничение очень просто обходится, если мы воспользуемся next-hop группами.
Думаю что и так понятно, что такое next-hop группа — название говорит само за себя. Juniper MX поддерживает до 30-ти next-hop групп, в каждой из которой может быть до 16 next-hop-в. Но помимо этого, в каждый next-hop группе можно создать next-hop подгруппы. В одной next-hop группе должно быть как минимум два next-hop-а, иначе JunOS не даст сделать коммит.
Теперь перейдем к конфигурации, создадим next-hop группу:
[edit]
bormoglotx@RZN-PE-1# show forwarding-options next-hop-group Analyzer-servers
group-type inet;
interface ge-0/0/1.0 {
next-hop 169.254.0.1;
}
interface ge-0/0/2.0 {
next-hop 169.254.0.3;
}
И теперь укажем данную группу, как next-hop в ouput:
[edit]
bormoglotx@RZN-PE-1# show forwarding-options port-mirroring instance SPAN-1
input {
rate 1;
run-length 0;
}
family inet {
output {
next-hop-group Analyzer-servers;
}
}
Весь остальной конфиг не меняется.
Перейдем к проверке. Сначала проверим, в каком состоянии next-hop группа:
bormoglotx@RZN-PE-1> show forwarding-options next-hop-group detail
Next-hop-group: Analyzer-servers
Type: inet
State: up
Number of members configured : 2
Number of members that are up : 2
Number of subgroups configured : 0
Number of subgroups that are up : 0
Members Interfaces: State
ge-0/0/1.0 next-hop 169.254.0.1 up
ge-0/0/2.0 next-hop 169.254.0.3 up
С группой все в порядке — она в работе (группа будет в up, если в ней есть хотя бы один интерфейс в up). Теперь проверим состояние сессии зеркалирования:
bormoglotx@RZN-PE-1> show forwarding-options port-mirroring SPAN-1
Instance Name: SPAN-1
Instance Id: 2
Input parameters:
Rate : 1
Run-length : 0
Maximum-packet-length : 0
Output parameters:
Family State Destination Next-hop
inet up Analyzer-servers
Тоже все в порядке, но как мы уже видели раннее — это не значит, что мы сделали все правильно и у нас все взлетит. Поэтому проверим будет ли зеркалироваться трафик на два наших сервера:
bormoglotx@Server-1:~$ sudo hping3 -S -c 5 12.0.0.1 -d 40 -I eth1
HPING 12.0.0.1 (eth1 12.0.0.1): S set, 40 headers + 40 data bytes
len=40 ip=12.0.0.1 ttl=63 DF id=64150 sport=0 flags=RA seq=0 win=0 rtt=3.4 ms
len=40 ip=12.0.0.1 ttl=63 DF id=64222 sport=0 flags=RA seq=1 win=0 rtt=3.5 ms
len=40 ip=12.0.0.1 ttl=63 DF id=64457 sport=0 flags=RA seq=2 win=0 rtt=3.7 ms
len=40 ip=12.0.0.1 ttl=63 DF id=64593 sport=0 flags=RA seq=3 win=0 rtt=3.5 ms
len=40 ip=12.0.0.1 ttl=63 DF id=64801 sport=0 flags=RA seq=4 win=0 rtt=3.4 ms
--- 12.0.0.1 hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 3.4/3.5/3.7 ms
Трафик на Analyzer-1:
bormoglotx@Analyzer-1:~$ sudo tcpdump -i eth1 -B 4096
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
15:09:36.837983 IP 11.0.0.1.2304 > 12.0.0.1.0: Flags [S], seq 1255230673:1255230713, win 512, length 40
15:09:36.839367 IP 12.0.0.1.0 > 11.0.0.1.2304: Flags [R.], seq 0, ack 1255230714, win 0, length 0
15:09:37.838115 IP 11.0.0.1.2305 > 12.0.0.1.0: Flags [S], seq 2135769685:2135769725, win 512, length 40
15:09:37.839054 IP 12.0.0.1.0 > 11.0.0.1.2305: Flags [R.], seq 0, ack 2135769726, win 0, length 0
15:09:38.838528 IP 11.0.0.1.2306 > 12.0.0.1.0: Flags [S], seq 1139555126:1139555166, win 512, length 40
15:09:38.839369 IP 12.0.0.1.0 > 11.0.0.1.2306: Flags [R.], seq 0, ack 1139555167, win 0, length 0
15:09:39.838328 IP 11.0.0.1.2307 > 12.0.0.1.0: Flags [S], seq 1181209811:1181209851, win 512, length 40
15:09:39.838924 IP 12.0.0.1.0 > 11.0.0.1.2307: Flags [R.], seq 0, ack 1181209852, win 0, length 0
15:09:40.838335 IP 11.0.0.1.2308 > 12.0.0.1.0: Flags [S], seq 1554756347:1554756387, win 512, length 40
15:09:40.838901 IP 12.0.0.1.0 > 11.0.0.1.2308: Flags [R.], seq 0, ack 1554756388, win 0, length 0
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
И аналогичная копия трафика на Analyzer-2:
bormoglotx@Analyzer-2:~$ sudo tcpdump -i eth1 -B 4096
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
15:09:35.125093 IP 11.0.0.1.2304 > 12.0.0.1.0: Flags [S], seq 1255230673:1255230713, win 512, length 40
15:09:35.126394 IP 12.0.0.1.0 > 11.0.0.1.2304: Flags [R.], seq 0, ack 1255230714, win 0, length 0
15:09:36.125044 IP 11.0.0.1.2305 > 12.0.0.1.0: Flags [S], seq 2135769685:2135769725, win 512, length 40
15:09:36.126107 IP 12.0.0.1.0 > 11.0.0.1.2305: Flags [R.], seq 0, ack 2135769726, win 0, length 0
15:09:37.125552 IP 11.0.0.1.2306 > 12.0.0.1.0: Flags [S], seq 1139555126:1139555166, win 512, length 40
15:09:37.126418 IP 12.0.0.1.0 > 11.0.0.1.2306: Flags [R.], seq 0, ack 1139555167, win 0, length 0
15:09:38.125374 IP 11.0.0.1.2307 > 12.0.0.1.0: Flags [S], seq 1181209811:1181209851, win 512, length 40
15:09:38.125930 IP 12.0.0.1.0 > 11.0.0.1.2307: Flags [R.], seq 0, ack 1181209852, win 0, length 0
15:09:39.125320 IP 11.0.0.1.2308 > 12.0.0.1.0: Flags [S], seq 1554756347:1554756387, win 512, length 40
15:09:39.125844 IP 12.0.0.1.0 > 11.0.0.1.2308: Flags [R.], seq 0, ack 1554756388, win 0, length 0
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Отлично — поставленная задача выполнена, трафик льется туда, куда надо — оба потребителя получают запрошенную копию трафика.
Но сеть развивается бешеными темпами, и наша компания под зекалирование и СОРМ денег не жалеет. Теперь у нас появился еще один сервер — Analyzer-3, который тоже хочет получать копию трафика. Но сложность в том, что данный сервер подключен не локально к нашему RZN-PE-1, а в RZN-PE-2:
Зеркалирование на удаленный хост
В свете всего сказанного нам снова надо переделать схему зеркалирования, теперь она будет выглядеть вот так:
Так как сервер Analyzer-3 находится за RZN-PE-2, то теми методами, которыми мы пользовались раннее решить эту задачу не выйдет. Наша основная проблема не в том, как отзеркалировать трафик, а в том, как этот уже отзеркалированный трафик дотащить до сервера Analyzer-3, который живет за RZN-PE-2, причем сделать это прозрачно для сети, иначе мы получим проблемы (какие, увидите позже). Для этого на оборудовании Juniper принято использовать gre туннель. Идея в том, что мы делаем тоннель до удаленного хоста и весь зеркалированный трафик упаковываем в этот туннель и отправляем или прямиком на сервер или на маршрутизатор, который терминирует сервер-получатель трафика. У вас есть два варианта использования gre туннеля.
Вариант 1. На маршрутизаторе, который производит зеркалирование настраивается gre тоннель, причем как destination указывается сам адрес сервера-получателя трафика. Естественно сеть, в которой находится этот сервер (в нашем случае это Analyzer-3) должна быть известна через какой либо протокол маршрутизации (BGP или IGP — не важно) иначе gre туннель просто не взлетит. Проблема в то, что в таком сценарии трафик на сервер льется вместе с gre заголовками. Для современных систем анализа и мониторинга трафика это не должно быть проблемой — gre не IPSec и трафик не шифруется. То есть на одной чаше весов простота реализации, на второй — лишний заголовок. Возможно в каком то сценарии наличие лишнего заголовка будет не приемлемо, тогда вам придется использовать вариант 2.
Вариант 2. Между маршрутизатором, который производит зеркалирование и маршрутизатором, который терминирует сервер-получатель трафика, поднимается gre тоннель (обычно это делается на лупбеках). На стороне маршрутизатора, который производит зеркалирование от источника все так же как и было в варианте 1, а вот на стороне получателя на маршрутизаторе необходимо настроить инстанс, который будет зеркалировать полученный из gre туннеля трафик в сторону анализатора. То есть на одно зеркало у нас получается необходимо использовать один инстанс зеркалирования на источнике и второй на получателе трафика, что сильно усложняет схему. Но с другой стороны в этом сценарии на сервер льется чистый трафик, без лишних gre заголовков. Помимо этого при реализации данной схемы есть правило, которое надо строго соблюдать — маршрутизатор, который терминирует конечную точку gre тоннеля не должен иметь маршрута к хосту, который будет указан как получатель в зеркалируемом трафике (то есть получателем исходного отзеркалированного пакета). Если это условие не выполняется, то вы получите дубли пакетов — трафик будет вылетать из gre туннеля и помимо того, что будет зеркалироваться на указанный вами порт, еще будет маршрутизировать, как обычный ip пакет. И если маршрутизатор знает маршрут до хоста назначения, то трафик будет отправлен ему. Чтобы этого избежать, gre интерфейс необходимо погрузить в отдельный инстанс с типом virtual-router, хотя есть и другие способы, описанные далее. Если кому то интересно, то конфигурация, суть проблемы и как ее победить под спойлером:
Mirroring via gre problem
Конфигурация gre туннеля на стороне сервера источника:
bormoglotx@RZN-PE-1# show interfaces gr-0/0/0
description RSPAN;
unit 0 {
tunnel {
source 62.0.0.1;
destination 62.0.0.2;
}
family inet {
address 169.254.100.1/31;
}
}
Изменился только адрес назначения тоннеля — стал лупбеком RZN-PE-2.
На RZN-PE-2 необходимо сначала создать gre туннель до RZN-PE-1:
bormoglotx@RZN-PE-2> show configuration interfaces gr-0/0/0
description SPAN;
unit 0 {
tunnel {
source 62.0.0.2;
destination 62.0.0.1;
}
family inet {
filter {
input MIRROR-RSPAN-GE0/0/1;
}
}
}
Чтобы теперь с данного интерфейса трафик отправить в мирроринг инстанс, нам надо навесить на него фильтр, который имеет следующий вид:
bormoglotx@RZN-PE-2> show configuration firewall family inet filter MIRROR-RSPAN-GE0/0/1
term MIRROR {
then port-mirror-instance RSAPN;
}
Ну и последний штрих — создание самого инстанса, привязка его к fpc и создание интерфейса, в который будет отправляться трафик:
bormoglotx@RZN-PE-2> show configuration forwarding-options port-mirroring instance RSAPN
input {
rate 1;
}
family inet {
output {
interface ge-0/0/1.0 {
next-hop 169.254.100.1;
}
}
}
bormoglotx@RZN-PE-2> show configuration chassis
fpc 0 {
pic 0 {
tunnel-services {
bandwidth 10g;
}
}
port-mirror-instance RSAPN;
}
bormoglotx@RZN-PE-2> show configuration interfaces ge-0/0/1
description Analyzer-3;
unit 0 {
family inet {
address 169.254.100.0/31 {
arp 169.254.100.1 mac 02:00:00:19:21:68;
}
}
}
Теперь запустим пинг между Server-1 и Server-2 и проверим, что мы отзеркалировали:
bormoglotx@Server-1:~$ ping 12.0.0.1 -I eth1
PING 12.0.0.1 (12.0.0.1) from 11.0.0.1 eth1: 56(84) bytes of data.
64 bytes from 12.0.0.1: icmp_seq=1 ttl=63 time=1.44 ms
64 bytes from 12.0.0.1: icmp_seq=1 ttl=60 time=3.24 ms (DUP!)
…
...
64 bytes from 12.0.0.1: icmp_seq=1 ttl=3 time=34.7 ms (DUP!)
^C
--- 12.0.0.1 ping statistics ---
1 packets transmitted, 1 received, +41 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.444/17.916/34.712/9.126 ms
Часть дубликатов я удалил из вывода, но количество их можно увидеть — один валидный пакет и 41 дубль. На анализаторе трафика вы естественно увидите такую же картину:
bormoglotx@Analyzer-3:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
11:52:13.275451 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1601, seq 1, length 64
11:52:13.275462 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1601, seq 1, length 64
11:52:13.276703 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1601, seq 1, length 64
…
…
Кроме зеркалирования, маршрутизатор производит еще и форвардинг пакета, полученного из gre туннеля, так как знает маршрут до адреса назначения. Чтобы это пофиксить, создаем инстанс с типом virtual router и добавим в него gre интерфейс и интерфейс, на который мы зеркалируем трафик:
[edit]
bormoglotx@RZN-PE-2# show routing-instances RSPAN-VR
description "for RSPAN use only";
instance-type virtual-router;
interface gr-0/0/0.0;
interface ge-0/0/1.0;
Снова запустим пинг и проверим работоспособность схемы. Теперь на сервере дубликатов не видно:
bormoglotx@Server-1:~$ ping 12.0.0.1 -I eth1
PING 12.0.0.1 (12.0.0.1) from 11.0.0.1 eth1: 56(84) bytes of data.
64 bytes from 12.0.0.1: icmp_seq=1 ttl=63 time=2.56 ms
64 bytes from 12.0.0.1: icmp_seq=2 ttl=63 time=8.13 ms
64 bytes from 12.0.0.1: icmp_seq=3 ttl=63 time=1.33 ms
64 bytes from 12.0.0.1: icmp_seq=4 ttl=63 time=2.09 ms
64 bytes from 12.0.0.1: icmp_seq=5 ttl=63 time=2.30 ms
^C
--- 12.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 1.332/3.288/8.137/2.459 ms
Ну и отсутствие дубликатов доказывает дамп на анализаторе Analyzer-3:
bormoglotx@Analyzer-3:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
11:59:12.605205 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1602, seq 1, length 64
11:59:12.605350 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1602, seq 1, length 64
11:59:13.611070 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1602, seq 2, length 64
11:59:13.612356 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1602, seq 2, length 64
11:59:14.606350 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1602, seq 3, length 64
11:59:14.606739 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1602, seq 3, length 64
11:59:15.612423 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1602, seq 4, length 64
11:59:15.612488 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1602, seq 4, length 64
11:59:16.614228 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1602, seq 5, length 64
11:59:16.614588 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1602, seq 5, length 64
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Кроме создания отдельного инстанса на RZN-PE-2, можно воспользоваться и другими способами. О них нигде не написано и узнал я про них просто проводя тестирование.
Можно указать в фильтре, что весь трафик из тоннеля надо отправить в discard (именно discard, так как если будет reject, то Juniper будет отправлять назад icmp сообщение о том, что пакет зафильтрован)
bormoglotx@RZN-PE-2# show firewall family inet filter MIRROR-RSPAN-GE0/0/1
term MIRROR {
then {
port-mirror-instance RSAPN;
discard;
}
}
Если верить тестам, то с таким фильтром все работает:
bormoglotx@Server-1:~$ ping 12.0.0.1 -I eth1
PING 12.0.0.1 (12.0.0.1) from 11.0.0.1 eth1: 56(84) bytes of data.
64 bytes from 12.0.0.1: icmp_seq=1 ttl=63 time=2.68 ms
64 bytes from 12.0.0.1: icmp_seq=2 ttl=63 time=1.22 ms
64 bytes from 12.0.0.1: icmp_seq=3 ttl=63 time=1.96 ms
64 bytes from 12.0.0.1: icmp_seq=4 ttl=63 time=2.30 ms
64 bytes from 12.0.0.1: icmp_seq=5 ttl=63 time=1.96 ms
^C
--- 12.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 1.220/2.028/2.685/0.487 ms
На анализаторе трафик есть:
bormoglotx@Analyzer-3:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
12:03:11.934805 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1604, seq 1, length 64
12:03:11.934834 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1604, seq 1, length 64
12:03:12.982685 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1604, seq 2, length 64
12:03:12.982716 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1604, seq 2, length 64
12:03:13.935027 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1604, seq 3, length 64
12:03:13.935607 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1604, seq 3, length 64
12:03:14.936859 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1604, seq 4, length 64
12:03:14.937654 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1604, seq 4, length 64
12:03:15.937650 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1604, seq 5, length 64
12:03:15.938375 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1604, seq 5, length 64
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Еще один вариант позволяет нам вообще не конфигурировать мирроринг инстанс для зеркалирования на RZN-PE-2. Нам надо сделать next-hop группу (если у вас будет один интерфейс, как у меня, то надо добавить какой то фейковый, чтобы JunOS дал сделать коммит), а на gre интерфейс повесить фильтр, который будет изменять next-hop для входящего трафика на нужный нам:
bormoglotx@RZN-PE-2> show configuration interfaces gr-0/0/0
description SPAN;
unit 0 {
tunnel {
source 62.0.0.2;
destination 62.0.0.1;
}
family inet {
filter {
input MIRROR-RSPAN-GE0/0/1;
}
}
}
bormoglotx@RZN-PE-2> show configuration firewall family inet filter MIRROR-RSPAN-GE0/0/1
term MIRROR {
then next-hop-group Analyzer-3;
}
Next-hop группа поднялась:
bormoglotx@RZN-PE-2> show forwarding-options next-hop-group Analyzer-3 detail
Next-hop-group: Analyzer-3
Type: inet
State: up
Number of members configured : 2
Number of members that are up : 1
Number of subgroups configured : 0
Number of subgroups that are up : 0
Members Interfaces: State
ge-0/0/1.0 next-hop 169.254.100.1 up
ge-0/0/100.0 down
И теперь проверим нет ли у нас дубликатов и работает ли зеркалирование:
bormoglotx@Server-1:~$ ping 12.0.0.1 -I eth1 -c 5
PING 12.0.0.1 (12.0.0.1) from 11.0.0.1 eth1: 56(84) bytes of data.
64 bytes from 12.0.0.1: icmp_seq=1 ttl=63 time=3.38 ms
64 bytes from 12.0.0.1: icmp_seq=2 ttl=63 time=2.17 ms
64 bytes from 12.0.0.1: icmp_seq=3 ttl=63 time=2.14 ms
64 bytes from 12.0.0.1: icmp_seq=4 ttl=63 time=2.06 ms
64 bytes from 12.0.0.1: icmp_seq=5 ttl=63 time=1.89 ms
--- 12.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 1.891/2.332/3.387/0.538 ms
Дублей нет, осталось проверить, попало ли что нибудь на анализатор:
bormoglotx@Analyzer-3:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
12:19:28.306816 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1609, seq 1, length 64
12:19:28.306840 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1609, seq 1, length 64
12:19:29.306887 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1609, seq 2, length 64
12:19:29.307273 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1609, seq 2, length 64
12:19:30.308323 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1609, seq 3, length 64
12:19:30.308455 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1609, seq 3, length 64
12:19:31.309897 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1609, seq 4, length 64
12:19:31.310117 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1609, seq 4, length 64
12:19:32.313234 IP 11.0.0.1 > 12.0.0.1: ICMP echo request, id 1609, seq 5, length 64
12:19:32.313271 IP 12.0.0.1 > 11.0.0.1: ICMP echo reply, id 1609, seq 5, length 64
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Судя по тестам — все отрабатывает как надо. Какой из вариантов внедрять в продакшене — решать вам.
Мы же воспользуемся первым вариантом. Для начала нам надо включить туннельные сервисы, чтобы у нас появился gre интерфейс (gr-X/X/X):
bormoglotx@RZN-PE-1# show chassis fpc 0
pic 0 {
tunnel-services {
bandwidth 10g;
}
}
port-mirror-instance SPAN-1;
Тут стоит немного вернуться к теории и поговорить о туннельных интерфейсах и резервировании ресурсов. В данной конфигурации я выделяю 10G под тоннельные сервисы на нулевом PIC нулевого FPC. Это не значит, что 10G от пропускной способности pfe обрезаются — это говорит о том, что тоннельные сервисы могут использовать не более 10G пропускной способности pfe, и не занятая ими часть ресурсов может использоваться под форвардинг трафика физических портов — то есть 10G на pfe шарится между туннельными сервисами и реальными интерфейсами. Но это на картах MPC. Если вы «счастливый» обладатель карты DPC (например у вас карта 4-ре десятки), то при указанном выше конфиге вы потеряете один порт (то есть из системы просто пропадет xe-порт и будет недоступен из cli, а возле порта загорится лампочка, говорящая нам что порт в туннельном режиме). К сожалению, на данных картах, как вы понимаете, ресурсы резервируются жестко, но эти карты уже давно устарели и постепенно выходят из моды, хотя их пока что навалом.
Во-вторых хотелось бы сказать о нумерации портов — если вы резервируете 1G, то номер порта будет gr-0/0/10, если вы резервируете 10G и более, то номер порта будет gr-0/0/0 (ниже показан именно такой вариант).
[edit]
bormoglotx@RZN-PE-1# run show interfaces terse | match "^(gr|lt|vt)-"
gr-0/0/0 up up
lt-0/0/0 up up
vt-0/0/0 up up
На линейных картах с TRIO-чипсетом максимально возможно резервируемая полоса под туннельные сервисы — 60G.
Примечание: хотелось бы добавить, что lt и vt это разные интерфейсы. lt — logical tunnel — логический тоннель, который предназначен, как правило, для связывания логических систем или роутинг инстансов между собой — он позволяет прогнать трафик между ними, как будто эти инстансы или логические системы соединены прямым патчкордом. А вот vt — это virtual tunnel — виртуальный лупбек, который предназначен не для связывания каких то виртуальных сущностный, а для заворота трафика на pfe для повторного лукапа (например в vpls).
После того, как мы создали туннельные интерфейсы, то у нас появилась возможность сконфигурировать gr-0/0/0. Так как мы выдрали вариант, в котором удаленный PE маршрутизатор не терминирует gre тоннель а просто отправляет трафик в сторону сервера, то как sourse адрес тоннеля на RZN-PE-1 мы указываем собственный лупбек, а вот как destination адрес сервера-получателя отзерклированного трафика, причем данный адрес должен быть доступен.
Собственно говоря, на сервере может быть а может и не быть адреса. Вы можете его выбрать сами и сделать статическую ARP запись, как это показано ниже:
[edit]
bormoglotx@RZN-PE-2# show | compare
[edit interfaces]
+ ge-0/0/1 {
+ description Analyzer-3;
+ unit 0 {
+ family inet {
+ address 192.168.0.0/31 {
+ arp 192.168.0.1 mac 02:00:00:19:21:68;
+ }
+ }
+ }
+ }
[edit protocols ospf area 0.0.0.0]
interface ge-0/0/0.0 { ... }
+ interface ge-0/0/1.0 {
+ passive;
+ }
Причем, как видно из представленной конфигурации, интерфейс добавлен как пассивный в ospf, чтобы RZN-PE-1 знал маршрут до этой сети:
[edit]
bormoglotx@RZN-PE-1# run show route 192.168.0.1
inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
192.168.0.0/31 *[OSPF/10] 00:00:16, metric 3
> to 10.0.0.0 via ge-0/0/0.0
Теперь создадим gre тоннель на RZN-PE-1 и добавим его в next-hop группу:
[edit]
bormoglotx@RZN-PE-1# show interfaces gr-0/0/0
description RSPAN;
unit 0 {
tunnel {
source 62.0.0.1;
destination 192.168.0.1;
}
family inet {
address 169.254.100.1/31;
}
}
[edit]
bormoglotx@RZN-PE-1# show forwarding-options next-hop-group Analyzer-servers
group-type inet;
interface gr-0/0/0.0;
interface ge-0/0/1.0 {
next-hop 169.254.0.1;
}
interface ge-0/0/2.0 {
next-hop 169.254.0.3;
}
В отличии от ge интерфейсов, gre интерфейс является p2p и поэтому указывать next-hop адрес для него нет смысла — трафик все равно вылетит с другого конца, хотя указать вы его можете.
Ну и далее все как обычно — проверим состояние сессии зеркалирования:
[edit]
bormoglotx@RZN-PE-1# run show forwarding-options next-hop-group detail
Next-hop-group: Analyzer-servers
Type: inet
State: up
Number of members configured : 3
Number of members that are up : 3
Number of subgroups configured : 0
Number of subgroups that are up : 0
Members Interfaces: State
gr-0/0/0.0 up
ge-0/0/1.0 next-hop 169.254.0.1 up
ge-0/0/2.0 next-hop 169.254.0.3 up
Ну и теперь проверим, что трафик на удаленном сервере получается:
bormoglotx@Server-1:~$ sudo hping3 -S -c 5 12.0.0.1 -d 40 -I eth1
HPING 12.0.0.1 (eth1 12.0.0.1): S set, 40 headers + 40 data bytes
len=40 ip=12.0.0.1 ttl=63 DF id=53439 sport=0 flags=RA seq=0 win=0 rtt=8.2 ms
len=40 ip=12.0.0.1 ttl=63 DF id=53515 sport=0 flags=RA seq=1 win=0 rtt=3.5 ms
len=40 ip=12.0.0.1 ttl=63 DF id=53610 sport=0 flags=RA seq=2 win=0 rtt=3.4 ms
len=40 ip=12.0.0.1 ttl=63 DF id=53734 sport=0 flags=RA seq=3 win=0 rtt=3.8 ms
len=40 ip=12.0.0.1 ttl=63 DF id=53897 sport=0 flags=RA seq=4 win=0 rtt=3.3 ms
--- 12.0.0.1 hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 3.3/4.4/8.2 ms
bormoglotx@Analyzer-3:~$ sudo tcpdump -i eth1 -B 4096
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
16:34:34.923370 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 11.0.0.1.2894 > 12.0.0.1.0: Flags [S], seq 1149405522:1149405562, win 512, length 40
16:34:34.926586 IP 62.0.0.1 > 192.168.0.1: GREv0, length 44: IP 12.0.0.1.0 > 11.0.0.1.2894: Flags [R.], seq 0, ack 1149405563, win 0, length 0
16:34:35.923022 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 11.0.0.1.2895 > 12.0.0.1.0: Flags [S], seq 1598018315:1598018355, win 512, length 40
16:34:35.923855 IP 62.0.0.1 > 192.168.0.1: GREv0, length 44: IP 12.0.0.1.0 > 11.0.0.1.2895: Flags [R.], seq 0, ack 1598018356, win 0, length 0
16:34:36.922903 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 11.0.0.1.2896 > 12.0.0.1.0: Flags [S], seq 592229199:592229239, win 512, length 40
16:34:36.924048 IP 62.0.0.1 > 192.168.0.1: GREv0, length 44: IP 12.0.0.1.0 > 11.0.0.1.2896: Flags [R.], seq 0, ack 592229240, win 0, length 0
16:34:37.923278 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 11.0.0.1.2897 > 12.0.0.1.0: Flags [S], seq 694611591:694611631, win 512, length 40
16:34:37.924765 IP 62.0.0.1 > 192.168.0.1: GREv0, length 44: IP 12.0.0.1.0 > 11.0.0.1.2897: Flags [R.], seq 0, ack 694611632, win 0, length 0
16:34:38.924275 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 11.0.0.1.2898 > 12.0.0.1.0: Flags [S], seq 1423363395:1423363435, win 512, length 40
16:34:38.924291 IP 62.0.0.1 > 192.168.0.1: GREv0, length 44: IP 12.0.0.1.0 > 11.0.0.1.2898: Flags [R.], seq 0, ack 1423363436, win 0, length 0
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Но, как я и сказал — трафик gre заголовком, и если для вашего сервера это не проблема, то данный подход самый простой и гибкий.
Но как оказалось, теперь владельцам серверов-получателей отзеркалированного трафика не хочется получать весь трафик, так как его стало слишком много. Серверу Analyzer-1 нужен только TCP трафик, серверу Analyzer-2 только UDP трафик, а вот серверу Analyzer-3 нужен весь трафик, не ограничиваясь TCP/UDP. То есть теперь нам надо реализовать такую схему:
Избирательное зеркалирование на два и более потребителя
Вот тут нам понадобится туннельный интерфейс vt-0/0/0 (виртуальный лупбек) ну или можете использовать lt-0/0/0 (виртуальный тоннель), но первое более предпочтительно. Итак, замысел избирательного зеркалирования заключается в следующем — трафик с порта зеркалируется сначала в виртуальный лупбек vt-порт, а далее с данного порта раскидывается с помощью фильтра на разные next-hop группы на основании выбранных вами параметров — протоколов, портов и т д. Для лучшего понимания происходящего давайте теперь соберем данную схему. Сначала изменим мирроринг инстанс, чтобы трафик зеркалировался в виртуальный лупбек:
[edit]
bormoglotx@RZN-PE-1# show forwarding-options port-mirroring instance SPAN-1
input {
rate 1;
run-length 0;
}
family inet {
output {
interface vt-0/0/0.0;
no-filter-check;
}
}
Очень важным является параметр no-filter-check — эта команда позволяет нам навесить фильтр на интерфейс, в который зеркалируется трафик. По умолчанию фильтрация на этих интерфейсах запрещена. Теперь создадим сам vt-интерфейс:
[edit]
bormoglotx@RZN-PE-1# show interfaces vt-0/0/0
unit 0 {
description SPAN-USE;
family inet;
}
На данный интерфейс никаких адресов вы навесить не можете, а семейство адресов, которые можно на нем разрешить ограничено.
Сейчас мы получили следующую картину — весь трафик с интерфейса ge-0/0/3 направлен в порт vt-0/0/0.0. Теперь нам надо отзеркалировать этот трафик в сторону разных потребителей. Для этого сначала надо создать next-hop группы, в которые включить необходимых потребителей:
[edit]
bormoglotx@RZN-PE-1# show forwarding-options next-hop-group Analyzer-TCP
group-type inet;
interface gr-0/0/0.0;
interface ge-0/0/1.0 {
next-hop 169.254.0.1;
}
[edit]
bormoglotx@RZN-PE-1# show forwarding-options next-hop-group Analyzer-UDP
group-type inet;
interface gr-0/0/0.0;
interface ge-0/0/2.0 {
next-hop 169.254.0.3;
}
[edit]
bormoglotx@RZN-PE-1# show forwarding-options next-hop-group Analyzer-default
group-type inet;
interface gr-0/0/0.0;
interface ge-0/0/100.0;
Интерфейс gr-0/0/0, который предназначен для зеркалирования трафика на Analyzer-3 добавлен во все три группы. Это сделано изза того, что данный сервер хочет получать и TCP и UDP трафик, и сделать для него отдельную группу и применить ее потом в фильтре не получится. Использовать один и тот же next-hop в разных группах не запрещено. В группе Analyzer-default есть еще порт ge-0/0/100.0 — это фейковый порт, добавленный в группу для того, чтобы суметь закоммитить конфигурацию — так как в группе должно быть как минимум два интерфейса.
Теперь нам надо создать фильтр, который будет матчить трафик по нужным нам критериям и раскидывать по next-hop группам:
[edit]
bormoglotx@RZN-PE-1# show firewall family inet filter MIRROR-SORTED
term MIRROR-TCP {
from {
protocol tcp;
}
then next-hop-group Analyzer-TCP;
}
term MIRROR-UDP {
from {
protocol udp;
}
then next-hop-group Analyzer-UDP;
}
term MIRROR-DEFAUL {
then next-hop-group Analyzer-default;
}
И прикрутим ее на vt интерфейс:
[edit]
bormoglotx@RZN-PE-1# show interfaces vt-0/0/0
unit 0 {
description SPAN-USE;
family inet {
filter {
input MIRROR-SORTED;
}
}
}
Проверяем нашу конструкцию. Зеркалирование в vt интерфейс в состоянии up:
bormoglotx@RZN-PE-1> show forwarding-options port-mirroring SPAN-1
Instance Name: SPAN-1
Instance Id: 2
Input parameters:
Rate : 1
Run-length : 0
Maximum-packet-length : 0
Output parameters:
Family State Destination Next-hop
inet up vt-0/0/0.0
Все группы в работе (помним, что как минимум один порт должен быть в up, чтобы группа перешла в состояние up):
bormoglotx@RZN-PE-1> show forwarding-options next-hop-group detail
Next-hop-group: Analyzer-TCP
Type: inet
State: up
Number of members configured : 2
Number of members that are up : 2
Number of subgroups configured : 0
Number of subgroups that are up : 0
Members Interfaces: State
gr-0/0/0.0 up
ge-0/0/1.0 next-hop 169.254.0.1 up
Next-hop-group: Analyzer-UDP
Type: inet
State: up
Number of members configured : 2
Number of members that are up : 2
Number of subgroups configured : 0
Number of subgroups that are up : 0
Members Interfaces: State
gr-0/0/0.0 up
ge-0/0/2.0 next-hop 169.254.0.3 up
Next-hop-group: Analyzer-default
Type: inet
State: up
Number of members configured : 2
Number of members that are up : 1
Number of subgroups configured : 0
Number of subgroups that are up : 0
Members Interfaces: State
gr-0/0/0.0 up
ge-0/0/100.0 down
Ну а теперь сгенериуем по 5 icmp, tcp и udp пакетов и посмотрим, что на какой сервер попадет. На всех серверах-клиентах одновременно включим tcpdump. Я использовал hping3 с ключем —rand-source, поэтому обратного трафика мы не увидим, так как снимается трафик только на порту в сторону Server-1.
Итак, смотрим что мы отловили на Analyzer-1, там должен быть только TCP:
bormoglotx@Analyzer-1:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
19:58:25.457641 IP 108.215.126.169.1668 > 12.0.0.1.0: Flags [S], seq 1842749676:1842749716, win 512, length 40
19:58:26.458098 IP 230.181.170.188.1669 > 12.0.0.1.0: Flags [S], seq 1810452177:1810452217, win 512, length 40
19:58:27.459245 IP 112.6.155.46.1670 > 12.0.0.1.0: Flags [S], seq 1524555644:1524555684, win 512, length 40
19:58:28.459006 IP 50.45.169.23.1671 > 12.0.0.1.0: Flags [S], seq 1362080290:1362080330, win 512, length 40
19:58:29.459294 IP 135.146.14.177.1672 > 12.0.0.1.0: Flags [S], seq 2122009219:2122009259, win 512, length 40
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Теперь проверим, что же попало на Analyzer-2 (тут должен быть исключительно UDP трафик):
bormoglotx@Analyzer-2:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
19:58:09.340702 IP 132.43.66.243.1121 > 12.0.0.1.0: UDP, length 40
19:58:10.341308 IP 205.172.124.143.1122 > 12.0.0.1.0: UDP, length 40
19:58:11.341239 IP 253.127.33.120.1123 > 12.0.0.1.0: UDP, length 40
19:58:12.341204 IP 246.68.75.25.1124 > 12.0.0.1.0: UDP, length 40
19:58:13.341819 IP 95.89.126.64.1125 > 12.0.0.1.0: UDP, length 40
^C
5 packets captured
5 packets received by filter
0 packets dropped by kernel
Ну и остался у на Analyzer-3, там мы ловим все подряд, суммарное количество пакетов должно быть 15 (5 UDP/ 5 TCP/ 5 ICMP):
bormoglotx@Analyzer-3:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
19:58:11.782669 IP 62.0.0.1 > 192.168.0.1: GREv0, length 72: IP 132.43.66.243.1121 > 12.0.0.1.0: UDP, length 40
19:58:12.783508 IP 62.0.0.1 > 192.168.0.1: GREv0, length 72: IP 205.172.124.143.1122 > 12.0.0.1.0: UDP, length 40
19:58:13.783166 IP 62.0.0.1 > 192.168.0.1: GREv0, length 72: IP 253.127.33.120.1123 > 12.0.0.1.0: UDP, length 40
19:58:14.782758 IP 62.0.0.1 > 192.168.0.1: GREv0, length 72: IP 246.68.75.25.1124 > 12.0.0.1.0: UDP, length 40
19:58:15.783594 IP 62.0.0.1 > 192.168.0.1: GREv0, length 72: IP 95.89.126.64.1125 > 12.0.0.1.0: UDP, length 40
19:58:18.310249 IP 62.0.0.1 > 192.168.0.1: GREv0, length 100: IP 65.173.140.215 > 12.0.0.1: ICMP net 5.6.7.8 unreachable, length 76
19:58:19.311045 IP 62.0.0.1 > 192.168.0.1: GREv0, length 100: IP 171.91.95.222 > 12.0.0.1: ICMP net 5.6.7.8 unreachable, length 76
19:58:20.312496 IP 62.0.0.1 > 192.168.0.1: GREv0, length 100: IP 228.215.127.12 > 12.0.0.1: ICMP net 5.6.7.8 unreachable, length 76
19:58:21.311067 IP 62.0.0.1 > 192.168.0.1: GREv0, length 100: IP 214.149.191.71 > 12.0.0.1: ICMP net 5.6.7.8 unreachable, length 76
19:58:22.311398 IP 62.0.0.1 > 192.168.0.1: GREv0, length 100: IP 119.130.166.53 > 12.0.0.1: ICMP net 5.6.7.8 unreachable, length 76
19:58:26.186528 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 108.215.126.169.1668 > 12.0.0.1.0: Flags [S], seq 1842749676:1842749716, win 512, length 40
19:58:27.187385 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 230.181.170.188.1669 > 12.0.0.1.0: Flags [S], seq 1810452177:1810452217, win 512, length 40
19:58:28.188726 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 112.6.155.46.1670 > 12.0.0.1.0: Flags [S], seq 1524555644:1524555684, win 512, length 40
19:58:29.188846 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 50.45.169.23.1671 > 12.0.0.1.0: Flags [S], seq 1362080290:1362080330, win 512, length 40
19:58:30.188499 IP 62.0.0.1 > 192.168.0.1: GREv0, length 84: IP 135.146.14.177.1672 > 12.0.0.1.0: Flags [S], seq 2122009219:2122009259, win 512, length 40
^C
15 packets captured
15 packets received by filter
0 packets dropped by kernel
Отлично, все что надо было реализовать — сделано — трафик зеркалируется и раскидывается по потребителям, как и было задумано.
Выше мы зеркалировали L3 трафик, но маршрутизаторы Juniper серии MX очень гибкие устройства и они позволяют зеркалировать не только IP трафик (семейство inet/inet6), но и например L2 трафик — например vpls или l2ckt (xconnect в терминах Cisco).
Локальное зеркалирование L2 трафика
Рассмотрим простейший случай, когда вам надо подсмотреть, что передается в L2CKT-е (это конечно нехорошо делать, так как клиент, чей трафик вы завернете на анализатор, даже не узнает об этом, и делать такие вещи надо исключительно с согласия клиента). Схема проста — между RZN-PE-1 и RZN-PE-2 натянут какой то L2CKT:
То есть нам надо реализовать такую схему зеркалирования:
Между RZN-PE-1 и RZN-PE-2 натянут L2CKT, который мы и хотим прослушать:
bormoglotx@RZN-PE-1> show configuration protocols l2circuit
neighbor 62.0.0.2 {
interface ge-0/0/6.100 {
virtual-circuit-id 100;
}
}
bormoglotx@RZN-PE-1> show configuration interfaces ge-0/0/6.100
encapsulation vlan-ccc;
vlan-id 100;
family ccc {
filter {
input MIRROR-L2CKT-SPAN-1;
output MIRROR-L2CKT-SPAN-1;
}
}
Логично, что на интерфейсе включено семейство ccc — это ж L2CKT как никак. В конфигурации на нужном нам интерфейсе уже навешен фильтр в обе стороны — так как мы хотим получать весь трафик, который будет проходит по нашему L2CKT. Фильтр по сути такой же, как и был ранее, только семейство адресов не inet, а ccc:
bormoglotx@RZN-PE-1> show configuration firewall family ccc filter MIRROR-L2CKT-SPAN-1
term MIRROR {
then port-mirror-instance SPAN-1;
}
Далее настраиваем мирроринг инстанс, который хотим использовать для зеркалирования. В секции input никаких изменений нет — все как и раньше, а вот в секции output есть существенные отличия:
bormoglotx@RZN-PE-1> show configuration forwarding-options port-mirroring instance SPAN-1
input {
rate 1;
run-length 0;
}
family ccc {
output {
interface ge-0/0/1.0;
}
}
У нас изменилось семейство адресов — теперь это ccc. Это тянет за собой неизбежные изменения в и конфигурации интерфейса, в который мы хотим отправлять трафик. Если мы попробуем задать какой то адрес next-hop-а, как это делалось ранее на не p2p интерфейсе, то у нас ничего не получится:
bormoglotx@RZN-PE-1# set forwarding-options port-mirroring instance SPAN-1 family ccc output interface ge-0/0/1 ?
Possible completions:
<[Enter]> Execute this command
+ apply-groups Groups from which to inherit configuration data
+ apply-groups-except Don't inherit configuration data from these groups
no-filter-check Do not check for filters on port-mirroring interface
| Pipe through a command
У нас просто нет такой возможности. Поэтому на интерфейсе, в который нам надо отправить трафик надо включить семейство bridge или ccc:
[edit]
bormoglotx@RZN-PE-1# show interfaces ge-0/0/1
description Analyzer-1;
encapsulation ethernet-ccc;
unit 0 {
family ccc;
}
Семейство ccc естественно использовать проще, но если вам приспичило использовать bridge, то не забудьте про важный нюанс — интерфейс с инкапсуляцией bridge должен быть помещен в бридж-домен (номер влана в домене можно использовать нулевой (none), так вы не отберете реальные номера вланов под зеркалирование у остальных сервисов).
Все готово, проверим состояние сессии зеркалирвания:
bormoglotx@RZN-PE-1> show forwarding-options port-mirroring
Instance Name: SPAN-1
Instance Id: 2
Input parameters:
Rate : 1
Run-length : 0
Maximum-packet-length : 0
Output parameters:
Family State Destination Next-hop
ccc up ge-0/0/1.0
Все отлично — сессия в up. Теперь запустим пинг между нашими хостами и проверим, что получится собрать на анализаторе:
bormoglotx@TEST-1> ping routing-instance VR-1 10.0.0.2 count 5
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=10.159 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=11.136 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=9.723 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=7.754 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=10.619 ms
--- 10.0.0.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 7.754/9.878/11.136/1.162 ms
Вот что получилось собрать:
bormoglotx@Analyzer-1:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:44:31.948237 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 17420, seq 0, length 64
23:44:31.954408 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 17420, seq 0, length 64
23:44:32.955149 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 17420, seq 1, length 64
23:44:32.964115 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 17420, seq 1, length 64
23:44:33.967789 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 17420, seq 2, length 64
23:44:33.973388 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 17420, seq 2, length 64
23:44:34.975442 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 17420, seq 3, length 64
23:44:34.980370 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 17420, seq 3, length 64
23:44:35.986900 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 17420, seq 4, length 64
23:44:35.992213 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 17420, seq 4, length 64
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
Собственно все пакеты попали на анализатор, чего мы и добивались.
Теперь рассмотрим более сложную схему — нам надо настроить зеркалирование для интерфейсов, находящихся в бридж-домене или в виртуальном свиче, прием отправить копию не в какой то локальный порт, как мы сделали выше, а закинуть этот трафик на удаленную коробку.
Зеркалирование L2 трафика на удаленный сервер
Первая мысль — все просто, можно ж использовать gre туннель. Но, к сожалению, gre не поддерживает инкапсуляцию ccc/tcc/vpls/bridge. Но в Junos очень много различных инструментов, которые позволяют решить одну и ту же задачу разными методами, причем иногда кажется, что сделать что то вроде не реально, но в итоге через N-ое количество времени и N-го количества скуренных мануалов все взлетает. Тут так же. Сейчас мы будем собирать вот такую сложную схему:
Объясню, что и зачем. Итак, мы зеркалируем трафик из виртуального свича (L2CKT-а или бридж-домена) в мирроринг инстанс, причем трафик зеркалиуется не в какой то физический интерфейс, а в виртуальный туннельный интерфейс lt-0/0/0. Этот интерфейс одни на коробку и его юниты создается парами, которые называются peer-unit-ми — один юнит это входной конец туннеля, второй юнит — выходной. В итоге, все что попадает в один юнит — вылетит из связанного с ним второго юнита и наоборот. На этом интерфейсе мы включим инкапсуляцию ccc и с него построим L2CKT до удаленного маршрутизатора, который терминирует сервер-получатель трафика — то есть мы просто отдадим L2 трафик через L2CKT прямиком на удаленный сервер. Для удаленного маршуртизатора это будет простой L2CKT.
Теперь перейдем к конфигурированию. Интерфейсы в сторону серверов в access, и расположены в виртуальном свиче:
bormoglotx@RZN-PE-1# wildcard range show interfaces ge-0/0/[3-4]
description Server-1;
encapsulation ethernet-bridge;
unit 0 {
family bridge {
filter {
input MIRROR-BRIDGE-vSwitch-1;
}
interface-mode access;
vlan-id 100;
}
}
description Server-2;
encapsulation ethernet-bridge;
unit 0 {
family bridge {
filter {
input MIRROR-BRIDGE-vSwitch-1;
}
interface-mode access;
vlan-id 100;
}
}
[edit]
bormoglotx@RZN-PE-1# show routing-instances vSwitch-1
instance-type virtual-switch;
interface ge-0/0/3.0;
interface ge-0/0/4.0;
bridge-domains {
BD100 {
vlan-id 100;
}
}
На интерфейсах навешены фильтры для зеркалирования входящего трафика в инстанс SPAN-1. Фильтр ничем не отличается от ранее использованных, кроме семейства — в этом сценарии используется bridge:
[edit]
bormoglotx@RZN-PE-1# show firewall family bridge filter MIRROR-BRIDGE-vSwitch-1
term MIRROR {
then port-mirror-instance SPAN-1;
}
Теперь создадим инстанс SPAN-1:
[edit]
bormoglotx@RZN-PE-1# show forwarding-options port-mirroring instance SPAN-1
input {
rate 1;
run-length 0;
}
family vpls {
output {
interface lt-0/0/0.0;
}
}
Тут есть маленький нюанс. Семейство адресов указывается не bridge — такого семейства вы в конфигурации инстанса даже не найдете, а vpls. Данное семейство (VPLS) используется для зеркалирования трафика из vpls/бридж-доменов.
Далее создаем туннельный интерфейс, в который хотим отправлять трафик:
[edit]
bormoglotx@RZN-PE-1# show interfaces lt-0/0/0
unit 0 {
description RSPAN-IN;
encapsulation ethernet-ccc;
peer-unit 1;
family ccc;
}
unit 1 {
description RSPAN-OUT;
encapsulation ethernet-ccc;
peer-unit 0;
family ccc;
}
Как я написал ранее, lt интерфейс состоит из двух юнитов — в нашем случае юниты 0 и 1. Все что влетит в юнит 0 вылетит через юнит 1. Вообще с одной стороны юнит может быть как L3, например inet, а с другой как L2, например ccc — и это будет работать. У нас же с обоих концов ccc, на нулевом юните это обусловлено тем, что трафик должен зеркалироваться в инстанс с семейством ccc/bridge/vpls, а использование ccc на первом юните обусловлено тем, что с данного юнита строится L2CKT.
Далее создаем L2CKT между RZN-PE-1 и RZN-PE-2. Со стороны RZN-PE-1:
[edit]
bormoglotx@RZN-PE-1# show protocols l2circuit
neighbor 62.0.0.2 {
interface lt-0/0/0.1 {
virtual-circuit-id 1;
encapsulation-type ethernet;
}
}
Со стороны RZN-PE-2:
bormoglotx@RZN-PE-2> show configuration protocols l2circuit
neighbor 62.0.0.1 {
interface ge-0/0/1.0 {
virtual-circuit-id 1;
encapsulation-type ethernet;
}
}
bormoglotx@RZN-PE-2> show configuration interfaces ge-0/0/1
description Analyzer-3;
encapsulation ethernet-ccc;
unit 0 {
family ccc;
}
Теперь можно проверить, работает ли наш «Франкенштейн». Сначала посмотрим состояние L2CKT:
[edit]
bormoglotx@RZN-PE-1# run show l2circuit connections | find ^Nei
Neighbor: 62.0.0.2
Interface Type St Time last up # Up trans
lt-0/0/0.1(vc 1) rmt Up Sep 2 07:28:05 2017 1
Remote PE: 62.0.0.2, Negotiated control-word: Yes (Null)
Incoming label: 299840, Outgoing label: 299872
Negotiated PW status TLV: No
Local interface: lt-0/0/0.1, Status: Up, Encapsulation: ETHERNET
Flow Label Transmit: No, Flow Label Receive: No
Отлично, L2CKT в работе. Далее проверяем состояние сессии зеркалирования:
[edit]
bormoglotx@RZN-PE-1# run show forwarding-options port-mirroring SPAN-1
Instance Name: SPAN-1
Instance Id: 2
Input parameters:
Rate : 1
Run-length : 0
Maximum-packet-length : 0
Output parameters:
Family State Destination Next-hop
vpls up lt-0/0/0.0
Все отлично, теперь запустим пинг между серверами Server-1 и Server-2 и посмотрим, что попадает на анализатор трафика:
bormoglotx@Server-1:~$ ping 11.0.0.2 -I 11.0.0.1 -c 5 -i 0.2
PING 11.0.0.2 (11.0.0.2) from 11.0.0.1 : 56(84) bytes of data.
64 bytes from 11.0.0.2: icmp_seq=1 ttl=64 time=3.86 ms
64 bytes from 11.0.0.2: icmp_seq=2 ttl=64 time=2.34 ms
64 bytes from 11.0.0.2: icmp_seq=3 ttl=64 time=2.30 ms
64 bytes from 11.0.0.2: icmp_seq=4 ttl=64 time=9.56 ms
64 bytes from 11.0.0.2: icmp_seq=5 ttl=64 time=1.43 ms
--- 11.0.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 803ms
rtt min/avg/max/mdev = 1.436/3.903/9.565/2.937 ms
Теперь идем на Analyzer-3 и посмотрим, что попало в tcpdump:
bormoglotx@Analyzer-3:~$ sudo tcpdump -i eth1 -B 9192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
10:48:46.296920 IP 11.0.0.1 > 11.0.0.2: ICMP echo request, id 2000, seq 1, length 64
10:48:46.297969 IP 11.0.0.2 > 11.0.0.1: ICMP echo reply, id 2000, seq 1, length 64
10:48:46.496380 IP 11.0.0.1 > 11.0.0.2: ICMP echo request, id 2000, seq 2, length 64
10:48:46.497647 IP 11.0.0.2 > 11.0.0.1: ICMP echo reply, id 2000, seq 2, length 64
10:48:46.700540 IP 11.0.0.1 > 11.0.0.2: ICMP echo request, id 2000, seq 3, length 64
10:48:46.700547 IP 11.0.0.2 > 11.0.0.1: ICMP echo reply, id 2000, seq 3, length 64
10:48:46.897518 IP 11.0.0.1 > 11.0.0.2: ICMP echo request, id 2000, seq 4, length 64
10:48:46.907024 IP 11.0.0.2 > 11.0.0.1: ICMP echo reply, id 2000, seq 4, length 64
10:48:47.098414 IP 11.0.0.1 > 11.0.0.2: ICMP echo request, id 2000, seq 5, length 64
10:48:47.098799 IP 11.0.0.2 > 11.0.0.1: ICMP echo reply, id 2000, seq 5, length 64
10:48:51.307134 ARP, Request who-has 11.0.0.1 tell 11.0.0.2, length 46
10:48:51.307542 ARP, Reply 11.0.0.1 is-at 00:50:01:00:07:00 (oui Unknown), length 46
^C
12 packets captured
12 packets received by filter
0 packets dropped by kernel
Ну, помимо наших пингов в дамп попал еще и arp запрос-ответ, что доказывает что весь трафик зеркалируется, что нам и надо.
Ну и в заключении вспомним, что я написал, что на одну и ту же fpc можно биндить максимум два мирроринг инстанса. Но что делать, если вам нужно использовать три инстанса?
Конечно, можно воспользоваться двумя user-defined инстансами и дефолтный инстанс (который всего один), но во-первых это не лучшее решение, ну а во вторых, что делать, если дефолтный инстанс уже занят? Естественно JunOS позволяет вам обойти это ограничение. В принципе, тут нет ничего сверхестественного — принцип работы все тот же, изменения касаются только конфигурации инстансов.
Использование более двух mirroring инстансов на одном FPC
Итак, основной смысл в создании связки между несколькими мирроринг инстансами: делается родительская инстанс и дочерние инстансы, которые на нее ссылаются. В родительском инстансе мы указываем input параметры — то есть скорость мирроринга/сэмплинга, максимальный размер пакета. В дочерних инстансах указываются уже output параметры — интерфейсы или next-hop группы, а вот input параметры наследуются от родительского инстанса, указанного в конфигурации. Без конфигов это явно непонятно, поэтому соберем такую схему зеркалирования:
Сначала создадим родительский инстанс, я назвал его просто SPAN.
bormoglotx@RZN-PE-1# show forwarding-options port-mirroring instance SPAN
input {
rate 1;
run-length 0;
}
В инстансе указаны только входящие параметры зеркалирования. Больше ничего тут указывать не надо.
Теперь создадим три дочерних инстанса:
[edit]
bormoglotx@RZN-PE-1# show forwarding-options port-mirroring instance SPAN-1
input-parameters-instance SPAN;
family inet {
output {
interface ge-0/0/1.0 {
next-hop 169.254.0.1;
}
}
}
[edit]
bormoglotx@RZN-PE-1# show forwarding-options port-mirroring instance SPAN-2
input-parameters-instance SPAN;
family inet {
output {
interface ge-0/0/2.0 {
next-hop 169.254.0.3;
}
}
}
[edit]
bormoglotx@RZN-PE-1# show forwarding-options port-mirroring instance SPAN-3
input-parameters-instance SPAN;
family inet {
output {
interface gr-0/0/0.0 {
}
}
Тут уже мы указываем исходящие параметры зеркалирования. Связка между родительским и дочерним инстансом происходит с помощью следующей команды:
input-parameters-instance SPAN;
В итоге все три созданных мной инстанса SPAN-1/2/3 будут наследовать input параметры от инстанса SPAN. Как вы помните, теперь нам надо привязать инстансы к какой то (или каким то, если входящие порты на разных картах) FPC. Как я и сказал ранее — к FPC надо привязать только родительский инстанс:
bormoglotx@RZN-PE-1# show chassis fpc 0
pic 0 {
tunnel-services {
bandwidth 10g;
}
}
port-mirror-instance SPAN;
Ну а далее все так же — создаем фильтры и вешаем их на входящие порты:
bormoglotx@RZN-PE-1# wildcard range show interfaces ge-0/0/[3-5]
description Server-1;
unit 0 {
family inet {
filter {
input MIRROR>>>SPAN-3;
output MIRROR>>>SPAN-3;
}
address 11.0.0.254/24;
}
}
description Server-2;
unit 0 {
family inet {
filter {
input MIRROR>>>SPAN-2;
output MIRROR>>>SPAN-2;
}
address 12.0.0.254/24;
}
}
description Server-3;
unit 0 {
family inet {
filter {
input MIRROR>>>SPAN-1;
output MIRROR>>>SPAN-1;
}
address 13.0.0.254/24;
}
}
Обращаю внимание, что в фильтрах указываются не родительский инстанс, а дочерние инстансы:
[edit]
bormoglotx@RZN-PE-1# wildcard range show firewall family inet filter MIRROR>>>SPAN-[1-3]
term MIRROR {
then port-mirror-instance SPAN-1;
}
term MIRROR {
then port-mirror-instance SPAN-2;
}
term MIRROR {
then port-mirror-instance SPAN-3;
}
Теперь проверим состояние сессий зеркалирования:
bormoglotx@RZN-PE-1# run show forwarding-options port-mirroring
Instance Name: SPAN-1
Instance Id: 3
Input parameters:
Rate : 1
Run-length : 0
Maximum-packet-length : 0
Output parameters:
Family State Destination Next-hop
inet up gr-0/0/0.0
Instance Name: SPAN-2
Instance Id: 4
Input parameters:
Rate : 1
Run-length : 0
Maximum-packet-length : 0
Output parameters:
Family State Destination Next-hop
inet up ge-0/0/2.0 169.254.0.3
Instance Name: SPAN-3
Instance Id: 5
Input parameters:
Rate : 1
Run-length : 0
Maximum-packet-length : 0
Output parameters:
Family State Destination Next-hop
inet up ge-0/0/1.0 169.254.0.1
Из вывода видно, что сессии зеркалирования трафика в работе, а параметры обработки входящего трафика унаследованы от родительского инстанса. Собственно показывать выводы непосредственно работы я не буду в целях сокращения статьи — думаю, что после прочтения данной статьи вы сможете сами собрать такую схему и проверить ее работоспособность.
Вроде бы все, что хотел написать — написал. Если будут замечания или дополнения — пишите.
Спасибо за внимание.
Аннотация: Цель: Настроить отображение портов и понять способы его настройки.
Коммутаторы улучшают производительность и надежность сети, передавая трафик только на те порты, которым он предназначен. При этом анализ критичных данных — сложная задача, поскольку инструментальные средства сетевого анализа физически изолированы от анализируемого трафика.
На коммутаторах D-Link реализована поддержка функции Port Mirroring («Зеркалирование портов»), которая полезна администраторам для мониторинга и поиска неисправностей в сети.
Функция Port Mirroring позволяет отображать (копировать) кадры, принимаемые и отправляемые портом-источником (Source port) на целевой порт (Target port) коммутатора, к которому подключено устройство мониторинга (например, с установленным анализатором сетевых протоколов) с целью анализа проходящих через интересующий порт пакетов.
В настоящее время анализаторы сетевых протоколов эффективно используются IT-отделами и отделами информационной безопасности для решения широкого круга задач. С их помощью можно быстро определить причину медленной работы IT-сервиса или бизнес-приложения. Они позволяют документировать сетевую активность пользователей и использовать полученные данные, например, для определения источника утечки информации.
Цель: Настроить отображение портов и понять способы его настройки.
Оборудование:
DES-3200-28 | 1 шт. |
Рабочая станция | 3 шт. |
Кабель Ethernet | 3 шт. |
Консольный кабель | 1 шт. |
Перед выполнением задания необходимо сбросить настройки коммутаторов к заводским настройкам по умолчанию командой
Рис.
26.1.
Схема 1:
Настройка DES-3200-28
Настройте список портов (с 13 по 24), трафик которых будет пересылаться на целевой порт 1
config mirror port 1 add source ports 13-24 both
Включите зеркалирование портов
Проверьте настройки функции
Внимание!
Целевой порт и порт-источник должны принадлежать одной VLAN и иметь одинаковую скорость работы. В том случае, если скорость порта-источника будет выше скорости целевого порта, коммутатор снизит скорость порта-источника до скорости работы целевого порта. Также целевой порт не может быть членом группы агрегированных каналов.
Упражнения
Установите на рабочей станции, подключенной к порту 1, анализатор протоколов (например, Wireshark). http://www.wireshark.org — официальный сайт Wireshark.
Выполните тестирование соединения командой ping от ПК1 к ПК2 и наоборот
Захватите и проанализируйте трафик с помощью анализатора протоколов.
Вы видите пакеты, передаваемые от и к рабочим станциям?
Отключите зеркалирование портов
Проверьте настройки функции
Выполните тестирование соединения командой ping от ПК1 к ПК2 и наоборот
Запустите анализатор протоколов.
Что вы наблюдаете теперь?