Здравствуйте знатоки.Имеется сервак с двумя каналами в инет, на обоих настроен НАТ, прописаны близкие маршруты на каждого прова, подбит source routing:
iptables -t nat -A POSTROUTING -o FIRST_IF -j SNAT --to-source FIRST_IP
iptables -t nat -A POSTROUTING -o SECOND_IF -j SNAT --to-source SECOND_IPip route add FIRST_NET dev FIRST_IF src FIRST_I table FIRST
ip route add default via FIRST_GW table FIRST
ip rule add from FIRST_IP table FIRSTip route add SECOND_NET dev SECOND_IF src FIRST_I table SECOND
ip route add default via SECOND_GW table SECOND
ip rule add from SECOND_IP table SECONDВ принципе класика, все работает, все устраивает НО.
Понадобилось тут пробросить порт:
iptables -t nat -A POSTROUTING -p tcp -d FIRST_IP --dport PORT -j DNAT --to-destination SECOND_IP:PORT
Ну и как вы понимаете это не работает приходит с FIRST_IP на PORT перекидывается на SECOND_IP PORT и уходит через SECOND_ROUTE.
Вот и все, на этом мои познания закончины прошу помощи, КАК?
PS просьба троллинг вида, а че за порт, а зачем это надо и т.д. и т.п., вообщем все что не касается конструктивного решения проблемы не писать.
PPS на фре я это сделал так:
ipfw add № fwd SECOND_IP,PORT all from any to FIRST_IP PORT in via FIRST_IP
ipfw add № tee SECOND_NAT all from SECOND_IP PORT to any out
ipfw add № divert FIRST_NAT ip from NET to any out via FIRST_IP
ну как говорится, читаем мануалы внимательнейPOSTROUTING - исходящая цепочка, как понимаю нужно приходящий запрос направить на другую машину
>iptables -t nat -A POSTROUTING -p tcp -d FIRST_IP --dport PORT -j >DNAT --to-destination ECOND_IP:PORTiptables -t nat -A PREROUTING -p tcp -d FIRST_IP --dport PORT -j DNAT --to-destination IP-на_который отправляем_например_192.168.2.2
На правах автора:
http://www.opennet.me/openforum/vsluhforumID10/3679.html#4
Здравствуй, tetrisя тоже вроде не эксперт, но помочь постараюсь, поскольку успешно сделал когда-то подобную вещь.
Но есть некоторые замечания:
>ip route add SECOND_NET dev SECOND_IF src FIRST_I table SECOND
а не ошибка ли здесь с src FIRST_I?
Почему-то напрашивается src SECOND_I... (могу ошибаться - ещё не проснулся :-) )
>iptables -t nat -A POSTROUTING -p tcp -d FIRST_IP --dport PORT -j
>DNAT --to-destination SECOND_IP:PORTА вот здесь явно "не альо":
DNAT-преобразование выполняется в цепочке PREROUTING, а не POSTROUTING. В цепочке POSTROUTING выполяется SNAT-преобразование.
Теперь по сути проблемы:насколько я понял, необходимо пробросить порт с первого интерфейса на второй.
В этом случае вот что могу предложить:iptables -t nat -A PREROUTING -i FIRST_I -p tcp -d FIRST_IP --dport PORT -j DNAT --to-destination SECOND_IP:PORT
ip route add client_ip via FIRST_GW dev FIRST_I table SECOND
здесь client_ip - это адрес клиента, который должен подключаться к сервису; подставь сюда целый субнет, если надо
Только что реализовал эту схему и проверил - работает.
Недостаток этой схемы - привязка роутинга к конкретным IP клиентов :-(
С другими клиентами получится что пакеты с SECOND_IP пойдут по SECOND_I согласно с правиломip route add default via SECOND_GW table SECOND
Как реализовать эту схему для произвольных IP клиентов ещё не придумал, но попробую. Думаю, того что я написал здесь будет достаточно для продолжения поиска (у меня есть идея заюзать таблицу MANGLE и таргеты MARK (iptables -t mangle -A PREROUTING -i FIRST_I -s 0/0 -d FIRST_IP -p tcp --dport PORT -m mark --mark 1) плюс роутинг в стиле "ip rule add fwmark 1 table mark ; ip route add default via FIRST_GW dev FIRST_I table mark", но пока что не добился положительных результатов).
Есть ещё идея отказаться от кренделей в iptables/routing и организовать всё с помощью xinetd и его опции redirect для конкретного сервиса (не пробовал сам, но это стандартная фича и должна работать).
respect,
ronin
Всем большое спасибо :-)FOR PavelR
Попробую, ваше решение кажется наиболее вероятным, я пробовал MARK, но как я понял маркировка держется только до тех пор пока пакет не дош[о|ё]л до приложения, а потом увы :-(.
А как маркироват пакеты в бастионе до процесса выбора маршрута я не знаЛ.FOR ronin
По поводу ваших замечаний насчет не точностей, ДА вы правы copy past понимаете ЛИ :-)
А дальше увы, client_ip это 0.0.0.0/0 :-), то есть уже не покатит.xinetd можно конечно попробовать, но блин а если это там к примеру DNS, WEB или че то из этой же оперы.
>xinetd можно конечно попробовать, но блин а если это там к примеру
>DNS, WEB или че то из этой же оперы.Дык какая разница какой там сервис? Необходимо просто "пробросить сокет". xinetd это может.
Возможно, это не самое оптимальное решение, но поскольку лучшего на данный момент нету, то придтся юзать то что есть.
>я пробовал MARK, но как я понял маркировка держется только до тех пор пока пакет не дош[о|ё]л до приложения, а потом увыда, я тоже уперся рогами в это :-)
и, по ходу, не вижу никаких способов решить этоещё одна идея - навесить на SECOND_I дополнительный IP алиас, сконфигурить службу чтоб слушала на нём, и на основном IP, а тогда добавить третью таблицу маршрутизации для этого алиаса:
ip rule add from SECOND_ALIAS table SECOND_A
ip route add default via FIRST_GW dev FIRTS_I table SECOND_Aну, и DNAT-правило скорректировать на этот алиас
но тогда возникает вопрос: а не проще ли заставить саму службу слушать на обоих интерфейсах одновременно?
respect,
ronin
>[оверквотинг удален]
>ip route add default via FIRST_GW dev FIRTS_I table SECOND_A
>
>ну, и DNAT-правило скорректировать на этот алиас
>
>но тогда возникает вопрос: а не проще ли заставить саму службу слушать
>на обоих интерфейсах одновременно?
>
>
>respect,
>roninа я типа для галочки написал доку и ссылку на неё парой сообщений выше зря кинул ?
>а я типа для галочки написал доку и ссылку на неё парой
>сообщений выше зря кинул ?Ну, поленился я прочитать, каюсь :-)
Сейчас прочитал, согласен - CONNMARK --set-mark, CONNMARK --restore-mark - как раз то что надо.
respect,
ronin
>[оверквотинг удален]
>>сообщений выше зря кинул ?
>
>Ну, поленился я прочитать, каюсь :-)
>
>Сейчас прочитал, согласен - CONNMARK --set-mark, CONNMARK --restore-mark - как раз то
>что надо.
>
>
>respect,
>roninнаписать проблему - влом, прочитать то что дали - влом. Смените род деятельности. Хотя даже дворы подметать Вам будет влом.
Именно от пох-зма и "влом" и имеются национальные проблемы масштаба страны.
Все ждут пока за них проголосуют, выразят их мнение, разжуют и с ложечки покормят.
>
>написать проблему - влом, прочитать то что дали - влом. Смените род
>деятельности. Хотя даже дворы подметать Вам будет влом.
>
>Именно от пох-зма и "влом" и имеются национальные проблемы масштаба страны.
>
>
>Все ждут пока за них проголосуют, выразят их мнение, разжуют и с
>ложечки покормят.Попробую обьяснить. Когда я начал писать свой ответ, то ни Вашего ответа, ни предыдущего ещё не было. Пока я тут експериментировал и писал ответ прошло довольно много времени. Я увидел другие ответы только после того как отослал свой. Потому и ответы частично перекрываются, и оказалось что я "не в теме" :-) Это не из-за пох-зма и "влом".
респект,
ронин
Привет всем еще разокА вот скажите мне Господа что мне мешает НЕ использовать source routing так как он предлагается в LARTC, а воспользоватся только технологией с CONNMARK:
ТО ЕСТЬ ВМЕСТО
ip route add FIRST_NET dev FIRST_IF src FIRST_IP table FIRST
ip route add default via FIRST_GW table FIRST
ip rule add from FIRST_IP table FIRSTip route add SECOND_NET dev SECOND_IF src SECOND_IP table SECOND
ip route add default via SECOND_GW table SECOND
ip rule add from SECOND_IP table SECONDЮЗАЕМ
iptables -t mangle -A PREROUTING -i FIRST -j CONNMARK --set-mark 1
iptables -t mangle -A PREROUTING -i SECOND -j CONNMARK --set-mark 2
iptables -t mangle -A OUTPUT -j CONNMARK --restore-markip route add FIRST_NET dev FIRST_IF src FIRST_IP table FIRST
ip route add default via FIRST_GW table FIRSTip route add SECOND_NET dev SECOND_IF src SECOND_IP table SECOND
ip route add default via SECOND_GW table SECONDip rule add fwmark 1 table FIRST
ip rule add fwmark 2 table SECONDплюс с коробки избавляемся от проблем с DNAT'ом, что может вылезти при таком подходе?
>[оверквотинг удален]
>ip route add default via FIRST_GW table FIRST
>
>ip route add SECOND_NET dev SECOND_IF src SECOND_IP table SECOND
>ip route add default via SECOND_GW table SECOND
>
>ip rule add fwmark 1 table FIRST
>ip rule add fwmark 2 table SECOND
>
>плюс с коробки избавляемся от проблем с DNAT'ом, что может вылезти при
>таком подходе?Отсутствие правильной маршрутизации исходящих соединений.
И последнее для закрепления материала :-)ОЧЕНЬ хотелось бы узнать как отрабатывают правила в таблицах маршрутизации.
Поясню, к примеру такой набор правил:
from 192.168.0.0/24 lookup first
fwmark 1 lookup secondОднеркой маркируются ПРИ ОПРЕДЕЛЕННЫХ УСЛОВИЯХ узлы из 192.168.0.0/24
Получается, как бы это правельно выразится перекрытие правил. Какое правило в этом случае отработает?
>[оверквотинг удален]
>ОЧЕНЬ хотелось бы узнать как отрабатывают правила в таблицах маршрутизации.
>
>Поясню, к примеру такой набор правил:
>
>from 192.168.0.0/24 lookup first
>fwmark 1 lookup second
>
>Однеркой маркируются ПРИ ОПРЕДЕЛЕННЫХ УСЛОВИЯХ узлы из 192.168.0.0/24
>Получается, как бы это правельно выразится перекрытие правил. Какое правило в этом
>случае отработает?если бы вы хоть раз набрали
ip ru sh
то вы бы увидели там preferences
from 192.168.0.0/24 lookup first pref 100
fwmark 1 lookup second pref 110
PavelR можно же и без понтовУ меня ip rule show выдает:
from 192.168.0.0/24 lookup first
fwmark 1 lookup secondПро ВЕС правила я знаю меня интересует как все это разруливается если ВЕС не задан рукам, как то же он(ВЕС) раставляется.
Раз уж пошла такая пьянка у меняк вам PavelR будет еще парочка вопросов:
Повторю схему
iptables -t mangle -A PREROUTING -i FIRST -j CONNMARK --set-mark 1
iptables -t mangle -A PREROUTING -i SECOND -j CONNMARK --set-mark 2
iptables -t mangle -A OUTPUT -j CONNMARK --restore-markip route add FIRST_NET dev FIRST_IF src FIRST_IP table FIRST
ip route add default via FIRST_GW table FIRST
ip rule add from FIRST_IP table FIRSTip route add SECOND_NET dev SECOND_IF src SECOND_IP table SECOND
ip route add default via SECOND_GW table SECOND
ip rule add from SECOND_IP table SECONDip rule add fwmark 1 table FIRST
ip rule add fwmark 2 table SECONDiptables -t nat -A PREROUTING -p tcp -d FIRST_IP --dport PORT -j DNAT --to-destination SECOND_IP:PORT
Первая проблема FIRST_IP и SECOND_IP это с внешки, а есть еще LAN_RANGE, и вот когда мы с LAN_RANGE пингуем/конектимся к FIRST_IP или к SECOND_IP, то пакеты из-за правил:
ip rule add from FIRST_IP table FIRST
ip rule add from SECOND_IP table SECONDобламываются, естественно LAN_RANGE ответки не получит.
То есть это не проблема добавляем правила на LAN_RANGE и все работает:ip rule add from FIRST_IP/SECOND_IP to LAN_RANGE table main
Но это нюанс который отнял у меня пол часа времени.
Вторая проблема это тот же DNAT, то есть source routing работает и CONNMARK тоже, а вот:
iptables -t nat -A PREROUTING -p tcp -d FIRST_IP --dport PORT -j DNAT --to-destination SECOND_IP:PORT
Уже нет :-(, такое впечатление что обратка от DNAT'а идет мима SNAT, то есть.
Цепляюсь с внешки на FIRST_IP PORT и на серваке запускаю tcpdump на интерфейсе FIRST_IFACE, получается такая картина:tcpdump на FIRST_IFACE
....
xxx.xxx.xxx.xxx > FIRST_IP
xxx.xxx.xxx.xxx > FIRST_IP
xxx.xxx.xxx.xxx > FIRST_IP
SECOND_IP > xxx.xxx.xxx.xxx
SECOND_IP > xxx.xxx.xxx.xxx
SECOND_IP > xxx.xxx.xxx.xxx
....SNAT
iptables -t nat -A POSTROUTING -o FIRST_IFACE -j SNAT --to-source FIRST_IP
iptables -t nat -A POSTROUTING -o SECOND_IFACE -j SNAT --to-source SECOND_IPВообщем я уже немного закипаю, нужна помощ
>PavelR можно же и без понтов
>
>У меня ip rule show выдает:
>
>from 192.168.0.0/24 lookup first
>fwmark 1 lookup secondУ меня выдает:
ch:~# ip ru sh
0: from all lookup local
2000: from xx.204.yy.0/20 lookup z1
2010: from xx.204.yy.0/20 lookup z1
2020: from xx.140.yy.0/20 lookup z1
32766: from all lookup main
32767: from all lookup defaultПервый столбец - префы.
задаются так
/sbin/ip ru add from xx.204.yy.0/20 lookup z1 pref 2000
/sbin/ip ru add from xx.204.yy.0/22 lookup z1 pref 2010
/sbin/ip ru add from xx.140.yy.0/20 lookup z1 pref 2020>[оверквотинг удален]
>Про ВЕС правила я знаю меня интересует как все это разруливается если
>ВЕС не задан рукам, как то же он(ВЕС) раставляется.
>
>Раз уж пошла такая пьянка у меняк вам PavelR будет еще парочка
>вопросов:
>
>Повторю схему
>Первая проблема FIRST_IP и SECOND_IP это с внешки, а есть еще LAN_RANGE,
>и вот когда мы с LAN_RANGE пингуем/конектимся к FIRST_IP или к
>SECOND_IP, то пакеты из-за правил:..
>Но это нюанс который отнял у меня пол часа времени.Известная проблема. Лечится организацией схемы так:
ch:~# ip ru sh
0: from all lookup local
1000: from all lookup main
2000: from xx.204.yy.0/20 lookup z1
2010: from xx.204.yy.0/20 lookup z1
2020: from xx.140.yy.0/20 lookup z1
32766: from all lookup main
32767: from all lookup defaultдобавляем 1000 правило.
затем:
ip ro del default table mainи вносим его в table default
все внутренние подсетки прописываем в main.
// да, лучше наоборот, сначала добавить в default а потом удалить из main.ну, так сказать стандартные правила игры с рутерами )
>[оверквотинг удален]
>SECOND_IP > xxx.xxx.xxx.xxx
>SECOND_IP > xxx.xxx.xxx.xxx
>SECOND_IP > xxx.xxx.xxx.xxx
> ....
>
>SNAT
>iptables -t nat -A POSTROUTING -o FIRST_IFACE -j SNAT --to-source FIRST_IP
>iptables -t nat -A POSTROUTING -o SECOND_IFACE -j SNAT --to-source SECOND_IP
>
>Вообщем я уже немного закипаю, нужна помощAFAIK DNAT и SNAT никак не связаны в обработке. Посмотрите статейку, которую я писал и кидал ссылку на её копию в сообщении форума. Там описана схема: маркировки входящих пакетов, восстановление маркера и всё такое. Схема работоспособна. проверена и используется.
просто маладца -- с таким опытом пора готовить серьёзную доку в wiki.opennet.ru -- я готов помочь(но думаю что она не понадобиться)
>просто маладца -- с таким опытом пора готовить серьёзную доку в wiki.opennet.ru
>-- я готов помочь(но думаю что она не понадобиться)Да как-то мертвенько смотрится и вика,
и советы (в советах - не всегда грамотные советы, да и оформлены они в виде списка команд которые выполнить надо, без пояснения "почему так" и что делать если не так)
а в статьях фиг чего найдешь.ИМХО.
// отправил на сайт свой текст по поводу "два провайдера и проброс соединений к сервисам, расположенным в локальной сети" - вот я хз где его теперь тут искать :))
И это при том, что я знаю что он точно тут есть )
>[оверквотинг удален]
>а в статьях фиг чего найдешь.
>
>ИМХО.
>
>// отправил на сайт свой текст по поводу "два провайдера и проброс
>соединений к сервисам, расположенным в локальной сети" - вот я хз
>где его теперь тут искать :))
>
>И это при том, что я знаю что он точно тут есть
>)to Максим Чирков
ждём подтверждения и ссылку если текст удобен для размещения на ресурсе
>соединений к сервисам, расположенным в локальной сети" - вот я хз
>где его теперь тут искать :))Matrix has you, натурально. :)) Искать тут:
google.ru + "к сервисам, расположенным в локальной сети" site:opennet.ru + ENTER>И это при том, что я знаю что он точно тут есть
>)
>[оверквотинг удален]
>>где его теперь тут искать :))
>
>Matrix has you, натурально. :)) Искать тут:
>google.ru + "к сервисам, расположенным в локальной сети" site:opennet.ru + ENTER
>
>>И это при том, что я знаю что он точно тут есть
>>)
>
>http://www.opennet.me/tips/info/1651.shtml
>Не оно?Ага, оно.
Замечание:Открываем http://www.opennet.me/tips/info/1651.shtml
внизу статьи навигационная полоса:
Раздел: Корень / Администратору / Сетевая подсистема, маршрутизация / Туннелинг, VPN, VLAN
переходим в http://www.opennet.me/tips/sml/84.shtml (Туннелинг, VPN, VLAN) - там его нетА вот на уровень выше, в (Сетевая подсистема, маршрутизация ) http://www.opennet.me/tips/sml/62.shtml
есть...Неправильный раздел.. Глюк ?