URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93543
[ Назад ]

Исходное сообщение
"Exim. Как исключить домен из маршрутизации."

Отправлено zabrat , 06-Июл-12 13:56 
Здравствуйте. Прошу спецов помочь.
В Exim под Freebsd настроена маршрутизация

smarthost:
  driver = manualroute
  transport = remote_smtp
  domains = !+local_domains : !whost.ru : !wwhost.ru
  route_list = \
    * remote.smtp.ru;

т.е. все письма в зоне +local_domains (берется из СУБД) ходят локально, на внешние адреса, вся остальная почта, кроме whost.ru, wwhost.ru ходят через remote.smtp.ru. Все устраивало, но возникла необходимость один локальный хост вынести из этого правила, т.е. в базе +local_domains прописано два хоста lhost.ru и llhost.ru надо чтоб lhost.ru использовал роутер smarthost, а llhost.ru игнорировал его и при маршрутизации использовался только штатный dnslookup. Вот такая проблема.
пробовал

route_list = \
domains = +relay_domains  
lhost.ru remote.smtp.ru;

но если так, то  получается что вся почта с lhost.ru идет через remote.smtp.ru, в том числе и локальная(((
как исключить llhost.ru из отправки на remote.smtp.ru, при этом сохранить локальную маршрутизацию, ломаю голову третий день??    
  


Содержание

Сообщения в этом обсуждении
"Exim. Как исключить домен из маршрутизации."
Отправлено Евгений , 06-Июл-12 17:37 
>[оверквотинг удален]
> надо чтоб lhost.ru использовал роутер smarthost, а llhost.ru игнорировал его и
> при маршрутизации использовался только штатный dnslookup. Вот такая проблема.
> пробовал
> route_list = \
> domains = +relay_domains
> lhost.ru remote.smtp.ru;
> но если так, то  получается что вся почта с lhost.ru идет
> через remote.smtp.ru, в том числе и локальная(((
> как исключить llhost.ru из отправки на remote.smtp.ru, при этом сохранить локальную маршрутизацию,
> ломаю голову третий день??

Сделайте отдельный роутер сверху для нужного вам домена.


"Exim. Как исключить домен из маршрутизации."
Отправлено zabrat , 06-Июл-12 20:49 
> Сделайте отдельный роутер сверху для нужного вам домена.

Спасибо что откликнулись.

Я пробовал так (соответственно в начале маршрутизации прописывал):

smarthost:
  driver = manualroute
  transport = remote_smtp
  domains = +relay_domains
  route_list = \
    lhost.ru remote.smtp.ru;

так получается, что вся исходящая почта с lhost.ru идет через remote.smtp.ru, а остальные домены пропускаются, такой вариант бы устраивал, если бы прописать чтоб с @lhost.ru на @lhost.ru, т.е. локальная почта не ходила бы тоже через remote.smtp.ru, потому как удаленный smtp находится не близко, и если вся почта, в том числе и локальная начнет ходить через него, то канал забъется(.  

Или я что-то не так прописываю?


"Exim. Как исключить домен из маршрутизации."
Отправлено Bosh , 07-Июл-12 14:47 
smarthost:
  sender_domains = !lhost.ru
  driver = manualroute
  transport = remote_smtp
  domains = +relay_domains
  route_list = lhost.ru remote.smtp.ru;

>[оверквотинг удален]
>   domains = +relay_domains
>   route_list = \
>     lhost.ru remote.smtp.ru;
> так получается, что вся исходящая почта с lhost.ru идет через remote.smtp.ru, а
> остальные домены пропускаются, такой вариант бы устраивал, если бы прописать чтоб
> с @lhost.ru на @lhost.ru, т.е. локальная почта не ходила бы тоже
> через remote.smtp.ru, потому как удаленный smtp находится не близко, и если
> вся почта, в том числе и локальная начнет ходить через него,
> то канал забъется(.
> Или я что-то не так прописываю?


"Exim. Как исключить домен из маршрутизации."
Отправлено Bosh , 07-Июл-12 14:52 
Или

acl_smtp_rcpt:
set acl_c_sender_domain = $sender_domains

smarthost:
  condition = ${if !eq {$acl_c_sender_domain}{lhost.ru}}
  driver = manualroute
  transport = remote_smtp
  domains = +relay_domains
  route_list = \
    lhost.ru remote.smtp.ru;

>[оверквотинг удален]
>   domains = +relay_domains
>   route_list = \
>     lhost.ru remote.smtp.ru;
> так получается, что вся исходящая почта с lhost.ru идет через remote.smtp.ru, а
> остальные домены пропускаются, такой вариант бы устраивал, если бы прописать чтоб
> с @lhost.ru на @lhost.ru, т.е. локальная почта не ходила бы тоже
> через remote.smtp.ru, потому как удаленный smtp находится не близко, и если
> вся почта, в том числе и локальная начнет ходить через него,
> то канал забъется(.
> Или я что-то не так прописываю?


"Exim. Как исключить домен из маршрутизации."
Отправлено zabrat , 09-Июл-12 12:01 

> acl_smtp_rcpt:
> set acl_c_sender_domain = $sender_domains
> smarthost:
>   condition = ${if !eq {$acl_c_sender_domain}{lhost.ru}}
>   driver = manualroute
>   transport = remote_smtp
>   domains = +relay_domains
>   route_list = \
>     lhost.ru remote.smtp.ru;

Спасибо, но не получается предложенными вами способами отправить почту как надо. В первом случае sender_domains неизвестная команда пишет,
а во втором так же с lhost.ru на lhost.ru ходит через remote.smtp.ru(


"Exim. Как исключить домен из маршрутизации."
Отправлено tux2002 , 09-Июл-12 17:19 
>[оверквотинг удален]
>   domains = +relay_domains
>   route_list = \
>     lhost.ru remote.smtp.ru;
> так получается, что вся исходящая почта с lhost.ru идет через remote.smtp.ru, а
> остальные домены пропускаются, такой вариант бы устраивал, если бы прописать чтоб
> с @lhost.ru на @lhost.ru, т.е. локальная почта не ходила бы тоже
> через remote.smtp.ru, потому как удаленный smtp находится не близко, и если
> вся почта, в том числе и локальная начнет ходить через него,
> то канал забъется(.
> Или я что-то не так прописываю?

smarthost:
   driver = manualroute
   transport = remote_smtp
   domains = lhost.ru    !!!!!!!!!!!!!!!!!1
   route_list = \
     lhost.ru remote.smtp.ru;

Уж это наверняка сработает


"Exim. Как исключить домен из маршрутизации."
Отправлено zabrat , 09-Июл-12 22:35 
>  smarthost:
>    driver = manualroute
>    transport = remote_smtp
>    domains = lhost.ru    !!!!!!!!!!!!!!!!!1
>    route_list = \
>      lhost.ru remote.smtp.ru;
> Уж это наверняка сработает

Так будет работать

mail# exim -bt admin@lhost.ru admin@mail.ru
admin@lhost.ru
    <-- admin@lhost.ru
  router = smarthost, transport = remote_smtp
  host remote.smtp.ru [192.168.0.1]
admin@mail.ru
    <-- admin@mail.ru
  router = dnslookup, transport = remote_smtp
  host mxs.mail.ru [94.100.176.20]

или

mail# exim -bt admin@lhost.ru user@1host.ru
admin@lhost.ru
    <-- admin@lhost.ru
  router = smarthost, transport = remote_smtp
  host remote.smtp.ru [192.168.0.1]
user@1host.ru
    <-- user@1host.ru
  router = smarthost, transport = remote_smtp
  host remote.smtp.ru [192.168.0.1]

т.е. видно что локальная почта будет ходить через remote.smtp.ru
единственно что получилось на сегодня, это при конфиге

smarthost:
  driver = manualroute
# domains = +relay_to_domains
  domains = !+local_domains
  transport = remote_smtp
  route_list = * remote.smtp.ru;

получаем

mail# exim -bt admin@lhost.ru admin@mail.ru
admin@lhost.ru
    <-- admin@lhost.ru
  router = dovecot_user, transport = dovecot_delivery
admin@mail.ru
  router = smarthost, transport = remote_smtp
  host remote.smtp.ru [192.168.0.1]

или

mail# exim -bt admin@lhost.ru user@lhost.ru
admin@lhost.ru
    <-- admin@lhost.ru
  router = dovecot_user, transport = dovecot_delivery
user@lhost.ru
    <-- user@lhost.ru
   router = dovecot_user, transport = dovecot_delivery

т.е. локальная почта не покидает локальную сеть, тут все норм, но

mail# exim -bt admin@2host.ru admin@mail.ru
admin@2host.ru
    <-- admin@2host.ru
  router = dovecot_user, transport = dovecot_delivery
admin@mail.ru
    <-- admin@mail.ru
  router = smarthost, transport = remote_smtp
  host remote.smtp.ru [192.168.0.1]

такой вариант не устраивает, нужно чтоб

mail# exim -bt admin@2host.ru admin@mail.ru
admin@2host.ru
    <-- admin@2host.ru
  router = dovecot_user, transport = dovecot_delivery
    <-- admin@mail.ru
  router = dnslookup, transport = remote_smtp
  host mxs.mail.ru [94.100.176.20]

вообщем чтоб @1host.ru в мир через smarthost
            @2host.ru в мир через dnslookup
,а  @1host.ru на @1host.ru, @2host.ru и  обратно через dovecot_user

я уже не знаю... пробовал по разному, но...(((



"Exim. Как исключить домен из маршрутизации."
Отправлено tux2002 , 10-Июл-12 16:16 
      
> @2host.ru в мир через dnslookup
> ,а  @1host.ru на @1host.ru, @2host.ru и  обратно через dovecot_user
> я уже не знаю... пробовал по разному, но...(((

Я твою простынку не читал ;) но уж понятно пусть всё идёт серез dnslookup, а перед dnslookup поставь жёсткий роутер с domains = 1host.ru и no_more и что тебе нужно.


"Exim. Как исключить домен из маршрутизации."
Отправлено zabrat , 10-Июл-12 20:56 
> Я твою простынку не читал ;) но уж понятно пусть всё идёт
> серез dnslookup, а перед dnslookup поставь жёсткий роутер с domains =
> 1host.ru и no_more и что тебе нужно.

ну вообщем получилось как надо

smarthost:
  driver = manualroute
  domains = !+local_domains
  transport = remote_smtp
  condition = ${if match{$sender_address_domain}{1host.ru}{yes} {no}}
  route_list = * remote.smtp.ru;

локальная почта не покидает локальную сеть, в мир с 1host.ru через remote.smtp.ru, все остальные локальные хосты через dns, кстати через такой роутер можно любой локальный хост отправить в мир через свой удаленный smtp;)



"Exim. Как исключить домен из маршрутизации."
Отправлено Andrey Mitrofanov , 10-Июл-12 21:15 
> локальная почта не покидает локальную сеть, в мир с 1host.ru через remote.smtp.ru,
> все остальные локальные хосты через dns

В spec.txt это [почти] выглядит так:

hub_route:
  driver = manualroute
  transport = remote_smtp
  route_list = *.rhodes.tvs.example  $domain

В дебиановском exim4-config вот так:

# see exim4-config_files(5) and spec.txt chapter 20.3 through 20.7 for
# more detailed documentation.

hubbed_hosts:
  debug_print = "R: hubbed_hosts for $domain"
  driver = manualroute
  domains = "${if exists{CONFDIR/hubbed_hosts}\
                   {partial-lsearch;CONFDIR/hubbed_hosts}\
              fail}"
  same_domain_copy_routing = yes
  route_data = ${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}
  transport = remote_smtp


>, кстати через такой роутер можно
> любой локальный хост отправить в мир через свой удаленный smtp;)

Это называется smarthost. spec.txt:

smart_route:
  driver = manualroute
  domains = !+local_domains
  transport = remote_smtp
  route_list = * smarthost.ref.example


exim4-config:

smarthost:
  debug_print = "R: smarthost for $local_part@$domain"
  driver = manualroute
  domains = ! +local_domains
  transport = remote_smtp_smarthost
  route_list = * DCsmarthost byname
  host_find_failed = defer
  same_domain_copy_routing = yes
  no_more


Это если вдруг кому нечего почитать будет.