URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 88491
[ Назад ]

Исходное сообщение
"IPTABLES, DNAT, multiroute"

Отправлено InventoRs , 23-Мрт-10 15:44 
Есть gateway, задача такая, при обращении на внешний порт, пробрасывать его на внутренний сервер.
Написали так:
IPTABLES -t nat -A PREROUTING -i IN_INET1 -p tcp --dport 1005 -j DNAT --to-destination 192.168.0.60:1010
IPTABLES -t nat -A POSTROUTING -d 192.168.0.60 -j SNAT --to-source IP_GW_SERV

IPTABLES -t filter -A FORWARD -d 192.168.0.60 -i IN_INET1 -o LAN_IN -p tcp --dport 1010 -j ACCEPT

Такая комбинация работает, если default route лежит через интерфейс IN_INET1

Но у нас несколько входящих каналов.
Просто дублируем правила и получается что так, входящие пакеты работают только на том интерфейсе где default route


Содержание

Сообщения в этом обсуждении
"IPTABLES, DNAT, multiroute"
Отправлено Andrey Mitrofanov , 23-Мрт-10 15:57 
>Но у нас несколько входящих каналов.

http://opennet.ru/tips/info/2009.shtml


"IPTABLES, DNAT, multiroute"
Отправлено ALex_hha , 23-Мрт-10 23:51 
>>Но у нас несколько входящих каналов.
>
>http://opennet.ru/tips/info/2009.shtml

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


"IPTABLES, DNAT, multiroute"
Отправлено PavelR , 24-Мрт-10 06:05 
>>>Но у нас несколько входящих каналов.
>>
>>http://opennet.ru/tips/info/2009.shtml
>
>не будет оно работать, уходить то всегда будет через дефолт, единственное решение
>насколько знаю, это создание промежуточных шлюзов с соответствующей маршрутизацией

http://www.opennet.me/tips/info/1651.shtml

У внутреннего сервера, на который осуществляется проброс, должен быть либо один интерфейс и один шлюз, на котором настраивается трекинг соединений с привязкой (маркировкой) соединения к интерфейсу/провайдеру,

либо на самом сервере есть несколько интерфейсов, и тогда маркировку соединений следует делать уже на нём. Если необходимо, то на вышестоящих, по отношению к серверу,  маршрутизаторах делается проброс портов. Маркировка соединений тем не менее, делается на самом сервере, и на нем же определяется, какому вышестоящему маршрутизатору отмаршрутизировать ответ.  Читайте http://www.opennet.me/tips/info/1651.shtml .


"IPTABLES, DNAT, multiroute"
Отправлено ALex_hha , 24-Мрт-10 12:04 
Я имел ввиду эту реализацию

Два шлюза в Интернет и NAT

http://www.xgu.ru/wiki/%D0%94%D0%B2%...

            GW1   GW2
             *     *
             |     |
         IP1 |     | IP2
      [eth3] |     | [eth4]
            +-------+
            |       |
            |  gw   |
            |       |
            +-------+
    10.0.3.250  |  10.0.3.254
        [eth1]  |  [eth2]
                |
                |
    10.0.3.249  |  10.0.3.253
      [eth1.1]  |  [eth2.1]
            +-------+
            |       |
            |  pgw  |
            |       |
            +-------+
                | 10.0.3.6
                | [eth0]
                |

Вот только вопрос, можно ли в таком случае gw и pgw размещать на одной физической машине?


"IPTABLES, DNAT, multiroute"
Отправлено PavelR , 24-Мрт-10 15:08 
>Я имел ввиду эту реализацию
>
>Два шлюза в Интернет и NAT
>
>http://www.xgu.ru/wiki/%D0%94%D0%B2%...
>
>Вот только вопрос, можно ли в таком случае gw и pgw размещать
>на одной физической машине?

мм, сходу не понятно, какие порты с каких адресов куда (на какой адрес) пробрасываются.

