| Версия 5.2
Введение
Установка
Администрирование
Сеть
Объекты
Почта
Сигналы
Доступ
Услуги
Справочник
Кластеры
Программы
Разное
Лицензирование
Веб Почта
Pronto!
PBX
Администрирование | Журналы | Маршрутизатор | Защита | Безопасность | PKI | Перехват | Масштабируемость | Предупреждения | Триггеры
# Маршрутизатор Структура Адреса Имя Главного Домена Домены и Записи в DNS Таблица Маршрутизации Префикс Образец Маршрут Записи Уровня Домена Записи Уровня Пользователя Общие Локальные Записи Специальные Адреса Явная маршрутизация через Удалённую Систему Маршрутизация в Приложения Реального Времени Маршрутизация Телефонных Номеров Маршрутизация по IP адресу Маршрутизация через Модули Маршрутизация через Внешних Помощников ENUM Маршрутизация Записи по умолчанию Дополнение Неквалифицированных Доменных Имен Общедоменные Псевдонимы Таблица Маршрутизация Общая для Кластера Этот раздел предназначен только для опытных Администраторов. В большинстве случаев достаточно методов маршрутизации, применяемых по умолчанию. Вам необходимо ознакомиться с этим разделом только если ваш Сервер работает как релей (ретранслятор) сообщений или сигналов для других систем, или если вам необходимо использовать сложные схемы маршрутизации. Когда Сервер обрабатывает полученное Сообщение, он извлекает информацию о получателях из "конверта" сообщения и решает, в очередь какого модуля должно быть помещено это сообщение, какому объекту модуль должен послать это сообщение и какой адрес должен использоваться для доставки сообщения этому объекту. Подобные операция выполняются с Сигналами Реального Времени, приходящими из внешних источников или генерирующимися внутренними компонентами сервера и предназначенными для локальных или внешних объектов. Модули Доступа (такие как POP, IMAP, Веб Интерфейс Пользователя и т.д.) также работают с адресами. Когда клиентские приложения или программы входят на сервер, они указывают имя Пользователя, от имени которого они хотят войти на Сервер. Этот адрес обрабатывается с использованием таких же операций, как и при обработки адресов Сообщений и Сигналов. Эти операции маршрутизации реализованы в компоненте Маршрутизатор сервера CommuniGate Pro. Любой адрес, получаемый вашим Серверов, обрабатывается с использованием компонента Маршрутизатор. Это обеспечивает дополнительную целостность и связность в работе всех компонентов Сервера: когда, например, вы создаёте Псевдоним для некоторого Пользователя, этот Псевдоним может быть использован как для отправки электронной почты и Сигналов этому Пользователю, так и для входа на Сервер от имени этого Пользователя.

## Структура Адреса

Каждый адрес электронной почты или адрес Сигналов состоит из двух строк: локальной части и имени домена. Обычно, адрес выглядит как `xxxx@yyyyy`, где yyyyy - это имя домена (уникальное имя почтовой системы получателя), а xxxx - это его локальная часть, то есть, имя пользователя в той системе.

Адреса могут иметь более сложную структуру, например, адрес электронной почты может так же содержать некоторую информацию о пути:
  `<@zzzz:xxxx@yyyyy>` или `zzzz!yyyyy!xxxx` или `xxxx%yyyyy@zzzz`
  Эти адреса указывают, что сообщения электронной почты или Сигналы сначала должны быть отправлены на систему zzzz, и затем эта система должны доставить их на xxxx@yyyyy (пользователю xxxx на систему yyyyy).

Когда Маршрутизатор разбирает адрес, он извлекает имя системы, на которую должно быть доставлено сообщение. Оно становиться доменной частью адреса. Остальная часть адреса считается локальной частью - то есть, локальная часть определяет конкретного получателя, которому должны быть доставлены сообщения или сигналы, после доставки их в систему, заданную по имени домена. В примере, приведенном выше, zzzz является доменной частью имени, а xxxx@yyyyy - локальной частью.

Дополнительную информацию о форматах адреса электронной почты вы можете найти в RFC822 и сопутствующих документах.

Если в локальной части содержится сложный адрес (то есть в локальной части содержится имя (имена) домена и локальная часть), то локальная часть представляется с использованием символа '%': local%domain1%domain2; в классической форме в CommuniGate Pro этому соответствует полный адрес `local%domain1%domain2@domain`.

## Имя Главного Домена

Когда имя домена извлекается из адреса, Маршрутизатор сравнивает его с именем домена Сервера (смотрите в настройках Общее). Если они совпадают, то значению имени домена присваивается пустая строка. Когда имя домена приравнивается к пустой строке, Маршрутизатор перезапускает обработку локальной части, снова пытаясь разделить её на доменную и локальную часть.
Например, если Имя Главного Домена вашего Сервера company.com, то адреса будут преобразованы следующим образом:

Адрес | локальная часть | доменная часть
--- | --- | ---
`support@company.com` | `support` | `company.com`
--- преобразовывается в ---> | `support` |
`<@company.com:sales@example.com>` | `sales@example.com` | `company.com`
--- преобразовывается в ---> | `sales@example.com` |
--- преобразовывается в ---> | `sales` | `example.com`

## Домены и Записи в DNS

В дополнение к Главному Домену Сервера, ваш Сервер может обслуживать много независимых Доменов.

Для обработки Сообщений и Сигналов, направляемых на Домены вашего Сервера, вы должны убедиться, что Сообщения, отправленные в какой-либо домен, направляются на ваш Сервер, имеющий соответствующую запись в глобальной системе DNS.

Пример 1: ваш сервер (example.com) обслуживает Домен example.com и Домен parteners-example.com. Убедитесь, что MX-записи DNS созданы для обоих Доменов, и что эти записи указывают на ваш Сервер example.com.

Пример 2: ваш сервер (example.com) работает как "Удалённый POP" почтовый релей для некоторых клиентов системы. Каждый домен имеет своё собственное имя домена (client1.com, client2.com и client3.com), и вы настроили ваш Маршрутизатор таким образом, что бы что вся электронная почта, направляемая на домен client1.com, перенаправлялась на общедоменного Пользователя client1, и т.д.
Для этого вы должны должны убедиться, что вся электронная почта, отправляемая в домен client1.com, направляется на ваш сервер (example.com). В DNS должна быть создана MX-запись client1.com, указывающая на ваш Сервер (example.com).

