Что такое ALG / Принцип работы ALG
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами рассмотрели пошаговую инструкцию по внедрению DHCP сервера с помощью Cisco. Сегодня я хочу коснуться интересной и спорной функции которая очень часто используется или наоборот отключается в Ip-телефонии, речь пойдет про Application-level gateway. Если у вас есть с ней свой опыт работы, то я хочу попросить вас поделиться своим опытом и написать используете ли вы ее или нет.
Application-level gateway, или ALG (англ. «шлюз прикладного уровня») — это компонент NAT-маршрутизатора, который понимает какой-либо прикладной протокол, и при прохождении через него пакетов этого протокола модифицирует их таким образом, что находящиеся за NAT пользователи могут пользоваться протоколом.
Если упростить, то ALG — это технология, используемая в сетевых устройствах Cisco (и не только), которая помогает обрабатывать и управлять трафиком приложений, особенно тех, которые используют динамические порты для связи. ALG выполняет функции прокси-сервера, позволяя сетевым устройствам (например, маршрутизаторам или брандмауэрам) анализировать и изменять заголовки пакетов для обеспечения корректной работы приложений.
Алгоритм работы ALG
NAT-маршрутизатор ретранслирует пакеты, поступающие изнутри сети, с внешнего IP-адреса. Также может подменяться порт. Но некоторые сетевые протоколы передают IP-адрес или порт отправителя. Конечно же, после прохождения NAT эти параметры становятся неверными — а значит, удалённая сторона не может наладить соединение.
ALG, идентифицировав пакет как относящийся к данному протоколу, подставляет в качестве IP-адреса и порта свои адрес и порт. Если, по протоколу, соединение по этому порту налаживает удалённый компьютер, автоматически включается ретрансляция.
ALG похож на прокси-сервер; обычно понятием «прокси-сервер» называют сервер, который выполняет дополнительные операции наподобие кэширования, в то время как задача ALG — обеспечить, чтобы клиенты могли пользоваться протоколом.
Алгоритм работы Application Layer Gateway (ALG) включает несколько этапов, которые обеспечивают корректную обработку и управление трафиком приложений, использующих динамические порты. Рассмотрим этот процесс более подробно, используя примеры протоколов и технологий.
- 1️⃣Инициация соединения - Когда клиентское приложение (например, VoIP или FTP) инициирует соединение с сервером, оно отправляет запрос на определённый порт. Например, SIP (Session Initiation Protocol) обычно использует порт 5060.
- Протокол: SIP
- Порт: 5060
- Клиент: VoIP-телефон
- Сервер: SIP-сервер
- 2️⃣Обработка NAT - ALG отслеживает исходящий трафик и сохраняет информацию о соединении (например, IP-адреса и порты). Если используется NAT (Network Address Translation), ALG корректирует заголовки пакетов, чтобы обеспечить правильную маршрутизацию.
- 3️⃣Установление соединения - ALG может изменить заголовки пакетов для поддержки динамически назначаемых портов. Например, когда SIP-сервер отвечает на запрос, он может указать динамический RTP-порт для передачи медиа.
- SIP-сервер отвечает, указывая RTP-порт 10000 для передачи голоса.
- ALG перехватывает этот ответ и изменяет его, чтобы указать правильный внешний IP-адрес и порт.
- 4️⃣Обработка медиа-трафика - Когда начинается передача медиа (например, голосового трафика через RTP), ALG продолжает отслеживать соединение и может изменять заголовки пакетов RTP для обеспечения корректной маршрутизации.
- RTP-пакеты отправляются от SIP-клиента на RTP-порт 10000.
- ALG изменяет адресацию в заголовках RTP-пакетов, чтобы они направлялись на внешний IP-адрес.
- 5️⃣Завершение соединения - Когда соединение завершается (например, вызов завершен), ALG также отслеживает это событие и освобождает ресурсы, связанные с сессией.
- SIP-клиент отправляет запрос на завершение вызова (BYE).
- ALG обрабатывает этот запрос и освобождает динамические порты.
Основные функции ALG
- 1️⃣Обработка динамических портов: Многие приложения (например, VoIP) используют динамические порты для передачи данных. ALG может отслеживать эти порты и корректно настраивать NAT (Network Address Translation) для обеспечения связи.
- 2️⃣Безопасность: ALG может проверять данные на наличие уязвимостей или вредоносного кода, что повышает уровень безопасности сети.
- 3️⃣Улучшение качества обслуживания (QoS): ALG может помочь в управлении трафиком, обеспечивая приоритет для определенных типов данных, таких как голосовые вызовы или видео.
- 4️⃣Совместимость: ALG может обеспечить совместимость между различными протоколами и приложениями, что особенно важно в сложных сетевых инфраструктурах.
Примеры использования ALG
- 1️⃣Например, в устройствах ZyXEL реализована поддержка IP-телефонии, которая обеспечивается механизмом трансляции сетевых адресов Full Cone NAT и встроенным шлюзом уровня приложения – SIP ALG. SIP ALG (SIP Application Level Gateway) – это шлюз прикладного уровня, который позволяет голосовому VoIP-трафику (RTP) беспрепятственно проходить через устройство с функцией NAT (Network Address Translation). Если в маршрутизаторе присутствует и активирован SIP ALG, то не нужно дополнительно настраивать проброс портов для этого типа трафика.
Как правило, IP-адреса клиентов SIP-телефонии назначаются из диапазона внутренних (локальных) адресов* и их IP-адреса могут пересекаться. В большинстве случаев подключение пользователей к сети осуществляется через устройство с функцией NAT. Если это устройство не будет иметь поддержки SIP ALG, то SIP-сервер не сможет различать клиентов.
Регистрация VoIP-устройства на SIP-сервере возможна при использовании одного из способов преодоления NAT: Outbound proxy, STUN, SIP ALG. При этом если на VoIP-телефоне или другом устройстве c SIP-клиентом, расположенном за NAT, настроен один из двух первых методов, то на устройстве обязательно нужно отключить SIP ALG.
Для беспрепятственного прохождения SIP-трафика через устройство с NAT необходимо транслировать адресацию в SIP-пакетах. SIP-пакет анализируется на уровне приложения, и в нем изменяются IP-адреса. Так SIP ALG позволяет реализовать услуги SIP-телефонии в сети с трансляцией адресов без использования вспомогательных внешних устройств.
В этом случае устройство с NAT (маршрутизатор) подменяет в IP-пакетах IP-адрес источника 192.168.1.33 на свой WAN IP-адрес 210.243.66.215. Но существуют ограничения, без которых SIP-телефония не будет работать. Особенность реализации SIP ALG заключается в том, что он работает только на порту 5060. При использовании другого номера порта механизм SIP ALG не будет работать.
Все устройства с NAT должны поддерживать механизм SIP ALG. Если на пути прохождения SIP-пакетов будет находиться устройство с NAT, которое не поддерживает SIP ALG, то в этом случае SIP-телефония не будет работать.
* - диапазоны внутренних IP-адресов:
10.0.0.0 — 10.255.255.255
172.16.0.0 — 172.31.255.255
192.168.0.0 — 192.168.255.255
- 2️⃣VoIP: ALG может помочь в обработке SIP-трафика, обеспечивая правильную маршрутизацию вызовов и управление NAT.
- 3️⃣FTP: ALG может обрабатывать FTP-сессии, корректно настраивая NAT для передачи данных. Он перехватывает команды FTP и открывает необходимые порты для передачи данных.
- 4️⃣H.323: Порты: 1720 для управления. ALG может обрабатывать сигналы H.225 и управлять динамическими потоками.
- 5️⃣HTTP/HTTPS: ALG может проверять заголовки и содержимое пакетов для обеспечения безопасности при использовании прокси-серверов.
Как отключать ALG
Я уже освещал это в нескольких инструкциях:
- Как отключить ALG в Juniper-1 часть через веб интерфейс
- Как отключить ALG в Juniper-2 часть через консоль