LINUX.ORG.RU
ФорумAdmin

Роутинг в Linux и FreeBSD


0

0

Не флейма ради, а для личностного развития. Есть задачка - два провайдера с разными внешними IP висят на интерфейсах. Есть рутер на фре или линуксе. Требуется сделать проброс с обоих интерфейсов на внутреннюю машину так, чтобы исходящие пакеты уходили на тот канал, через который пришёл запрос. Как это сделать на фре понятно. Можно ли подобное реализовать на Линуксовом гейте? Смысл в том, что есть некоторой сервис, работу через который надо вести с клиентскими машинами в инете через разных провайдеров одновременно. Недопустимо, чтобы исходящие пакеты летели через маршрут по-умолчанию.

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

http://linux-ip.net/html/routing-tables.html#ftn.id2551950

> Linux kernel 2.2 and 2.4 support multiple routing tables [22]. Beyond the two commonly used routing tables (the local and main routing tables), the kernel supports up to 252 additional routing tables.

>[22] The kernel must be compiled with the option CONFIG_IP_MULTIPLE_TABLES=y. This is common in vendor and stock kernels, both 2.2 and 2.4.

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

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

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

А стоп.

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

Тут по идее достаточно простого DNAT со шлюза на сервер, а при преобразовании ответа в цепочке SNAT iptables сам разрулит через какой интерфейс слать ответ клиенту.

Т.е. достаточно указать на шлюзе что-то типа iptables -t nat -A PREROUTING -d $GATE_INET_IP --dport $PORT -p tcp -m tcp -j DNAT --to-destination $LOCAL_SRV_IP

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

вот трабла то в том, что он в таком варианте гонит все исходящие пакеты через дефолт

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

Ну так работать то это будет только с подсетками которые на интерфейсах.

похоже, единственный вариант - привязывать конкретные внешние ip на конкретные внешние интерфейсы...

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

там можно сделать все, что угодно.
точного синтаксиса уже не помню но как-то так

ip rule add from .. lookup to table2 <- тут даже конкретные порты можно указывать или flhtcf


ip route add .../.. gw ... table table2

читай ман, там все есть

chocholl ★★
()

inet -> DNAT -> internal host -> NAT -> !!source based routing!! -> inet

по-моему так. man ip должно быть реализуемо средствами iptables, но это как одноколесный велосипед. Вроде и велосипед, но как-то что-то не так

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

> А силами iptables этого, выходит, не сделать?
Если заведёте "iptables -j ROUTE" (а на 2.4.x ядрах оно хорошо заводится) - получится сделать.

Ещё такое делается через CONNMARK и маршрутизацию:
http://routeskeeper.sourceforge.net/Routeskeeper/MultihomingWithLinux.html
Суть:
1) создаём по таблице (ip route add table XXX) с единственным default маршрутом, для каждого провайдера;
2) в mangle PREROUTING с помощью CONNMARK маркируем/восстанавливаем_маркировку соединения на основе входящего интерфейса (провайдера);
3) добавляем правила маршрутизации, отправляющие пакет маршрутизироваться на основе маркировок в ту или иную таблицу (см. пункт 1).
Для транзитного трафика такое работать будет.

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

в итоге на внутренней машине просто два айпишника на интерфейс и проброс с каждого из провов на соответствующий отдельный айпи. Работает РедХат 9, спасибо, Фряху удалили.

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

А почему в статье по ссылке маркировка происходит в цепочки POSTROUTING ???? не понятно.

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