## Таблица Маршрутизации

Когда разбирается адрес и извлекается его доменная часть, Маршрутизатор проверяет записи маршрутизации в Таблице Маршрутизации.

Для того, что бы настроить Таблицу Маршрутизации, используйте Веб Интерфейс Администратора. Откройте страницу Маршрутизатор в разделе Установки:

Уровень Журнала:
fax.company.com = company.com ; -> в этот же домен hq.company.com = newhq.company.com ; -> на другой сервер Relay:*.test.com = company.com ; aaa.test.com, bbb.test.com ; просто строка с комментарием <sales> = john ; простой псевдоним <sales@client1.com> = sales-client1 ; простой чужой псевдоним <info@client1.com> = info@otherhost.com; пользователь -> другой пользователь <*@client2.com> = *.cl2 ; sales@.. -> sales.cl2 test.com = Unified.local ; Общедоменный пользователь
Добавлять к неквалифицированным доменным именам

Каждая строка в Таблице Маршрутизации является записью маршрутизации. Запись маршрутизации содержит опциональные префиксы, левую часть, знак равно (`=`) и правую часть. Символ точка с запятой (`;`) используется для указания комментария после правой части записи маршрутизации. В Таблицу может быть добавлена строка с комментарием, начинающаяся с символа точка с запятой.

Маршрутизатор берет разобранный адрес (то есть доменную и локальные части адреса) и сканирует все записи в Таблице сверху вниз. Если найдена подходящая запись, то она применяется (как описано ниже) и модифицированный адрес снова обрабатывается в Маршрутизаторе.

`Уровень Журнала`
  Используйте эту настройку для того, что бы указать какую информацию Маршрутизатор должен сохранять в Журнале работы Сервера. Обычно используется уровень `Основные` (маршрутизация адресов). В случае, если в работе Маршрутизатора возникают проблемы, возможно, целесообразным будет увеличить детализацию до уровня `Подробности` или `Всё`: в этом случае в Журнал работы Сервера будет записываться подробная информация о работе Маршрутизатора. Записи, помещённые компонентом Маршрутизатор в Журнал работы Сервера, имеют пометку `ROUTER`.

### Префикс

Записи Маршрутизации могут иметь префиксы режима Ретрансляции (релей-префиксы): `Relay:` (может сокращаться до `R:`), `NoRelay:` (может сокращаться до `N:`) или `RelayAll:`. Дополнительную информацию смотрите в разделе Защита .
Если ни один из этих префиксов не указан, то по умолчанию используется префикс `NoRelay:`.

Записи Маршрутизации могут иметь ноль, один или несколько следующих префиксов по типам операций:

- `Mail:` (может сокращаться до `M:`). Записи с этим префиксом применяются в случаях, когда адреса перенаправляются для целей какой-нибудь операции, связанной с доставкой электронной почты.
- `Access:` (может сокращаться до `A:`). Записи с этим префиксом применяются в случаях, когда адреса перенаправляются для целей какой-нибудь операции, связанной с доступом к серверу.
- `Signal:` (может сокращаться до `S:`). Записи с этим префиксом применяются в случаях, когда адреса перенаправляются для целей какой-нибудь операции, связанной с обработкой Сигналов.

Эти префиксы должны указываться после опциональных префиксов режима Ретрансляции. Если ни один из этих префиксов не указан, по умолчанию запись Маршрутизации применяется ко всем операциям.

### Образец

Левая часть записи Маршрутизации содержит Образец: строку с опциональным шаблоном подстановки.

Поддерживаются шаблоны подстановки:

`*`
  шаблон подстановки, совпадающий со строкой нулевой или произвольной длины.
  Пример:
    sta*r
    Этому образцу соответствует любая строка вида `staXXXXXXr`, где XXXXXX - произвольная подстрока (включая пустую подстроку в строке star).
`(размер тип)`
  тип - это подстрока типа:
  - `d` - десятичные цифры (`0` .. `9`)
  - `h` - шестнадцатеричные цифры (`0` .. `9`, `A` .. `F`, `a` .. `f`)
  - `L` - алфавитно-цифровые символы (`0` .. `9`, `A` .. `Z`, `a` .. `z`)
  - `*` - любые символы
  размер это опциональная подстрока длины. Она может быть задана в следующих формах:
  - `nnn` (где nnn десятичное число): соответствующая подстрока должна иметь nnn символов.
  - `nnn+`: соответствующая подстрока должна иметь nnn или больше символов.
  - `nnn-mmm` (где mmm десятичное число, mmm >= nnn ): соответствующая подстрока должна иметь от nnn до mmm символов.
  Пример:
    sta(3*)r
    Этому образцу соответствует любая строка вида `staXXXr`, где XXX - любые три символа.
  Пример:
    sta(4+d)r
    Этому образцу соответствует любая `staDDDDDr` строка, где DDDDD 4 или более десятичных цифр.
  Пример:
    sta(3-5h)r
    Этому образцу соответствует любая `staHHHr` строка, где HHH 3, 4 или 5 шестнадцатеричных цифр.

