сетевая архитектура, выбор шлюза для tcp-соединения

grigori

( ͡° ͜ʖ ͡°)
Команда форума
сетевая архитектура, выбор шлюза для tcp-соединения

привет
у меня вопрос о том, как выбрать шлюз при исходяшем запросе

у меня такая сетевая архитектура:
в локалке есть сервер(ы) и 3 внешних канала (3 роутера), локалка за NAT, т.е. у сервера сейчас 1 сетевой интерфейс

задача:
мне надо выбирать канал для исходящих запросов - т.е. делать запрос через определенный роутер

CURL-у можно указать интерфейс для исходящего соединения.
Можно ли при исходящем запросе указать шлюз, отличный от того, что прописан в системе как дефолтный?
Или надо поднимать по интерфейсу на каждый канал?
 

dimagolov

Новичок
Я подобные приколы организовал на FreeBSD + PF. То, на какой внешний канал (фактически подменяя маршрутизацию ядра) я решаю по IP отправителя и протоколу (то есть порту получателя). В принципе, ничего не мешает решать по IP получателя в какой канал слать пакет.

-~{}~ 20.10.09 19:15:

Можно ли при исходящем запросе указать шлюз, отличный от того, что прописан в системе как дефолтный?
Или надо поднимать по интерфейсу на каждый канал?
шлюз PF может прописать какой захочешь. У тебя шлюзы вообще что из себя представляет и как в сеть включен?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
по сути, есть комп с виндой в офисе в Штатах, я могу на нем поднять апач и запустить веб-сервис или php-проксю
(скрипт, который параметром получает адрес и показывает содержимое запрашиваемого сайта)

он в локалке (10я подсеть) с 3мя роутерами, которые смотрят в другие сети
мне надо как-то получить доступ к тем сетям

по конечному IP я канал не определю - подсети совпадают (192.168.x.x), ip могут совпадать, только шлюзы различные
поэтому мне надо указать, через какой роутер отправлять запрос

-~{}~ 21.10.09 01:55:

да, я не могу просто менять гейт командой
route add -p 192.168.50.7 192.168.0.3

потому что шлюзом могут пользоваться несколько человек одновременно
 

dimagolov

Новичок
если комп с виндой, то вряд ли что сделаешь, кроме статических маршрутов на определенные сети. на уровне ядра ведь надо подменять в пакете маршрут. гугли, может есть какая тулза, фактически она должна подменять стандартный стек tcp/ip.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
надо глянуть WinRoute
вроде, он позволяет повесить несколько интерфейсов на одну карту
 

dimagolov

Новичок
grigori, несколько адресов на одну карту ты можешь поверить и так, стандартными средствами винды (аналог alias в *NIX). но в любой OS default route будет только один, а с определенного адреса будет уходить только при совпадении сети.

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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
по сути мне надо, чтобы в системе было несколько интерфейсов
я щас попробую подключиться по wifi и gprs одновременно
 

dimagolov

Новичок
С точки зрения маршрутизации абсолютно фиолетово у тебя один или несколько интерфейсов. главное, что на них висят адреса с масками из разных сетей. Если сеть получателя совпадает с маской какой-то сети, то пакет уходит с этого адреса. Аналогично происходит со статическими маршрутами на какие-то адреса, фактически для каждой сети прописывается свой маршрут в таблице маршрутизации. Если же не нашелся ни один подходящий маршрут, то пакет уходит на default route.

PF позволяет подменять роутер для пакета уже после того, как он прошел маршрутизацию
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>Если сеть получателя совпадает с маской какой-то сети
т.е. надо, чтобы ip получателей отличались от подсетей в моем компьютере, тогда я смогу выбирать интерфейс?
 

dimagolov

Новичок
нет, если адреса получателей не совпадают с подсетями в компе, и нету маршрута под этот адрес, то пойдет на default route
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
похоже, под XP даже не могу выбрать интерфейс для исходящего соединения

посмотрю, можно ли подменять gateway через iptables так, как это делается через PF

dimagolov
а какой командой ты под фрей подменял шлюз?
 

dimagolov

Новичок
шлюз меняю для конкретного пакета в PF: http://www.openbsd.org/faq/pf/pools.html. Там слегка более продвинуто, чем тебе нужно, но идея в использовании route-to. Хорошие статьи про прикручивание PF есть на Лисяре.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
спасибо, почитаю

-~{}~ 03.11.09 03:08:

я тут еще нашел такую фишку интересную ...
http://lartc.org/howto/lartc.rpdb.multiple-links.html
 

dimagolov

Новичок
grigori, там фишка в том, что таблиц маршрутизации не одна, а несколько. честно говоря с линуксом я не столь близок и о такой фишке не знал, а фря такого не умеет, насколько я в курсе.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ага, просто мне линукс ближе

-~{}~ 04.11.09 04:12:

с другой стороны, есть http://www.pfsense.org/ - фря, заточеная под роутинг, с веб-интерфейсом для большинства операций
весит 70 мб, хочет 128 памяти, идет в т.ч. готовой сборкой под vmware

-~{}~ 15.11.09 19:05:

я решил задачу на Linux

docs
http://lartc.org/howto/lartc.rpdb.html

1. создаю IP-алиасы на сетевой карте, например, 10.0.0.10
http://www.cyberciti.biz/faq/linux-creating-or-adding-new-network-alias-to-a-network-card-nic/

2. прописываю в /etc/iproute2/rt_tables дополнительные таблицы роутинга
#echo 200 router2 >> /etc/iproute2/rt_tables

3. Пакеты от 10.0.0.10 роутить по таблице router2
#ip rule add from 10.0.0.10 table router2

4. В таблице router2 gateway будет 10.0.0.101
#ip route add default via 10.0.0.101 dev eth0 table router2

5. Очистить кеш таблицы роутинга
#ip route flush cache

И всех делов ...
 
Сверху