CommuniGate Pro
Версия 6.4
 

Маршрутизатор

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

Когда Сервер обрабатывает полученное Сообщение, он извлекает информацию о получателях из "конверта" сообщения и решает, в очередь какого модуля должно быть помещено это сообщение, какому объекту модуль должен послать это сообщение, и какой адрес должен использоваться для доставки сообщения этому объекту. Подобные операции выполняются с Сигналами Реального Времени, приходящими из внешних источников или созданными внутренними компонентами сервера и предназначенными для локальных или внешних объектов.

Модули Доступа (такие, как 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 и Домен partners-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).


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

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

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

Уровень Журнала:
Добавлять к неквалифицированным доменным именам

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

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

Уровень Журнала
Используйте эту настройку для того, чтобы указать какую информацию Маршрутизатор CommuniGate Pro должен сохранять в Журнале работы Сервера. Обычно используется уровень Сбои (проблемы с маршрутизацией адресов). В случае, если в работе Маршрутизатора возникают проблемы, возможно, целесообразным будет увеличить детализацию до уровня Подробности или Всё: в этом случае в Журнал работы Сервера будет записываться подробная информация о работе Маршрутизатора. Записи, помещённые компонентом Маршрутизатор в Журнал работы Сервера, имеют пометку 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
этот адрес направляется в фиктивный внутренний модуль "Чёрная дыра".
Когда сообщение направляется в "Чёрную дыру", адрес сразу же получает отметку "доставлено", без какой-либо дальнейшей обработки.
Если в "Чёрную дыру" адресуется Сигнальный запрос, то он немедленно считается "доставленным" с генерацией ответа "200 ОК", если только запрос не был INVITE, UPDATE или OPTIONS: в этих случаях ответом на запрос будет 480 "No Address Found".
Пример:
<*@bad.company.com> = null
<junk> = null

С такими записями в Таблице Маршрутизации, Сервер выкинет всю почту, посылаемую в домен bad.company.com, так же, как и всю почту, отправляемую на адрес junk в Главном Домене.
MAILER-DAEMON, Calendar-Alarm
эти специальные адреса обрабатываются аналогично адресу null.
error
Почтовые сообщения и Сигналы, отправленные на этот адрес, отвергаются без обработки, создавая, однако, ответ/отчёт с ошибкой доставки. Если доменная часть имени адреса error, или если доменная часть пустая, а локальная часть error, адрес отвергается без обработки с генерацией ответа/отчёта с ошибкой доставки.
Пример:
bad.company.com = error
<junk> = error

Если введены такие строки, Сервер будет отвергать все сообщения электронной почты и Сигналы, отправляемые в домен bad.company.com или на адрес junk в Главном Домене.
blacklisted
Почтовые сообщения и Сигналы, отправленные на этот адрес, отвергаются без обработки, но с созданием ответа/отчёта с ошибкой "адрес в чёрном списке".
Дополнительную информацию смотрите в разделе Модуль SMTP.
spamtrap
Почтовые сообщения и Сигналы, отправленные на этот адрес, отвергаются без обработки, но модуль SMTP обрабатывает их особо. Дополнительную информацию смотрите в разделе Защита.
incomplete
Сигналы, отправляемые на такие адреса, отвергаются с сообщением об ошибке "Address Incomplete". Это может быть полезно для поддержки SIP клиентов, которые отправляют запрос INVITE ранее, чем был полностью набран номер.
Пример:
<(1-4d)@*> = incomplete
Когда введена такая запись, набор 1-, 2- или 3-х значных номеров будет возвращать клиенту код с ошибкой "Address Incomplete", заставляя его ждать дополнительного ввода от пользователя.
listserver
Почтовые сообщения на этот адрес передаются в Модуль LIST.
all
Почтовые сообщения на этот адрес рассылаются всем Пользователям Домена. Дополнительную информацию смотрите в разделе Домены.
alldomains
Почтовые сообщения на этот адрес рассылаются всем Пользователям всех Доменов. Дополнительную информацию смотрите в разделе Домены.

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

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

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

Если доменная часть имени заканчивается символами .here или ._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. Суффикс удаляется, имя домена считается хостом - конечным адресатом, а локальная часть адреса используется как адрес, который будет передан на этот хост.

Пример:
Именем Главного Домена Сервера является 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 ; все остальные субдомены перенаправлять

Обратите внимание: адреса в домене 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, XMPP и 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 ; все остальные субдомены перенаправлять

Маршрутизатор также проверяет доменную часть адреса, оканчивающуюся суффиксом ._dir. Суффикс обрабатывается аналогично суффиксу _via. Дополнительно сервер пытается прочитать запись из Справочника, используя dn, построенный из оригинального адреса и домена назначения в виде mail=user@domain, cn=host.com.
Если запись может быть прочитана (для этого может быть необходимо создать Удалённый Том для поддерева cn=host.com), результат обработки адреса принимается, иначе генерируется ошибка маршрутизации адреса.
Если используется суффикс в виде ._dis, то mail=user@domain используется в качестве фильтра поиска в поддереве Справочника cn=host.com.
Если попытка прочитать запись заканчивается ошибкой, связанной с невозможностью подсоединения к удалённому серверу, генерируемая ошибка маршрутизации имеет временный характер, так что внешние отправители по протоколу SMTP попытаются доставить по этому адресу позже.


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

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

