Добрый день!Существует следующая схема:
1. Настроен KVM на хосте, настроена маршрутизация.
2. Настроена виртуальная машина на которой расположен сайт, IP серый.
3. Настроен почтовый сервер на другой виртуальной машине, IP серый.Когда тестрируем сайт на локальной машине, то с сайта почта уходит, соединение проходит нормально с почтовым сервером, но когда сайт находится на виртуальной машине, то Connection timed out, соединение с почтовым сервером не происходит.
Кто посоветует как продиагностировать и настроить правила iptables для этой ситуации.
Спасибо!
Диагностика для этой ситуации не отличается от диагностики файрволла и работы сети в любых других ситуациях.Для решения проблемы необходимо понимание работы сети и логика.
Инструменты: ifconfig, tcpdump, iptables, arp, sysctl.
> Диагностика для этой ситуации не отличается от диагностики файрволла и работы сети
> в любых других ситуациях.
> Для решения проблемы необходимо понимание работы сети и логика.
> Инструменты: ifconfig, tcpdump, iptables, arp, sysctl.Привет, может сумбурно написал, в общем у меня настроены следующие правила для форвардинга на smtp сервер
Код:
post-up iptables -t nat -A PREROUTING -p tcp -d x.x.x.x --dport 25 -j DNAT --to-destination y.y.y.y:25
post-up iptables -t filter -I FORWARD -p tcp --dport 25 -d y.y.y.y -j ACCEPTx.x.x.x - IP хоста с установленным KVM
y.y.y.y - серый IP виртуальной машины с почтовым сервером
z.z.z.z - серый IP виртуальной машины с сайтомКогда локально работаю над сайтом, соединение с почтовым сервером проходит нормально и почтовые сообщения отправляются (форма обратной связи на сайте). Но когда сайт деплою на сервер (виртульную машину с IP z.z.z.z), то соединение не проходит. Смотрел в сторону dnsmasq так как он стандартно с KVM идёт, но решение с ним не нашёл. Нужно правильно настроить форвардинг пакетов с z.z.z.z через x.x.x.x к y.y.y.y
Не зная серых апишников и плохо представляя что у тебя могу угадать, что направление на yyyy:25 должно ещё и SNATиться:
-A POSTROUTING -t nat -p tcp -d y.y.y.y --dport 25 -j SNAT --to-source x.x.x.x
> -A PREROUTING -p tcp -d x.x.x.x --dport 25 -j DNAT --to-destination
> y.y.y.y:25
> post-up iptables -t filter
> -I FORWARD -p tcp --dport 25 -d y.y.y.y -j ACCEPT
> Не зная серых апишников и плохо представляя что у тебя могу угадать,
> что направление на yyyy:25 должно ещё и SNATиться:
> -A POSTROUTING -t nat -p tcp -d y.y.y.y --dport 25 -j SNAT
> --to-source x.x.x.x
>> -A PREROUTING -p tcp -d x.x.x.x --dport 25 -j DNAT --to-destination
>> y.y.y.y:25
>> post-up iptables -t filter
>> -I FORWARD -p tcp --dport 25 -d y.y.y.y -j ACCEPTДоработал некоторые моменты.
1. Виртуальный сервер с настроенным веб сервером.
z.z.z.z - белый IP виртуальной машины с сайтом.
Настройки сети виртуальной машины
Код:
<interface type='bridge'>
</interface>
Настроено мостовое соединение. Напрямую выходит в интернет.Код:
inet z.z.z.z netmask 255.255.255.m broadcast z.z.z.x
2. Виртуальный сервер с почтовым серверомy.y.y.y - серый IP виртуальной машины с почтовым сервером (понял вашу идею, но они уже не в одной подсети)
Настройка сети виртуальной машины.
Код:
<interface type='network'>
<source network='default'/>В сети default настроет NAT
Код:
inet addr:192.168.y.y Bcast:192.168.y.x Mask:255.255.255.0
3. Хост с KVMНастройка iptables для почтового сервера (привожу правило только для отправки писем)
Цитата:
post-up iptables -t nat -A PREROUTING -p tcp -d x.x.x.x --dport 25 -j DNAT --to-destination y.y.y.y:25
post-up iptables -t filter -I FORWARD -p tcp --dport 25 -d y.y.y.y -j ACCEPT
Диагностика:
1. С вебсервера на почтовый сервер
└─> telnet domain.com 25
Trying y.y.y.y...
Не работает
2. С локальной машины на почтовый сервер
└─> telnet domain.com 25
220 domain.com ESMTP Postfix
Работает
3. На сетевом уровне по ICMP c вебсервера на почтовый
Код:
PING domain.com (y.y.y.y) 56(84) bytes of data.
64 bytes from domain.com (y.y.y.y): icmp_seq=1 ttl=64 time=0.087 msРаботает
4. Смотрим доходит telnet до почтового сервера. Отправляем запрос с вебсервера на почтовый сервер
Код:
└─> telnet domain.com 25
Trying y.y.y.y...Слушаем на почтовом сервере
Код:
tcpdump port 2510:31:53.279805 IP someinfo.com > y.y.y.y.smtp: Flags [S], seq 3840325252, win 29200, options [mss 1460,sackOK,TS val 3319511009 ecr 0,nop,wscale 7], length 0
Запрос на почтовый сервер уходит но не приходит ответ (значит флаг ACK не получает вебсервер, как этот момент отследить подробнее?).
>[оверквотинг удален]
>> что направление на yyyy:25 должно ещё и SNATиться:
>> -A POSTROUTING -t nat -p tcp -d y.y.y.y --dport 25 -j SNAT
>> --to-source x.x.x.x
>>> -A PREROUTING -p tcp -d x.x.x.x --dport 25 -j DNAT --to-destination
>>> y.y.y.y:25
>>> post-up iptables -t filter
>>> -I FORWARD -p tcp --dport 25 -d y.y.y.y -j ACCEPT
> Доработал некоторые моменты.
> y.y.y.y - серый IP виртуальной машины с почтовым сервером (понял вашу идею,
> но они уже не в одной подсети)Не знаю... В чем такая привлекательность выставлять вебсервер белым IP.
Накатанный путь виртуалки с серыми IP и с основной машины с белого IP проброс портов 25, 80. А так у тебя нетривиальная маршрутизация.
> Не знаю... В чем такая привлекательность выставлять вебсервер белым IP.
> Накатанный путь виртуалки с серыми IP и с основной машины с
> белого IP проброс портов 25, 80. А так у тебя
> нетривиальная маршрутизация.post-up iptables -t nat -A PREROUTING -p tcp -d x.x.x.x --dport 25 -j DNAT --to-destination y.y.y.y:25 - отрабатывает правильно
iptables -t nat -A POSTROUTING -p tcp -d y.y.y.y --dport 25 -j SNAT --to-source x.x.x.x - возможно здесь что-то не так
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 1 60 SNAT tcp -- * * 0.0.0.0/0 y.y.y.y tcp dpt:25 to:x.x.x.x
Но счётчик отработал.
>[оверквотинг удален]
> Цитата:
> post-up iptables -t nat -A PREROUTING -p tcp -d x.x.x.x --dport 25
> -j DNAT --to-destination y.y.y.y:25
> post-up iptables -t filter -I FORWARD -p tcp --dport 25 -d y.y.y.y
> -j ACCEPT
> Диагностика:
> 1. С вебсервера на почтовый сервер
> └─> telnet domain.com 25
> Trying y.y.y.y...
> Не работаетПусть вебсервер имеет второй интерфейс в одной сети с y.y.y.y
>[оверквотинг удален]
> Код:
> └─> telnet domain.com 25
> Trying y.y.y.y...
> Слушаем на почтовом сервере
> Код:
> tcpdump port 25
> 10:31:53.279805 IP someinfo.com > y.y.y.y.smtp: Flags [S], seq 3840325252, win 29200, options
> [mss 1460,sackOK,TS val 3319511009 ecr 0,nop,wscale 7], length 0
> Запрос на почтовый сервер уходит но не приходит ответ (значит флаг ACK
> не получает вебсервер, как этот момент отследить подробнее?).