LINUX.ORG.RU
ФорумAdmin

Занимательный роутинг...


0

0

У меня не совсем стандартная задача, пока не смог додуматься самостоятельно как её реализовать. У меня есть шлюз на линукс, который смотрит в интернет, есть комп с виндой, на которой стоит система билинга, есть локалка, подключенная к шлюзу. Нужно чтобы инет трафик попадал на вход шлюза (не заходя внутрь), затем на комп с биллингом и только потом в локалку. И самое важное здесь это то чтобы внутренний интернет трафик шлюза тоже проходил через биллинг %)

В общем, меня бы спасло, если бы в таблице маршрутизации, для подбора маршрута можно было бы учитывать интерфейс источника. Но там такой возможности нету :(

Может как-то через iptables можно извернуться?

Ответ на: комментарий от zgen

А в какую хоть сторону рыть iproute2 ? В сторону tc? Я так понимаю в таблице роутинга при использовании ip route все равно не появится проверка исходного интерфейса?

navrocky
() автор топика
Ответ на: комментарий от hizel

Очень не хочется, чтобы винда обслуживала подключение к инету... и вообще реального компа на винде у меня судя по всему не будет, его роль будет исполнять virtualbox :)

navrocky
() автор топика
Ответ на: комментарий от hizel

Ну там прога шо пипец, делает всё, и фаервол и кэш и биллинг и пр. я не уверен что по netflow она сможет все это делать %) и особо с ней разбираться не хочется, хочется проэмулировать для нее окружающую среду.

navrocky
() автор топика
Ответ на: комментарий от true_admin

это только учет трафика, насколько я понял, а блокировка, ограничение скорости?

navrocky
() автор топика

в iptables есть правило -j ROUTE.
уиспользуя его можешь заворачивать трафик с селектором -i интерфейс_абонетнов на виндовый билинг.

на винде скорей всего необходимо будет поставить два интерфейса.
в один трафик будет приходить со шлюза, со второго трафик будет уходить обратно на шлюз по дефолтроуту.

на шлюзе с селектором -i интерфейс_от_винды форвардишь/снатишь.

только так

chocholl ★★
()
Ответ на: комментарий от chocholl

Спасибо, это похоже на то что мне надо. Попробую.

navrocky
() автор топика
Ответ на: комментарий от chocholl

Хм, нигде не нашел информации по этому действию "-j ROUTE", ман молчит, гугл тоже. Где почитать? и как узнать поддерживается ли это у меня?

navrocky
() автор топика
Ответ на: комментарий от navrocky

Нашел, что это можно доставить патчем от patch-o-matic-ng, блин, неохота ядро свое собирать :( А всё-таки нет ли возможности такой маршрут задать через ip route?

что-то типа:

ip route add default via [шлюз1] src [локалка1]

ip route add default via [шлюз2] src [локалка2]

navrocky
() автор топика
Ответ на: комментарий от navrocky

так тоже можно сделать. это еще один вариант.

но тогда винда должна натить, чтоб в двух правилах локалка1 отличалась от локалка2.
эти правила необходимо добавлять в разные таблицы маршрутизации, а потом селекторов по соурсу пихать трафик абонентов сначала в таблицу у которой дефолт смотрит на винду. дальше винда натит. и отправляет обратно. в свою очередь на шлюзе по соурсу локалка2 трафик отправляется во вторую таблицу маршрутизации, где по дефолту отправляется к провайдеру.

только не забудь про обратный трафик, он должен идти также.
придеться освоить пакет iproute2

chocholl ★★
()
Ответ на: комментарий от chocholl

Хех, так вот я не пойму как мне такой маршрут то задать? Ман по ip route никак не разберу. То что я писал выше не срабатывает, это плод моей фантазии :) не подскажешь как задать этот маршрут с условием, лучше примером ;)

еще не совсем понял, зачем натить, по идее пакет из локалки должен попадать на шлюз, затем с шлюза на внутренний интерфейс виндовой машины, с нее с внешнего интерфейса, опять на шлюз, и уже после этого на шлюзе маскарадиться в инет. Тут никаких NATов нету вроде, только маршруты.

navrocky
() автор топика
Ответ на: комментарий от navrocky

если с iproute2, то как-то так



ip route add default via WIN_IP1 table T1
ip rule add from ЛОКАЛЬНАЯ_СЕТЬ1 table T1

ip route add default via PROV_IP1 table T2
ip rule add from ЛОКАЛЬНАЯ_СЕТЬ2 table T2

ну и создать их в rt_tables (если не ошибаюсь с названием)

