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

Исходное сообщение
"маршрутизация через iproute2, пакет уходит с ошибочным SRC IP"

Отправлено SVLD , 05-Июл-09 03:40 
Классика жанра:
- два провайдера
- один маршрут дефолтный, другой для "других нужд" отстроен по технологии set-mark/fwmark

Понадобилось SIP пробросить через второй инет (не дефолтный), делаю:
- в iptables -t nat PREROUTING завожу правило -s SIP_SERVER -j MARK --set-mark 0x2
- соответсвенно довожу до "ума" через ip ro add default IF_ISP2 via GW_ISP2 table ISP2
   плюс ip ru add fwmark 0x2 table ISP2

всё вроде хорошо, но почемуто именно с от SIP_SERVER пакеты пробрасываясь через IF_ISP2 по непонятной мне причине имеют исходящий IP равный  моему адресу для ISP1 !!!

т.е. бывает при перезагрузке всё работает нормально, а бывает клинит :(

нарисую ещё разок фигурально:
------как есть (неправильно)--------
IP IP_ISP1.5080 > SIPNET.5060: SIP (исходящий пакет с интерфейса IF_ISP2)
ну и тишина... ибо IP_ISP1 у провайдера ISP2 конечно не валиден
------как должно быть (правильно)---
IP IP_ISP2.5080 > SIPNET.5060: SIP
IP SIPNET.5060 > IP_ISP2.5080: SIP
... и т.д.

люди добрые, помогите, а?


Содержание

Сообщения в этом обсуждении
"маршрутизация через iproute2, пакет уходит с ошибочным SRC I..."
Отправлено PavelR , 05-Июл-09 11:03 
Потому что:

1. вы не смотрите на правила файрволла в комплексе
2. вы не смотрите на правила маршрутизации и таблицы маршрутизации в комплексе.
3. потому что вы не объединяете правила и таблицы маршрутизации в единую картину с правилами файрволла.


резюмирую:

iptables -nvL
iptables -nvL -t nat
iptables -nvL -t mangle

ip ru sh
ip ro sh table main
ip ro sh table default
ip ro sh table ISP1
ip ro sh table ISP2


"маршрутизация через iproute2, пакет уходит с ошибочным SRC I..."
Отправлено SVLD , 05-Июл-09 17:57 
ну это предложение слишком общее, меня скорее интересует как увидеть причину по которой исходящий пакет имеет неверный адрес.

дело в том, что у меня есть ряд компьютеров, для которых в -t mangle PREROUTING стоит правило -s IP_PC -j MARK --set-mark и эти компьютеры абсолютно спокойно ходят через ISP2

делаю небольшую поправку (сначала не заметил): SIP-сервер находится от локалки (в которой часть компов ходит через ISP1, часть через ISP2) через сервер (назавем его PC_GW), который эти пакеты от SIP NAT-ит, имея две сетевухи - одна смотрит в локалку, другая в сетку с SIP-ом.

что интересно, генерируя пакет netcat-ом на PC_GW (UDP,dport=5060,dst=sipnet.ru) пакет доходит до основного шлюза и выходит в свет через IF_ISP2 с адресом IP_ISP2, но если пакет такойже приходит от SIP, NAT-ится PC_GW в его локальный IP (на стороне основного шлюза он 1:1 как и сгенерированный netcat-ом), но почемуто уходит через IF_ISP2 с адресом IP_ISP1


"маршрутизация через iproute2, пакет уходит с ошибочным SRC I..."
Отправлено PavelR , 05-Июл-09 19:10 
>ну это предложение слишком общее, меня скорее интересует как увидеть причину по
>которой исходящий пакет имеет неверный адрес.

повторить еще раз, как смотреть причину ?


"маршрутизация через iproute2, пакет уходит с ошибочным SRC I..."
Отправлено SVLD , 06-Июл-09 00:30 
>повторить еще раз, как смотреть причину ?

ну например команда ip r g 212.53.40.40
говорит мне, что всё правильно:
212.53.40.40 via GW_ISP2 dev eth1.307  src IP_ISP2 <----- вот один из этапов проверки
    cache  mtu 1500 advmss 1460 hoplimit 64

какими инструментами проследить "решения" системы об исходящем интерфейсе?


"маршрутизация через iproute2, пакет уходит с ошибочным SRC I..."
Отправлено SVLD , 06-Июл-09 01:11 
тема закрыта, нет сил разбираться, НО каким-то непостяжимым образом вся загвоздка оказалась в порту 5080... поменял на сервере на 5081, скоррестировал правила - и всё работает наура!

убивал такой ньюанс - пакет доходил до цепочки -t mangle POSTROUTING, но в -t nat POSTROUTING он таинственным образом исчезал 8-(


"маршрутизация через iproute2, пакет уходит с ошибочным SRC I..."
Отправлено PavelR , 06-Июл-09 09:50 
>тема закрыта, нет сил разбираться, НО каким-то непостяжимым образом вся загвоздка оказалась
>в порту 5080... поменял на сервере на 5081, скоррестировал правила -
>и всё работает наура!
>
>убивал такой ньюанс - пакет доходил до цепочки -t mangle POSTROUTING, но
>в -t nat POSTROUTING он таинственным образом исчезал 8-(

lsmod |grep sip


"маршрутизация через iproute2, пакет уходит с ошибочным SRC I..."
Отправлено SVLD , 06-Июл-09 11:30 
>lsmod |grep sip

была такая мысль :) думал хелпер перехватывает, а нет - пусто