Страница 1 из 1

Exim и новый сервер

Добавлено: 2016-01-28 15:09:13
crush13
Всех приветствую! Ребят, стоит задача со старого сервера Exim переместить всех на новый сервер - внутренняя "организация Exchange" (когда всех пользователей переведут, данный сервер будет обновлён до более свежей версии ОС и самого Exim - сейчас стоит ASP Linux и Exim 4.72 - но не суть). Можно ли осуществить плавный перевод пользователей? т.е. с одним доменом чтобы работало два сервера: вижу это так - на сервер Exim из-вне приходит письмо: 1) если пользователь является локальным - письмо доставляется в его текущий ящик, 2) если пользователь отсутствует в локальной базе - пересылать письмо на ферму Exchange.
Как на Exchange сделать такую схему мы знаем - там создается специальный "коннектор", и если пользователь отсутствует в базе - письмо пересылается на сервер, указанный в "коннекторе".

Предполагаю, что это делается при помощи кастом-роутера, могли бы Вы помочь с его написанием? Если да, буду премного благодарен. Всех благ.

Exim и новый сервер

Добавлено: 2016-01-28 15:53:45
xM
crush13 писал(а): 1) если пользователь является локальным - письмо доставляется в его текущий ящик, 2) если пользователь отсутствует в локальной базе - пересылать письмо на ферму Exchange
см. Exim manualroute

Exim и новый сервер

Добавлено: 2016-01-29 13:52:27
crush13
xM писал(а): см. Exim manualroute
Спасибо за подсказку, после прочтения составил такой роутер:

Код: Выделить всё

temp_manual_router:
    driver = manualroute
    transport = remote_smtp
    route_list = example1.ru mail.example4.ru
и поставил его после локальной доставки, но конечно же он не работает, как хотелось бы. Exim смотрит в свою базу по данному домену (что естественно), если есть ящик, осуществляет доставку письма, если нет такого адреса в локальной базе - отправляет сообщение с ошибкой Unroutable address.

У нас на экзиме несколько доменов example1.ru example2.ru example3.ru + релей на example4.ru (exchange), и такие роутеры:

Код: Выделить всё

begin routers

#запрещаем отправку писем со старых отключённых доменов
block_outgoing_mail_from_domain:
    driver = redirect
    domains = ! +local_domains
    senders = *@lsearch;/etc/exim/blocked.domains
    allow_fail = yes
    data = :fail: You can not send emails from this mailbox, contact your support. (Rassilka pisem s dannogo yaschika zapreschena, obratites v OSPTK vashego filiala)

relay_to_our_domain:
    driver = "manualroute"
    route_data = ${lookup mysql{SELECT relay_name FROM mailertable WHERE domain='${domain}'}}
    transport = remote_smtp

dnslookup:
    driver = dnslookup
    domains = ! +local_domains
    transport = remote_smtp
    ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
    no_more

system_aliases:
    driver = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT recipients FROM aliases WHERE local_part='${local_part}' AND domain='${domain}'}}

userforward:
    driver = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT recipients FROM userforward WHERE local_part='${local_part}' AND domain='${domain}'}}

#доставка писем локальным пользователям
mysqluser:
    driver = accept
    condition = ${if eq{} {${lookup mysql{SELECT home FROM users WHERE login='${local_part}' AND domain='${domain}' AND active='Y'}}}{no}{yes}}
    transport = dovecot_delivery

#доставка на Exchange
temp_manual_router:
    driver = manualroute
    transport = remote_smtp
    route_list = example1.ru mail.example4.ru
На сервере mail.example4.ru - домен example4.ru (authoritative - что-то типа local в exim), и завели example1 (internal relay - если пользователь есть в базе Exchange - доставка осуществляется ему, если нет, то письмо переадресуется на другой сервер, в нашем случае на Exim). test1@example1.ru - пользователь exim и test2@example.ru - Exchange.

При таком раскладе получается:
1. Отправляем письма с exchange (адреса типа example4.ru) - письма доходят как до test1, так и до test2 так и на внешние адреса;
2. Отправляем письма с exim'овского адреса test1 на адреса внешние и test2 - на внешний адрес доставляется, на Exchange нет - Unroutable address;
3. Отправляем письмо извне на два адреса, test1@example1.ru (пользователь exim) и test2@example.ru (Exchange) : доставка осуществляется пользователю exim, для пользователя Exchange - Unroutable address.

Подскажите - в шары долблюсь, понять не могу. Если роутер поднять выше - то доставка на exim не осуществляется.

Отправлено спустя 42 минуты 2 секунды:
Правильно ли я понимаю, что нужно написать condition для этого роутера - поиск пользователя в локальной БД, если такого нет, то роутер запускается и выполняет пересылку письма?

Exim и новый сервер

Добавлено: 2016-01-29 14:24:28
xM
У мну два последних роутера

Код: Выделить всё

# --- local delivery
dovecot_user:
  driver        = accept
  condition     = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
                  `address`='${quote_mysql:$local_part@$domain}' OR \
                  `address`='${quote_mysql:@$domain}'}{yes}{no}}
  transport     = dovecot_delivery

# --- delivery for Google hosted domains
smart_router:
  driver        = manualroute
#  condition    = ${if !def:h_x-spam-flag:}
#  condition    = ${if !def:h_x-exim-spam:}
  domains       = +ghs_domains
  transport     = smart_smtp
   route_list    = * aspmx.l.google.com:alt1.aspmx.l.google.com:alt2.aspmx.l.google.com:aspmx2.googlemail.com:aspmx2.googlemail.com
smart_router исправьте исходя из ваших реалий.
В smart_smtp толко одна строчка типа

Код: Выделить всё

smart_smtp:
  driver                = smtp
Он у меня отличается от remote_smtp ввиду того, что в последнем ещё и DKIM с PRVS делаются.

Отправлено спустя 13 минут 39 секунд:
Я у вас бегло взглянув не вижу ошибок в роутерах Exim.
Посмотрите, может у вас Exchange отшивает?
Либо тупо не срабатывает последний роутер в силу каких-то причин. Протрассируйте.

Exim и новый сервер

Добавлено: 2016-01-29 14:46:44
crush13
УИИИИиииии! Спасибо, уважаемый xM, за помощь! Всё получилось, теперь письма ходят как надо. Сделал domainlist с доменами для миграции (выборка из sql - переезжать будут два домена), создал транспорт по аналогии с вашим smart_smtp (кстати в remote_smtp у меня тоже реализован DKIM), собрал всё в роутере и пошло.

Exim и новый сервер

Добавлено: 2016-01-29 22:10:11
xM
crush13 писал(а): Спасибо, уважаемый xM, за помощь!
Не надо оваций. ;-)