[ok]
Подскажите, кто настраивал маршрутизацию под линуксом.
Есть сервер (почтовик и шлюз в интернет) на asplinux (дистр выбирал не я). К нему подключили второй канал. Задача - пустить NAT из локалки через этот второй канал, а соединение самого сервера (почтовика) с интернетом оставить на прежнем канале.
Получается, нужно сделать маршрутизацию через разные каналы в зависимости от источника.
В разных howto под ядром 2.4 это решается просто - ip rule add from xxx.xxx.xxx.xxxx nat yyy.yyy.yyy.yyy
Но с ядром 2.6 теперь он пишет "route NAT is deprecated".
Просто с помощью route нельзя сделать зависимость от источника.
На форумах советуют не париться и использовать для настройки iptables, но у меня не работает действие -j ROUTE
возвращает ошибку iptables v1.3.5: Couldn't load target `ROUTE':/lib/iptables/libipt_ROUTE.so
(этого файла там действительно нет)
Исходников ядра (и текущего конфига) в этой сборке нет. Качать исходники, писать конфиг и пересобирать пока опасаюсь. Есть ли способ настроить такую маршрутизацию с помощью iproute2, или тут без пересборки ядра не обойтись?
Подскажите, кто настраивал маршрутизацию под линуксом.
Есть сервер (почтовик и шлюз в интернет) на asplinux (дистр выбирал не я). К нему подключили второй канал. Задача - пустить NAT из локалки через этот второй канал, а соединение самого сервера (почтовика) с интернетом оставить на прежнем канале.
Получается, нужно сделать маршрутизацию через разные каналы в зависимости от источника.
В разных howto под ядром 2.4 это решается просто - ip rule add from xxx.xxx.xxx.xxxx nat yyy.yyy.yyy.yyy
Но с ядром 2.6 теперь он пишет "route NAT is deprecated".
Просто с помощью route нельзя сделать зависимость от источника.
На форумах советуют не париться и использовать для настройки iptables, но у меня не работает действие -j ROUTE
возвращает ошибку iptables v1.3.5: Couldn't load target `ROUTE':/lib/iptables/libipt_ROUTE.so
(этого файла там действительно нет)
Исходников ядра (и текущего конфига) в этой сборке нет. Качать исходники, писать конфиг и пересобирать пока опасаюсь. Есть ли способ настроить такую маршрутизацию с помощью iproute2, или тут без пересборки ядра не обойтись?
-
-
10.12.2008 в 13:04-
-
10.12.2008 в 13:05-
-
10.12.2008 в 13:10-
-
10.12.2008 в 13:12-
-
10.12.2008 в 13:15адрес переписывает таргет айпитейблс (SNAT или MASQUERADE), его никуда никто не убирал и не уберёт. дальше пакет с переписанным адресом должен уйти на шлюз.
блин. вообще ничего не нужно же. просто переписывай адреса на тот интерфейс, который смотрит в новый канал и всё.
пример показать, или понял?
-
-
10.12.2008 в 13:21в айпитейблс там есть правило:
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j SNAT --to-source xxx.xxx.(тут айпишник шлюза)
eth0 - соотв. интерфейс в инет. eth1 - в локалку. eth2 - к новому прову
я добавил правило
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth2 -j SNAT --to-source yyy.yyy.(тут второй айпишник шлюза)
и включил
ip rule add from 192.168.0.0/24 table MGTS
при этом в таблице MGTS (второй пров) записано -
ip route add default via zzz.zzz(тут шлюз от второго айпишника) dev eth2 table MGTS
Не работает
-
-
10.12.2008 в 13:33короче, сносишь все таблицы роутинга, вообще не трогаешь айпирут, ставишь шлюзом по умолчанию адрес гв старого канала. далее #iptables -t nat -A POSTROUTING -j SNAT --to-source
если я ничего не путаю, это всё что тебе нужно, потому что в цепочку POSTROUTING не попадают пакеты от самого хоста, только идущие транзитом. соответственно, их адрес будет переписан на адрес в новой сети и они уйдут на...
а, чёрт, нет, теперь нужно сказать куда их посылать.
ну короче, дальше с помощью айпирута делаешь правило типа "все пакеты с адреса такого-то роутить на такой-то шлюз".
должно работать.
попробую сделать так сам вечером есичо.
-
-
10.12.2008 в 14:28-
-
10.12.2008 в 15:561.
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j SNAT --to-source xxx.xxx
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth2 -j SNAT --to-source yyy.yyy
второе правило не поймает ни одного пакета, потому что сфигали -o eth2? у тебя дефолтный шлюз на eth0, туда пакеты и заворачиваются.
2.
ip rule add from 192.168.0.0/24 table MGTS
есть мнение, что это правило также работать не будет, потому что к этому времени в пакетах адрес отправителя уже переписан.
Если же наоборот, то действительно непонятно почему не работает. таблицу FILTER покажи чтоли.
-
-
10.12.2008 в 16:12а фильтр там большой, да и не в нём дело, судя по всему
-
-
10.12.2008 в 16:28ну так потом же было добавлено:
ip route add default via zzz.zzz(тут шлюз от второго айпишника) dev eth2 table MGTS
что происходит в каком порядке
так вот ведь - iptables-tutorial.frozentux.net/chunkyhtml/imag...
-
-
10.12.2008 в 16:48ну значит что у нас получается.
1. прежде всего необходимо убедиться что в фильтре нет правил, дропающих нужный трафик. (например вида !eth0).
2. очевидно нас интересует нижный routing decision -- собственно само решение должно приниматься на основе правил айпирута.
3. после этого в таблице нат мы переписываем адреса только тех пакетов, которые пришли из локалки.
в принципе это у тебя и было. должно работать, отлаживай. убей всё лишнее для начала, типа первого правила SNAT (влиять оно ни на что не должно, но создаёт информационный мусор).
-
-
10.12.2008 в 17:06-
-
11.12.2008 в 21:34после выполнения команды
ip route add default via 62..(тут адрес второго шлюза) dev eth2 table MGTS
пропадает как интернет так и связь с сервером через SSH. Почему??? ведь я из внутренней сети к sshd подключаюсь, т.е. ничего рутить он не должен. даже если правило написано неверно, на связь с сервером из локалки это влиять не должно
-
-
11.12.2008 в 21:54tcpdump -i eth2 показал, что в этом случае сервер пытается слать ответные пакеты клиентам в локалке именно через eth2
не понимаю, почему. он же должен их не маршрутизировать, а слать напрямую с интерфейса eth1 (который смотрит в 192.168.0.0)
-
-
11.12.2008 в 23:57короче, покажи вывод ip route show table MGTS
-
-
12.12.2008 в 12:26default via 62...(ип шлюза) dev eth2
по ходу кроме default туда надо ещё и маршрут в 192.168.0.0/24 добавить
я чё-та думал что он из таблицы main возьмётся
-
-
12.12.2008 в 12:28-
-
12.12.2008 в 13:12Это я понимаю. Говорю же - ступил и подумал, что возьмётся запись из таблицы main, а оказалось он её скипит.
-
-
12.12.2008 в 13:17-
-
12.12.2008 в 13:22-
-
12.12.2008 в 13:24-
-
12.12.2008 в 17:34-
-
12.12.2008 в 17:46-
-
12.12.2008 в 18:19-
-
12.12.2008 в 18:43-
-
12.12.2008 в 18:56-
-
12.12.2008 в 19:38-
-
12.12.2008 в 19:44ну то есть можно, но тогда надо про это помнить
-
-
12.12.2008 в 20:04