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

  • Автор темы Автор темы grigori
  • Дата начала Дата начала

grigori

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

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

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

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

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

-~{}~ 20.10.09 19:15:

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

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

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

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

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

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

-~{}~ 03.11.09 03:08:

я тут еще нашел такую фишку интересную ...
http://lartc.org/howto/lartc.rpdb.multiple-links.html
 
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

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