Символ обратной косой черты (`\`) используется как управляющий символ: `\\` обрабатывается как одна косая черта, `\*` обрабатывается как символ звёздочка и так далее.

В Образце разрешено использовать только один символ шаблона подстановки.

### Маршрут

Правая часть записи Маршрутизации содержит Маршрут: строку с опциональным шаблоном подстановки `*`.

Если Образец Записи содержит соответствует обрабатываемому адресу, адрес изменяется согласно Маршруту Записи. Подстрока, соответствующая шаблону подстановки Образца подставляется в шаблон подстановки Маршрута.

Символ обратной косой черты (`\`) используется как управляющий символ: `\\` обрабатывается как одна косая черта, `\*` обрабатывается как символ звёздочка и так далее.

В Маршруте разрешено использовать только один символ шаблона подстановки.

### Записи Маршрутизации Уровня Домена

Если левая часть записи Маршрутизации содержит имя домена, то запись определяет маршрут для всего этого домена.

Если при обработки какого-либо адреса имя домена соответствует имени домена, указанному в такой записи, то доменная часть заменяется правой частью записи маршрутизации.

Пример:
  hq.company.com = twisted.company.com
  Все адреса с доменной частью hq.company.com изменяются таким образом, что их доменная часть будет twisted.company.com. Маршрутизатор перезапускается и пытается определить маршрут для изменённого адреса.

Путь маршрутизации может указывать ретрансляторы (релеи).

Пример:
  hq.company.com = hq.company.com@relay.company.com
  Вся электронная почта и Сигналы, направляемые на имя домена hq.company.com будут перенаправлены на систему (домен) relay.company.com и затем, с той системы, на домен hq.company.com.

Если электронная почта и Сигналы должны маршрутизироваться одинаковым или похожим образом, то вы можете использовать символ звёздочка (`*`) как шаблон подстановки.

Пример:
  *.old_company.com = new_company.com
  В этому случае адреса во всех доменах, заканчивающихся на .old_company.com будут изменяться на доменную часть new_company.com с неизменённой локальной частью (именами пользователей).

Такой тип маршрутизации очень часто используется для обработки всех субдоменов в некотором домене.

Пример:
  *.mycompany.com = mycompany.com
  Если mycompany.com является именем Главного Домена Сервера, то такая запись маршрутизации заставит Сервер обрабатывать электронную почты и Сигналы, отправляемые на все субдомены Главного Домена, и адрес user@mail.mycompany.com будет обрабатываться как адрес user@mycompany.com.
Пример:
  *.old_company.com = *.new_company.com
  Если задана такая строка, и в домен host5.old_company.com приходит Электронная почта или Сигналы, то они направляется на host5.new_company.com.
Пример:
  system-*.mycompany.com = uu*.local
  Эта строка маршрутизации перенаправит system-abc.mycompany.com на uuabc.local.

Кроме записей маршрутизации уровня домена, маршрутизация для домена может задаваться также через записи уровня пользователя (смотрите ниже).
Записи для Общедоменных Пользователей так же являются записями маршрутизации уровня домена.

### Записи Маршрутизации Уровня Пользователя

Если левая часть записи маршрутизации содержит адрес в угловых скобках(`<` и `>`), то это запись уровня Пользователя - правило маршрутизации для конкретного адреса.

Когда разбирается адрес и Маршрутизатор сканирует записи в Таблице, он сравнивает доменную часть адреса с доменной частью всех записей маршрутизации уровня Пользователя.

Если доменная часть совпадает, Маршрутизатор сравнивает локальную часть адреса с локальной частью адреса в записи уровня пользователя. Если обе, доменная и локальная части, совпадают, то правая часть записи маршрутизации уровня пользователя используется для формирования нового адреса. Маршрутизатор перезапускается, разбирает и обрабатывает этот новый адрес.

Обратите внимание: Из-за того, что Имя Главного Домена Сервера в разбираемом адресе сразу же заменяется пустой строкой, записи уровня пользователя, которые должны применяться к адресам в Главном Домене, вообще не должны содержать никакой доменной части.

В примере ниже `mycompany.com` является Именем Главного Домена Сервера.

Пример:
  <sales> = bill
  в этом случае, все сообщения на адрес sales@mycompany.com будут направлены на bill, так же, как если бы они отправлялись на bill@mycompany.com.

Обратите внимание: если для некоего локального имени `xxxx` существует запись уровня пользователя, то нет необходимости действительно создавать реального Пользователя `xxxx` на Сервере. Более того, создание такого Пользователя будет абсолютно бесполезным, так как никакое сообщение или сигнал никогда не попадет к Пользователю: все, направляемое на имя`xxxx` будет куда-нибудь перенаправлено.

Правая часть записи уровня пользователя может быть любым адресом.

Пример:
  <sales> = Bill@thatcompany.com
  Все сообщения, направляемые на адрес sales@mycompany.com будут перенаправлены на Bill@thatcompany.com. Маршрутизатор берёт новый адрес, извлекается имя домена (thatcompany.com) и локальную часть (Bill), затем Маршрутизатор перезапускается, пытаясь определить маршрут для thatcompany.com.

Вы можете использовать шаблон подстановки (`*`) в локальной части записи уровня пользователя. Этот же символ может быть использован и любой части адреса в правой части для задания строки подстановки.

Пример:
  <dept-*> = postmaster@*-dept.mycompany.com
  Эта запись перенаправит всю электронную почту и Сигналы, отправленные для dept-sales@mycompany.com на пользователя postmaster, обслуживающегося на сервере отдела sales-dept.mycompany.com.

Вы можете использовать записи уровня пользователя для перенаправления электронной почты и Сигналов, отправленных на любой из Доменов вашего Сервера. В следующем примере client.com является локальным Доменом.

Пример:
  <sales@client.com> = Bill@client.com
  Все сообщения, направляемые на адрес sales@client.com будут перенаправлены на Bill@client.com.
Пример:
  <sales@client.com> = Bill
  Все сообщения, направляемые на адрес sales@client.com будут перенаправлены на Bill@mydomain.com (то есть на адрес Bill в Главном Домене).

В большинстве случаев вы не должны использовать записи Маршрутизатора уровня пользователя: если возникает необходимость использования альтернативных имен для какого-нибудь Пользователя, используйте вместо этого Псевдонимы Пользователя. Если вам необходимо перенаправить электронную почту и Сигналы, отправленные на какое-либо имя в локальном Домене Сервера на какой-нибудь другой адрес, используйте Переадресаторы.

Вы можете создать псевдоним для конкретного пользователя чужой системы. Например, если вся электронная почта, отправленная в какой-нибудь домен, должна быть перенаправлена на определённый почтовый хост или на объединённого пользователя, но определённые адреса в этом домене должны быть направлены на адреса на вашей или другой системе.

Пример:
  Mail:<sales@client1.com> = sales-client1
  Mail:client1.com = new.client1.com
  Эти записи направляют всю электронную почту, отправляемую на адрес sales в домене client1.com на Пользователя sales-client1 в Главном Домене Сервера, а сообщения на других пользователей в домене client1.com направляются на систему new.client1.com.

Шаблон подстановки (`*`) может использоваться только в локальной части полного имени пользователя (то есть до символа `@`).

Вы можете использовать возможности шаблона подстановки для обслуживания нескольких доменов в одном Домене CommuniGate Pro, создав уникальное "адресное пространство" для каждого имени домена.

Пример:
  <*@client5.com> = cl5-*
  <*@client7.com> = cl7-*
  Электронная почта и Сигналы, отправляемые на адрес sales@client5.com будут перенаправлены на Пользователя cl5-sales в Главном Домене, электронная почта и Сигналы, отправляемые на адрес info@client5.com, будут перенаправлены на Пользователя cl7-info в Главном Домене, а Электронная почта и Сигналы, отправляемые на адрес sales@client7.com, будут перенаправлены на Пользователя cl7-sales в Главном Домене.

  Этот метод может использоваться когда вы не хотите создавать полнофункциональные Домены CommuniGate Pro для доменов, содержащих в лучшем случае нескольких Пользователей.

### Общие Локальные Записи Маршрутизации

В записях уровня пользователя в доменной части может использоваться шаблон подстановки (`*`). Эти записи применяются к адресам, которые имеются в любом локальном Домене (то есть в Домене, созданном на Сервере или в Кластере Сервера CommuniGate Pro). Правая часть адреса такой записи указывает адрес в этом же локальном Домене.

Пример:
  <abuse@*> = postmaster
  Эта запись перенаправит адрес abuse@domainX.dom на postmaster@domainX.dom для любого Домена domainX.dom, созданного в вашей системе CommuniGate Pro.

Если в правой части адреса имеется доменная часть, то адрес перенаправляется в этот домен.

Пример:
  <abuse@*> = postmaster@somedomain.com
  Эта запись перенаправит адрес abuse@domainX.dom на адрес postmaster%somedomain.com@domainX.dom для любого Домена domainX.dom, созданного в вашей системе CommuniGate Pro. Затем адрес postmaster%somedomain.com@domainX.dom будет перенаправлен на адрес postmaster@somedomain.com.

Локальная часть левой стороны адреса может содержать шаблон подстановки (как обычная запись уровня пользователя). Строка, совпадающая с шаблоном подстановки может использоваться в правой части адреса.

Пример:
  <+*@*> = 011*
  Эта запись перенаправит адрес `+490088899@domainX.dom` на адрес `011490088899@domainX.dom` для любого Домена domainX.dom, созданного в вашей системе CommuniGate Pro.

## Специальные Адреса

Если доменная часть адреса равна `NULL`, или доменная часть имени пустая, а локальная часть равна `NULL`, то адрес направляется в фиктивный внутренний модуль "Чёрная дыра".

Когда сообщение направляется в "Чёрную дыру", адрес сразу же получает отметку "доставлено", без какой-либо дальнейшей обработки.

Эта возможность позволяет вам использовать локальное имя `NULL` или домен `NULL` как адрес "чёрной дыры": все сообщения, отправленные на этот адрес, выкидываются. Адрес `MAILER-DAEMON` автоматически перенаправляется на `NULL`.

Пример:
  bad.company.com = null
  <junk> = null
  С такими записями в Таблице Маршрутизации, Сервер выкинет всю почту, посылаемую в домен bad.company.com, так же как и всю почту, отправляемую на адрес junk в Главном Домене.

Если доменная часть имени адреса `ERROR`, или если доменная часть пустая, а локальная часть `ERROR`, адрес отвергается без обработки и генерируется ошибка report/response.

Пример:
  bad.company.com = error
  <junk> = error
  Если введены такие строки, Сервер будет отвергать все сообщения электронной почты и Сигналы, отправляемые в домен bad.company.com или на адрес junk в Главном Домене.

Если доменная часть адреса помещена в `чёрный список`, или если доменная часть пустая, а локальная часть помещена в `чёрный список`, адрес отвергается без обработки и генерируется отчет об ошибка "Blacklisted Address". Дополнительную информацию смотрите в разделе SMTP Модуль.

Если доменная часть имени пустая, а локальная часть `spamtrap`, маршрутизация останавливается. Адреса этого типа отвергаются так же, как и адреса `ERROR`, но SMTP модуль обрабатывает их особым образом. Дополнительную информацию смотрите в разделе Защита .

Если доменная часть имени пустая, а локальная часть `incomplete`, маршрутизация останавливается. Сигналы, отправляемые на такие адреса, отвергаются с сообщением об ошибке "Address Incomplete".

Пример:
  <(1-4d)@*> = incomplete
  Когда введена такая запись, набор 1-, 2- или 3-х значных номеров будет возвращать клиенту код с ошибкой "Address Incomplete", заставляя его ждать дополнительного ввода от пользователя.

Если доменная часть имени заканчивается символами `.here`, этот суффикс удаляется, и оставшаяся часть имени используется как имя локального Домена CommuniGate Pro. Этот суффикс позволяет вам избежать зацикливания маршрутизации в определённых ситуациях.

Пример:
  dept1.xyz.com = dept1.xyz.com.here
  dept2.xyz.com = dept2.xyz.com.here
  *.xyz.com = *.abc.com
  Электронная почта и Сигналы, отправляемые на все субдомены домена xyz.com, перенаправляются на субдомены домена abc.com, за исключением адресов в субдоменах dept1.xyz.com и dept2.xyz.com, которые направляются в локальные Домены dept1.xyz.com и dept2.xyz.com CommuniGate Pro.

## Явная маршрутизация через Удалённую Систему

После того, как применены все записи из Таблицы Маршрутизации, Маршрутизатор проверяет, не оканчивается ли имя домена суффиксом `.via`. Суффикс удаляется, имя домена считается хостом - конечным адресатом, а локальная часть адреса используется как адрес, который будет передан на этот хост. Адрес направляется в SIP модуль для операций, связанных с обработкой Сигналов или в SMTP модуль для операций доступа и передачи электронной почты.

Пример:
  Именем Главного Домена Сервера является `company.com`.
  Электронная почта и Сигналы, отправляемые в Домен `sales.company.com` должны быть ретранслированы (релеены) на отдельный сервер sales.company.com, а адреса в других субдоменах домена company.com должны обрабатываться как адреса в Главном Домене, то есть адрес user@subdomain.company.com должен обрабатываться как адрес user@company.com.
  Вы можете реализовать такую маршрутизацию, используя следующие записи:
  sales.company.com = sales.company.com.via ; явно релеить на удалённый хост
  *.company.com = company.com ; все остальные субдомены перенаправлять
  Вы так же можете задать такую маршрутизацию, используя IP адреса:
  sales.company.com = [192.0.0.1] ; явно релеить на IP адрес
  *.company.com = company.com ; все остальные субдомены перенаправлять

  Обратите внимание: адреса в домене sales.company.com будут ретранслироваться (релеиться) с удалённой доменной частью, то есть адрес <user@sales.company.com> будет ретранслироваться на хост sales.company.com как <user>.
  Это может привести к проблемам, если сервер sales.company.com не принимает адреса без указания домена. Смотрите следующий пример для возможного решения этой проблемы.

Пример:
  Электронная почта и Сигналы, отправляемые на домены client1.com, client2, и client3.com должны отправляться на сайт host.com.
  Вы можете реализовать такую маршрутизацию, используя следующие записи:
  client1.com = client1.com@host.com.via
  client2.com = client2.com@host.com.via
  client3.com = client3.com@host.com.via
  или более гибким образом:
  client1.com = client1.com@relay
  client2.com = client2.com@relay
  client3.com = client3.com@relay
  relay = host.com.via

  Обратите внимание: Здесь вы можете указывать только `host.com` вместо `host.com.via` (подразумевается, что нет других записей в Маршрутизаторе для host.com), но в этом случае почта для `user@client1.com` будет отправляться на host.com как `user%client1.com@host.com`. Указывая суффикс `.via` вы не только говорите Маршрутизатору направить адрес в модуль ретрансляции (релеинга), но также заставляете этот модуль отправлять только локальную часть адреса на удалённый сервер.

  Обработка Адресов без суффикса `.via`
  `user @ client1.host` | Маршрутизатор преобразовывает в | `user%client1.host @ relay`
  `user%client1.host @ relay` | Маршрутизатор преобразовывает в | `user%client1.host @ host.com`
  `user%client1.host @ host.com` | Маршрутизатор останавливается | нет правил для host.com
  `user%client1.host @ host.com` | Маршрутизатор принимает | для SIP/SMTP хост `host.com` как `user%client1.host@host.com`
  Обработка Адресов с суффиксом `.via`
  `user @ client1.host` | Маршрутизатор преобразовывает в | `user%client1.host @ relay`
  `user%client1.host @ relay` | Маршрутизатор преобразовывает в | `user%client1.host @ host.com.via`
  `user%client1.host @ host.com.via` | Маршрутизатор принимает | для `host.com` как `user@client1.host`

Если доменная часть адреса содержит суффикс `.via`, модуль проверяет последнюю часть доменного имени после удаления суффикса. Если это часть является числом, символ точка (`.`) отделяющий эту часть заменяется на символ двоеточия (`:`):

host.domain.dom.26.via --> host.domain.dom:26 Если имя домена содержит символ двоеточие, то SIP и SMTP модули:

- Не используют MX/SRV записи в DNS, а запрашивают из DNS только A-записи.
- Вместо использования стандартных номеров портов (25 для SMTP, 5060 для SIP) используют номер после символа двоеточие как номера TCP порта для установления соединения.

Маршрутизатор также проверяет доменную часть адреса, оканчивающуюся суффиксом `.relay`. Суффикс удаляется и получившееся доменное имя используется как конечное имя хоста (после изменения опционального разделителя имени порта на символ двоеточие).
Это имя домена (после удаления опционального имени порта и его разделителя) добавляется к локальному имени, используя символ `@` как разделитель.

Пример:
  Главный Домен Сервера `company.com`.
  Электронная почта и Сигналы для доменов `xxxx.department.company.com` (где xxxx может быть sales, marketing и так далее) должны быть отправлены на отдельные сервера, согласно A-записям в DNS, а адреса во всех других субдоменах company.com должны обрабатываться как адреса в Главном Домене, то есть адрес user@subdomain.company.com должен обрабатываться как адрес user@company.com.
  Вы можете реализовать такую маршрутизацию, используя следующие записи:
  *.sales.company.com = *.sales.company.com.relay ; явно релеить наружу
  *.company.com = company.com ; все остальные субдомены перенаправлять

## Маршрутизация в Приложения Реального Времени

Множество Сигналов (и в особенности телефонные звонки) должны обрабатываться "стандартными" или специальными Приложениями Реального Времени. Для направления Сигналов в Приложение вам необходимо указать имя Приложения и, отделённое символом решётка (`#`) имя Пользователя, которое будет использованно для запуска приложения:

Следующие записи направляют Сигналы, отправляемые на адрес someName@someDomain в приложение `myProgram`, запущенное от имени Пользователя `user@domain`:
  <someName@someDomain> = myProgram#user@domain

Вы можете указать параметры приложения, добавляя их после имени приложения вложенными в фигурные скобки `{` и `}` и разделяя их символом запятой (`,`).

Следующая запись направляет Сигналы, отправляемые на адрес someName@someDomain в приложение `myProgram`, запущенное от имени Пользователя `user@domain`. Программа запускается с двумя параметрами - "mixer" и "fast":
  <someName@someDomain> = myProgram{mixer,fast}#user@domain

Шаблоны подстановки в правой части записи Маршрутизатора подменяются до начала обработки, так что вы можете использовать значение шаблонов подстановки в качестве параметров приложения.

Следующая запись направляет Сигналы, отправляемые на адрес `+(20d)@someDomain` в приложение `myProgram`, запущенное от имени Пользователя `user@domain`. Программа запускается с параметром. Параметром является соединение строки `num=` и значения шаблона подстановки - телефонный номер без первого символа `+`:
  <+(20d)@someDomain> = myProgram{num=*}#user@domain

## Маршрутизация Телефонных Номеров

Если доменной частью адреса является `telnum`, локальная часть адреса обрабатывается как телефонный номер в стандарте E.164.

Маршрутизатор предпринимает следующие шаги до применения Таблицы Маршрутизации и других методов Маршрутизации:

- Маршрутизатор проверяет, назначен ли телефонный номер какому-нибудь Пользователю из какого-нибудь Домена CommuniGate Pro. Если такой пользователь найден, Сигналы перенаправляются этому Пользователю. Дополнительную информацию о Назначении Телефонных Номеров смотрите в разделе Пользователи.
- Маршрутизатор применяет методы ENUM Маршрутизации, используя все указанные Телефонные домены ENUM в DNS. В среде Динамического Кластера, сначала проверяются Общие для Сервера ENUM Домены, затем используются Общие для Кластера ENUM Домены.

Если телефонный номер не перенаправляется никаким из вышеуказанных методов, Маршрутизатор обрабатывает его как обычный адрес.

ENUM-Домены

Для того, что бы добавить ENUM Домен, введите его имя в пустое поле и нажмите кнопку Модифицировать.
Для того, что бы удалить ENUM Домен, удалите его имя из поля и нажмите кнопку Модифицировать.
Домены используются в определённом порядке.

Смотрите раздел ТфОП для дополнительной информации о работе с Телефонной Сетью Общего Пользования и маршрутизации телефонных номеров.

## Маршрутизация по IP адресу

После того, как применены все записи из Таблицы Маршрутизации, Маршрутизатор проверяет, не оканчивается ли в действительности имя домена IP адресом. Если IP адрес имени домена не заключён в квадратные скобки, Маршрутизатор добавляет их: `user@10.34.45.67` преобразовывается в `user@[10.34.45.67]`. Это позволяет вам указывать записи в Таблице Маршрутизации для IP адресов, полагая, что этот адрес всегда заключён в квадратные скобки.

Для IP адреса, заключённого в квадратные скобки, Маршрутизатор проверяет не назначён ли этот IP адрес одному из Доменов на Сервере. Если такой Домен найден, то IP адрес заменяется именем этого Домена. Если IP адрес является IP адресом Главного Домена Сервера, то вместо доменной части имени используется пустая строка, и Маршрутизатор делает следующую итерацию после разбора локальной части имени адреса.

Если IP адрес на назначен локальному Домену, Маршрутизатор обрабатывает имя домена `[10.34.45.67]` как имя `10.34.45.67.default_port.via`:
Маршрутизатор отправляет адрес в SIP или SMTP модуль, отрезая доменную часть и используя её как имя хоста для ретрансляции (релеинга).

## Маршрутизация через Модули

Если никакая запись из Таблицы Маршрутизации не может применена к адресу, и адрес не является специальным адресом или IP адресом локального домена, Маршрутизатор вызывает каждый коммуникационный модуль, запрашивая выполнение операции маршрутизации.

Каждый модуль смотрит на переданный адрес и может:

- игнорировать адрес если модуль не знает как его обрабатывать;
- изменить адрес (например, модуль LIST преобразовывает адрес `listname-admin@listdomain` в реальный адрес владельца списка рассылки);
- отвергнуть адрес (например, модуль Местной Доставки отвергает адреса `username@domainname`, если имя домена это имя локального домена, и Пользователь или Псевдоним с таким именем отсутствует в Домене);
- принять адрес.

Если модуль изменяет адрес, Маршрутизатор производит новую итерацию, повторяя все шаги для этого нового модифицированного адреса.

Если Маршрутизатор вызывается из компонента Установщик Сообщений в очередь, и модуль принимает адрес, сообщение ставиться в очередь в этот модуль на доставку.

Если Маршрутизатор вызывается из компонента Сигналы, и модуль принимает адрес, Сигнальный Запрос отправляется в этот модуль на обработку.

Каждый модуль вызывается дважды. Первый раз Маршрутизатор вызывает каждый модуль для обработки "очевидных" адресов. В этом вызове модули обрабатывают только те адреса, которые определённо направляются в этот модуль: SMTP модуль обрабатывает адреса с доменной частью, оканчивающейся на `.smtp`, LIST модуль обрабатывает адреса существующих списков рассылки и так далее.

Если все модули проигнорировали адрес, Маршрутизатор вызывает каждый модуль снова, с запросом на "финальную" попытку. На этой стадии, модуль Местной Доставки обрабатывает все адреса, направляемые в локальные домены, SIP модуль принимает все адреса типа сигналы, SMTP модуль обрабатывает все адреса с именами доменов, в которых содержится хотя бы одна точка и так далее.

Этот двухпроходной метод позволяет нескольким модулям корректно обрабатывать адреса, не полагаясь на определённый порядок вызова модулей. Если бы каждый модуль обрабатывал адрес в один проход, то адреса `listname@domainname` (которые выглядят как адреса локальных пользователей) отвергались бы модулем Местной Доставки, если бы он вызывался до LIST модуля, адреса `user@accountName.local` принимались бы SMTP модулем вместо модуля Местной Доставки и так далее.

Дополнительную информацию смотрите в описаниях модулей.

## Маршрутизация через Внешних Помощников

После того, как применены все записи из Таблицы Маршрутизации, Маршрутизатор проверяет, не оканчивается ли имя домена строкой `external`. В этом случае доменная часть отрезается, а локальная часть передаётся в программу Внешней Аутентификации.

Внешняя программа может использовать любой метод для обработки переданного адреса, и должна возвращать модифицированный адрес или код ошибки.

Если возвращается модифицированный адрес, Маршрутизатор осуществляет следующую итерацию с этим новым модифицированным адресом.

Пример:
  Сигналы на адреса, начинающиеся с `011` в любом локальном Домене должны маршрутизироваться внешней программой-помощником.
  Вы можете реализовать такую маршрутизацию, используя следующую запись:
  NoRelay:Signal:<011*@*> = tele-*@external ; маршрутизировать через внешнюю программу

  Если Сигнал отправляется на 0115556666@local.domain.dom, где local.domain.dom это локальный Домен, адрес будет перенаправлен на tele-5556666@external и Внешний Помощник получит запрос на маршрутизацию адреса tele-5556666.

## ENUM Маршрутизация

Маршрутизатор поддерживает базирующуюся на DNS маршрутизацию телефонных номеров. Это метод обычно применяется для E.164 номеров - телефонных номеров, начинающихся с символа плюс, за которым следует код страны, год города и местный номер.

Если доменное имя содержит суффикс `.enum`, то Маршрутизатор:

- в соответствии с RFC2916 отправит DNS NATPR запрос для номера в локальной части адреса, используя имя домена (без суффикса `.enum`) как суффикс поиска.
- обработает все полученные в ответ записи типа `E2U+SIP` для адресов типа Сигналы или E2U+EMAIL для других адресов.
- если будет найдена отображающая строка, начинающаяся с префикса `sip:`, `sips:` или `mailto:`, удалит префикс.

Маршрутизатор перезапускается, обрабатывая найденную отображающую строку как новый адрес места назначения.

Если поиск в DNS возвращает ошибку "unknown host name", суффикс домена `.enum` заменяется суффиксом `.noenum`, и Маршрутизатор перезапускается для обработки этого модифицированного адреса.

Пример:
  Записи в Маршрутизаторе:
  <+(d)@*> = +*@telnum ; прямой +номер в e164 домен "telnum"
  telnum = e164.arpa.enum ; прямой +номер в e164.arpa
  e164.arpa.noenum = pstn
  <+44*@pstn> = gatewaycaller{+44*}#pbx
  pstn = main.office.dom

  Адрес +14153837164@some.local.domain.dom будет обрабатываться по следующим шагам:
  - Первая запись в Маршрутизаторе преобразовывает этот адрес в `+14153837164@telnum`
  - Вторая запись в Маршрутизаторе преобразовывает этот адрес в `+14153837164@e164.arpa.enum`
  - Маршрутизатор ищет в DNS NAPTR запись `4.6.1.7.3.8.3.5.1.4.1.e164.arpa`
  - Найдена результирующая запись `sip:pbx@communigate.com`, удаляется префикс `sip:` и Маршрутизатор перезапускается для обработки адреса `pbx@communigate.com`

  Адрес +14155551212@some.local.domain.dom будет обрабатываться по следующим шагам:
  - Первая запись в Маршрутизаторе преобразовывает этот адрес в `+14155551212@telnum`
  - Вторая запись в Маршрутизаторе преобразовывает этот адрес в `+14155551212@e164.arpa.enum`
  - Маршрутизатор ищет в DNS NAPTR запись `2.1.2.1.5.5.5.5.1.4.1.e164.arpa`
  - Для этого имени домена не существует NAPTR записи; таким образом, адрес конвертируется в `+14155551212@e164.arpa.noenum` и Маршрутизатор перезапускается для обработки этого адреса
  - Третья запись Маршрутизатора преобразовывает адрес в `+14155551212@pstn` и Маршрутизатор перезапускается для обработки этого адреса
  - Четвертая запись в Маршрутизаторе перенаправляет все вызовы с кодом страны `+44` на локальное PBX приложение `gatewaycaller`, но эта запись не соответствует адресу `+14155551212@pstn`
  - Пятая запись в Маршрутизаторе перенаправляет этот адрес в `+14155551212@main.office.dom`; таким образом, Сигнал ретранслируется через сервер `main.office.dom`.

## Записи по умолчанию

Когда сервер устанавливается впервые, следующие записи помещаются в Таблицу Маршрутизации:

<root> = postmaster
  Эта запись перенаправляет всю электронную почту и Сигналы, отправляемые на имя `root`, на Пользователя postmaster.
  Это полезно на Unix системах, где множество протоколирующих утилит настроено на отправку отчётов по почте пользователю `root`.
localhost =
  На многих системах имя домена `localhost` используется для локального IP адреса системы, и некоторые почтовые программы используют это имя как имя домена.
  Эта запись преобразовывает адреса в домене "localhost" на адреса в главном домене сервера.
mailhost =
  Некоторые почтовые программы используют имя `mailhost` как имя домена локального почтового сервера.
  Эта запись преобразовывает такие адреса на адреса Пользователей в Главном Домене CommuniGate Pro.
<blacklist-admin*@blacklisted> = postmaster
  Эта запись реализует обработку Неблокируемых Адресов (Белых Дыр)для заблокированных хостов.
<\*(3-4d)@*> = voicemail#*
  Эта запись перенаправляет все Сигналы (звонки), отправляемые на адреса `*nnn` and `*nnnn` из любых локальных Доменов в приложение PBX Voicemail, запускаемое для Пользователя с Псевдонимом nnn.
<7(2d)@*> = pbx{*}#pbx
  Эта запись перенаправляет все Сигналы (вызовы), отправляемые на адрес `7nn` в любом локальном Домене а Пользователя pbx в этом же Домене.
  Эта запись Маршрутизатора необходима для реализации определённых функций поставляемого вместе с системой приложения PBX Центр.
<8(3d)@*> = pickup{*}#pbx
  Эта запись перенаправляет все Сигналы (вызовы), отправляемые на адрес `8nn` в любом локальном Домене а Пользователя pbx из этого же Домена и запускает приложение `pickup`. Приложение далее осуществляет маршрутизацию адрес nnn@callerDomain и "отвечает" на входящий звонок, ожидающий этого Пользователя.
  Дополнительную информацию смотрите в разделе Услуги PBX.
<+(8-20d)@*> = +*@telnum
  Эта запись перенаправляет все адреса `+nnnn...nn` в любом локальном Домене на фиктивный домен `telnum`.
Signal:telnum = pstn
  Эта запись перенаправляет все Сигналы (вызовы) отправляемые на фиктивный домен `telnum` на фиктивный домен `pstn`.
Signal:<*@pstn> = gatewaycaller{*}#pbx
  Эта запись перенаправляет все Сигналы (вызовы) отправляемые на фиктивный домен `pstn` на приложение `gatewaycaller`, запускаемое от имени Пользователя Главного Домена `pbx`.
  Телефонный номер (локальная часть адреса в домене `pstn`) передаётся приложению в качестве параметра.
Signal:<911@*> = emergency@localhost
  Эта запись перенаправляет все Сигналы (вызовы), отправляемые на адрес `911` в любом локальном Домене на имя `emergency` в домене `localhost` (это имя домена обычно направляется в Главный Домен).
Signal:<112@*> = emergency@localhost
  Эта запись перенаправляет все Сигналы (вызовы), отправляемые на адрес `112` в любом локальном Домене на имя `emergency` в домене `localhost` (это имя домена обычно направляется в Главный Домен).
Signal:<emergency> = emergency#pbx
  Эта запись перенаправляет все Сигналы (вызовы) отправляемые на адрес `emergency` в Главном Домене на приложение `emergency`, запускаемое от имени Пользователя Главного Домена `pbx`.
Signal:<(7d)@*> = localAreaCall{*}#pbx@localhost
  Эта запись перенаправляет все Сигналы (вызовы) отправляемые на семизначные номера в каждом локальном Домене на приложение `localAreaCall`, запускаемое от имени Пользователя Главного Домена `pbx`.
  Телефонный номер (локальная часть адреса) передаётся приложению в качестве параметра.

При необходимости, все записи, добавляемые по умолчанию, могут быть изменены или удалены.

## Дополнение Неквалифицированных Доменных Имен

Пользователи работающие на сайтах, которые имеют много различных Серверов (`server1.myorg.org`, `server2.myorg.org`, `server3.myorg.org`) часто используют адреса с неквалифицированными доменными именами (`user@server1`, `user@server2`, `user@server3`). Когда вы имеете несколько серверов на вашем домене "верхнего уровня" myorg.org, вы можете "исправлять" такие адреса, указав в Таблице записи:

server1 = server1.myorg.org
server2 = server2.myorg.org
server3 = server3.myorg.org

Если вы имеет много серверов в вашем домене "верхнего уровня" myorg.org, то становится практически невозможно указать в Таблице Маршрутизатора записи для них всех. В этом случае вы можете использовать опцию Добавлять `myorg.org` к Неквалифицированным Доменным Именам. Если эта опция включена, и адрес не может быть направлен используя Таблицу Маршрутизатора и Модули, и доменная часть адреса не содержит символа точка, то указанная строка `myorg.org` будет добавлена к доменному имени (разделённая символом точка). Адрес `user@someserver` будет преобразован в адрес `user@someserver.myorg.org` и Маршрутизатор попытается направить этот новый, исправленный адрес.

Обратите внимание: Использование Неквалифицированных Доменных Имен в адресах электронной почты или Сигналах является очень плохой практикой. Включите эту опцию только если вы не можете обеспечить выполнение вашими пользователями политики использования корректных, полных имен доменов во всех используемых ими адресах.

## Общедоменные Псевдонимы

Общедоменные Псевдонимы
Локальное Имя | Преобразовать в
--- | ---

Эта таблица позволяет вам указать псевдонимы, которые будут работать для всех локальных Доменов.

Эти записи проверяются когда Сервер CommuniGate Pro обнаруживает сообщение или сигнал, который должен быть направлен на некоторое имя в один из локальных доменов Сервера. Если локальная часть адреса совпадает с полем Локальное Имя в одной из этих записей, то адрес направляется на указанный в поле Преобразовать в.

Если, например, адреса `abuse` и `postmaster@maindomain.dom` введены в таблицу Общедоменные Псевдонимы (как показано выше), то все сообщения, направляемые на любой адрес `abuse@domain.dom` (где domain.com является одним из Доменов CommuniGate Pro) преобразовывается в `postmaster@maindomain.com`.

Обратите внимание: используя эти записи, можно очень легко создать зацикливание маршрутизации: если введете

  `postmaster -> postmaster@maindomain.dom`

в эту таблицу, вы создадите зацикливание (петлю), которое приведет к том, что зайти на Сервер пользователем `postmaster` будет невозможно. Если вы хотите, что бы электронная почта и Сигналы на все имена `postmaster` во всех Доменах CommuniGate Pro направлялась на пользователя postmaster в главном домене CommuniGate Pro, то вы должны использовать:

  `postmaster -> anyname@postmaster.local`

или, если включена опция Прямая адресация Папок:

  `postmaster -> mailboxName#postmaster`

Вы можете использовать символы шаблона подстановки (`*`) в этих полях.

Например, мы можете создать "правила набора номера" вашей организации, которая имеет 10 различных отделов, и каждый обслуживается в собственном Домене:

Общедоменные Псевдонимы
Локальное Имя | Преобразовать в
--- | ---

Если Пользователи в каждом Домене имеют псевдонимы в диапазоне `200-299`, то пользователи могут вызывать других пользователей в том же домене, набирая номер `2xx`.
Они набирают префикс `91` (номер `912xx`) для того, что бы связаться с пользователями в Домене domain1.com.
Они набирают префикс `92` для того, что бы связаться с пользователями в Домене domain2.com, и так далее.

## Таблица Маршрутизация Общая для Кластера

Динамический Кластер CommuniGate Pro обслуживает Таблицу Маршрутизации, Общую для Кластера. Когда вы открываете страницу Веб Администрирования Маршрутизатор у любого члена Кластера, то вы видите ссылку, с помощью который вы можете открыть страницу с Таблицей Маршрутизаци, Общей для Кластера. Все изменения, сделанные в этой Таблице, автоматически распространяются на всех членов Кластера.

Таблица Маршрутизации, Общая для Кластера обрабатывается как расширение Таблицы Маршрутизатора Сервера: записи в Таблице Маршрутизации, Общей для Кластера проверяются когда никакие записи из Таблицу Маршрутизатора Сервера не могут быть применены.

Руководство CommuniGate® Pro. Copyright © 1998-2009, Stalker Software, Inc.