локальнаясеть1 - это реальные адреса пользователей.
локальнаясеть2 - это любые адреса, в которые натит винда.

дополнительный нат нужен, что разделить трафик на две таблицы.
подробности тут http://www.opennet.ru/docs/RUS/LARTC/

естественно должны быть static роуты для обратного трафика в локальнаясеть2.



или патчить ядро и использовать -j ROUTE

chocholl ★★
()

http://sourceforge.net/projects/xtables-addons
Там есть модуль TEE (делает то же, что когда-то делал модуль ROUTE:
iptables ... -j ROUTE --tee ):

   TEE
       The TEE target will clone a packet and redirect this clone  to  another
       machine  on the local network segment. In other words, the nexthop must
       be the target, or you will have to configure the nexthop to forward  it
       further if so desired.

       --gw ipaddr
              Send  the  cloned  packet  to the host reachable at the given IP
              address.  Use of 0.0.0.0 (for IPv4  packets)  or  ::  (IPv6)  is
              invalid.

Думаю это проще, чем реально пропускать весь трафик через биллинговый комп (извращаться с маршрутизацией и т.п.)

spirit ★★★★★
()
Ответ на: комментарий от navrocky

пс: и ман надо читать не по ip route, а просто по команде ip

chocholl ★★
()

И вообще, может есть возможность не пихать трафик на биллинговую тачилу, а отдавать только счётчики, или биллинг на столько суров ? :-)

spirit ★★★★★
()
Ответ на: комментарий от spirit

ну я думаю использовать все возможности билинговой проги. Щас пока перевариваю полученную информацию, но вроде мне должно хватить маршрутов с условием через ip route. Если что буду патчить ядро. Всем ответившим спасибо.

navrocky
() автор топика
Ответ на: комментарий от navrocky

В догонку: для xtables-addons патчить и пересобирать ядро/iptables не нужно

spirit ★★★★★
()
Ответ на: комментарий от spirit

Дык, мне же и нужно весь трафик пропускать через биллинг, он (биллинг), трафик будет ограничивать. И желательно чтобы потребление инет трафика самим шлюзом тоже было учтено, чтобы разрешать споры с провом.

navrocky
() автор топика

Я не совсем понял задачу. Есть ли в этой схеме NAT? Какие пакеты нужно отправлять на биллинг (прямо как пришли из кабеля провайдера или после обратного SNAT)? И как настроены клиенты (кто у них шлюз по умолчанию)?

А так пакеты можно маркировать в iptables (-j MARK 123) и потом "раскидывать" по разным таблицам маршрутизации "ip rule add fwmark 123 table XXX". Но если ip-адрес назначен на интерфейс, то его так просто не смаршрутизировать (см. вывод команды "ip rule show").

mky ★★★★★
()

А чего-то не догоняю. Если весь траф всё равно идёт через биллинг то почему бы его вместо твоего шлюза не поставить? В чём профит такого закольцовывания трафика?

true_admin ★★★★★
()
Ответ на: комментарий от navrocky

+1
>и фаервол и кэш и биллинг и пр.

Зачем вам тогда так жизненеобходим шлюз с linux? По-моему, проблема мегазакручена. Если хочется поиграться с linux+iproute, поставьте 2 компутера (шлюза, win&lin) последовательно.

>ip route add default via [шлюз1] src [локалка1]

>ip route add default via [шлюз2] src [локалка2]

смотрите man ip, про ip rule в частности.
google -> "linux anvadced routing and traffic control перевод"
раздел про маршрутизицию по источнику

markevichus ★★★
()

или тред о том, что детишки не освоили brctl + NAT... и таки да, гонять весь траф - это конечно сильно...

sda00 ★★★
()
Ответ на: комментарий от navrocky

Отвечу сразу всем :) Я бы конечно мог бы упростить задачу, но тут присутствует спортивный интерес, и плюс не вкайф ставить еще один физический комп, и абсолютно не прельщает подключение к инету настраивать под виндой с ее этими ярлыками на рабочем столе, и шлюз уже давно как работает, как часы. Вот и подумал впихнуть этот виндовый биллинг под виртуалкой, но надо чтобы трафик весь полностью учитывался, т.к. на шлюзе много чего крутится и жрет трафик.

Вроде для себя уже придумал, с вашей помощью, как эту ситуацию разрулить на маршрутах и фильтрации. Теперь вот думаю как виртуалбоксе поднять 2 интерфейса, там модуль ядра предоставляет только 1 интерфейс vboxnet0 и хз как второй создать.

navrocky
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.