Маршрутизатор
Этот раздел предназначен для опытных Администраторов. В большинстве случаев достаточно методов маршрутизации, применяемых по умолчанию. Вам необходимо ознакомиться с этим разделом, если ваш Сервер работает как релей (ретранслятор) сообщений или сигналов для других систем, или если вам необходимо использовать сложные схемы маршрутизации.
Когда Сервер обрабатывает полученное Сообщение, он извлекает информацию о получателях из "конверта" сообщения и решает, в очередь какого модуля должно быть помещено это сообщение, какому объекту модуль должен послать это сообщение, и какой адрес должен использоваться для доставки сообщения этому объекту. Подобные операции выполняются с Сигналами Реального Времени, приходящими из внешних источников или созданными внутренними компонентами сервера и предназначенными для локальных или внешних объектов.
Модули Доступа (такие, как 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, то адреса будут преобразованы следующим образом:
Адрес
локальная часть
доменная часть
Address | local part | domain part |
---|---|---|
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
Этому образцу соответствует любая строка видаsta_XXXXXX_r
, где 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
Этому образцу соответствует любая строка видаsta_XXX_r
, где XXX - любые три символа.Пример:
sta(4+d)r
Этому образцу соответствует любаяsta_DDDDD_r
строка, где DDDDD 4 или более десятичных цифр.Пример:
sta(3-5h)r
Этому образцу соответствует любаяsta_HHH_r
строка, где 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 Домен, удалите его имя из поля и нажмите кнопку Модифицировать.
Домены используются в определённом порядке.
Смотрите раздел ТфОП для дополнительной информации о работе с Телефонной Сетью Общего Пользования и маршрутизации телефонных номеров.
Маршрутизация по адресу 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@communigatepro.ru
, удаляется префиксsip:
, и Маршрутизатор перезапускается для обработки адресаpbx@communigatepro.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
Эта запись перенаправляет все Сигналы (вызовы), адресованные на номер
7_nn_
в любом локальном Домене на Пользователя pbx в этом же Домене.
Эта запись Маршрутизатора необходима для реализации определённых функций поставляемого вместе с системой приложения PBX Центр.<8(3d)@*> = pickup{*}#pbx
Эта запись перенаправляет все Сигналы (вызовы), адресованные на номера вида
8_nn_
в любом локальном Домене а Пользователя 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
(номер 912_xx_
) для того, чтобы связаться с пользователями в Домене domain1.com.
Они набирают префикс 92
для того, чтобы связаться с пользователями в Домене domain2.com, и так далее.
Общекластерная Таблица Маршрутизация
Динамический Кластер CommuniGate Pro обслуживает Общекластерную Таблицу Маршрутизации. Когда вы открываете страницу Веб Администрирования Маршрутизатор у любого члена Кластера, то вы видите ссылку, с помощью которой вы можете открыть страницу с Общекластерной Таблицей Маршрутизации. Все изменения, сделанные в этой Таблице, автоматически распространяются на все члены Кластера.
Общекластерная Таблица Маршрутизации обрабатывается как расширение Таблицы Маршрутизатора Сервера: записи в Общекластерной Таблице Маршрутизации проверяются, когда никакие записи из Таблицы Маршрутизатора Сервера не могут быть применены.