As for me, можно пробросить с маршрутизатора с тремя интерфейсами (два внешних и один внутренний) во внутреннюю сетку без проблем, с использованием маркировки соединений на этом самом маршрутизаторе и без использования дополнительных маршрутизаторов, о чем можно почитать в заметке по ссылке в моем сообщении выше.


"IPTABLES, DNAT, multiroute"
Отправлено InventoRs , 24-Мрт-10 22:20 
Что-то у меня так и не получается сделать желаемое.
Задача пробросить порт внутрь локальной сети и ответ вернуть по тому же каналу с которого пришел
Делаю так:

iptables -t nat -A PREROUTING -i eth1 -p tcp -j CONNMARK --set-mark 0x1
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 1005 -j DNAT --to-destination 192.168.0.50:1010
iptables -t nat -A PREROUTING -i eth2 -p tcp -j CONNMARK --set-mark 0x2
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 1005 -j DNAT --to-destination 192.168.0.50:1010
iptables -t nat -A PREROUTING -i eth3 -p tcp -j CONNMARK --set-mark 0x3
iptables -t nat -A PREROUTING -i eth3 -p tcp --dport 1005 -j DNAT --to-destination 192.168.0.50:1010

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth3 -j MASQUERADE

iptables -t nat -A POSTROUTING -d 192.168.0.50 -j SNAT --to-source 192.168.0.20

iptables -t mangle -A OUTPUT -s 192.168.0.8 -j CONNMARK --restore-mark

ip rule add fwmark 0x1 table prov1
ip rule add fwmark 0x2 table prov2
ip rule add fwmark 0x3 table prov3

ip route add default via 194.185.159.55 table prov1
ip route add default via 125.124.141.35 table prov2
ip route add default via 133.135.131.151 table prov3

Все равно пакеты идут только там где default route


"IPTABLES, DNAT, multiroute"
Отправлено ALex_hha , 25-Мрт-10 00:19 
# ip route flush cache

выполнял?

> iptables -t nat -A POSTROUTING -d 192.168.0.50 -j SNAT --to-source 192.168.0.20\

а зачем это правило?


"IPTABLES, DNAT, multiroute"
Отправлено PavelR , 25-Мрт-10 09:27 
>[оверквотинг удален]
>Делаю так:
>ip rule add fwmark 0x1 table prov1
>ip rule add fwmark 0x2 table prov2
>ip rule add fwmark 0x3 table prov3
>
>ip route add default via 194.185.159.55 table prov1
>ip route add default via 125.124.141.35 table prov2
>ip route add default via 133.135.131.151 table prov3
>
>Все равно пакеты идут только там где default route

Пока вы не будете проверять, как выполняются команды, и к каким результатам, к каким изменениям в конфигурации, они приводят - ничего у вас так и не получится.

Статью вы так и не осилили прочитать.

А там много раз было приведено - "ip ru sh".

Читайте еще раз.


"IPTABLES, DNAT, multiroute"
Отправлено InventoRs , 25-Мрт-10 22:43 
Уже несколько раз перечитать статью, и много других.
Уже пошел другим способом.
Все по минимуму.

iptables -t nat -A PREROUTING -p tcp  --dport 1005 -d $my_inet_ip -j CONNMARK --set-mark 2
iptables -t nat -A PREROUTING -p tcp -d my_inet_ip --dport 1005 -j DNAT --to-destination 192.168.0.60:1010

from all fwmark 0x2 lookup T1
ip route add default via $prov_gate table T1

iptables -t nat -A POSTROUTING -o $inet_interface -j MASQUERADE

И все равно в упор коннект из вне на порт 1005 никчему не приводит.

Еще и руководство сверху давит когда закончу.
Помогите плиз, разжуйте неуку.


"IPTABLES, DNAT, multiroute"
Отправлено Ермаков Александр , 05-Май-11 14:53 
Всё у вас правильно, ошибочна только эта строчка
> iptables -t mangle -A OUTPUT -s 192.168.0.8 -j CONNMARK --restore-mark

Правильно будет

iptables -t mangle -A PREROUTING -s 192.168.0.8 -j CONNMARK --restore-mark

потому что метка соединения должна быть восстановлена до совершения роутинга.