Следующие записи направляют Сигналы, отправляемые на адрес 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, если domainname - это имя локального домена, и Пользователь или Псевдоним с именем username отсутствует в Домене);
  • принять адрес.

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

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

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

Каждый модуль вызывается дважды. Первый раз Маршрутизатор вызывает каждый модуль для обработки "явных" адресов. В этом вызове модули обрабатывают только те адреса, которые определённо направляются в этот модуль: модуль 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, и Маршрутизатор перезапускается для обработки этого модифицированного адреса.

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

Адрес +74992713154@some.local.domain.dom будет обрабатываться по следующим шагам:

  • Первая запись в Маршрутизаторе преобразовывает этот адрес в +74992713154@telnum
  • Вторая запись в Маршрутизаторе преобразовывает этот адрес в +74992713154@e164.arpa._enum
  • Маршрутизатор ищет в DNS NAPTR запись 4.5.1.3.1.7.2.9.9.4.7.e164.arpa
  • Найдена результирующая запись sip:pbx@communigate.ru, удаляется префикс sip:, и Маршрутизатор перезапускается для обработки адреса pbx@communigate.ru

Адрес +74992713152@some.local.domain.dom будет обрабатываться по следующим шагам:

  • Первая запись в Маршрутизаторе преобразовывает этот адрес в +74992713152@telnum
  • Вторая запись в Маршрутизаторе преобразовывает этот адрес в +74992713152@e164.arpa._enum
  • Маршрутизатор ищет в DNS NAPTR запись 2.5.1.3.1.7.2.9.9.4.7.e164.arpa
  • Для этого имени домена не существует NAPTR записи; таким образом, адрес конвертируется в +74992713152@e164.arpa._noenum, и Маршрутизатор перезапускается для обработки этого адреса
  • Третья запись Маршрутизатора преобразовывает адрес в +74992713152@pstn и Маршрутизатор перезапускается для обработки этого адреса
  • Четвёртая запись в Маршрутизаторе перенаправляет все вызовы с кодом страны +44 на локальное PBX приложение gatewaycaller, но эта запись не соответствует адресу +74992713152@pstn
  • Пятая запись в Маршрутизаторе перенаправляет этот адрес в +74992713152@main.office.dom; таким образом, Сигнал ретранслируется через сервер main.office.dom.

Маршрутизация tel: URI

URI вида tel:phoneNumber при разборе преобразуется в sip:phoneNumber@tel. Фиктивный домен tel обычно перенаправляется сразу в telnum для обобщённой обработки телефонных номеров.

При преобразовании URI из внутреннего представления, URI вида sip:phoneNumber@tel преобразуются в tel:phoneNumber.


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

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

<root> = postmaster
Эта запись перенаправляет всю электронную почту и Сигналы, адресованные на имя root, на Пользователя postmaster.
Это полезно на Unix системах, где множество протоколирующих утилит настроено на отправку отчётов по почте пользователю root.
localhost =
На многих системах имя домена localhost используется для локального адреса IP системы, и некоторые почтовые программы используют это имя как имя домена.
Эта запись преобразовывает адреса в домене "localhost" на адреса в главном домене сервера.
mailhost =
Некоторые почтовые программы используют имя mailhost как имя домена локального почтового сервера.
Эта запись преобразовывает такие адреса на адреса Пользователей в Главном Домене CommuniGate Pro.
<blacklist-admin*@blacklisted> = postmaster
для заблокированных хостов.Эта запись реализует обработку Неблокируемых Адресов (Белых Дыр)
<\*(3-4d)@*> = voicemail#*
Эта запись перенаправляет все Сигналы (вызовы), адресованные на номера вида *nnn и *nnnn из любых локальных Доменов в приложение PBX Voicemail, запускаемое для Пользователя с Псевдонимом nnn.
<7(2d)@*> = pbx{*}#pbx
Эта запись перенаправляет все Сигналы (вызовы), адресованные на номер 7nn в любом локальном Домене на Пользователя pbx в этом же Домене.
Эта запись Маршрутизатора необходима для реализации определённых функций поставляемого вместе с системой приложения PBX Центр.
<8(3d)@*> = pickup{*}#pbx
Эта запись перенаправляет все Сигналы (вызовы), адресованные на номера вида 8nn в любом локальном Домене а Пользователя pbx из этого же Домена и запускает приложение pickup. Приложение далее осуществляет маршрутизацию адреса nnn@callerDomain и "отвечает" на входящий звонок, ожидающий ответа этого Пользователя.
Дополнительную информацию смотрите в разделе Услуги PBX.
tel = telnum
Эта запись используется для обработки URI вида tel:phoneNumber (смотрите выше).
<+(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 © 2020-2023, АО СталкерСофт