Перейти к содержимому
Калькуляторы

iptables хочется странного

Всем привет, вопрос знатокам iptables.

Хочется следующее:

есть 2 NAT сервера, на которых настроен one-to-one NAT.

Хочется чтобы траффик изходящий ходил через один нат, а приходил через другой(т.к. NAT one-to-one он поидее должен тупо натить по таблице своей), роутинг прописал на маршрутизаторах чтобы траффик проходил ассиметрично, но почему то ничего не выходит. Если весь трафик пустить через один NAT то все ОК.

 

В iptables я слаб.

 

 

ВОт конфиг NATA:

*mangle

:PREROUTING ACCEPT [10906:1649208]

:INPUT ACCEPT [1483:111227]

:FORWARD ACCEPT [6017:1182375]

:OUTPUT ACCEPT [1473:844306]

:POSTROUTING ACCEPT [7490:2026681]

COMMIT

# Completed on Fri Feb 18 21:47:55 2011

# Generated by iptables-save v1.3.5 on Fri Feb 18 21:47:55 2011

*nat

:PREROUTING ACCEPT [3387:354418]

:POSTROUTING ACCEPT [59:5165]

:OUTPUT ACCEPT [53:4877]

-A PREROUTING -d EXTERNALIP -i eth1.16 -j DNAT --to-destination INTERNALIP

-A POSTROUTING -s INTERNALIP -o eth1.16 -j SNAT --to-source EXTERNALIP

COMMIT

# Completed on Fri Feb 18 21:47:55 2011

# Generated by iptables-save v1.3.5 on Fri Feb 18 21:47:55 2011

*filter

:INPUT ACCEPT [1487:111431]

:FORWARD ACCEPT [2280:134892]

:OUTPUT ACCEPT [1478:848946]

COMMIT

# Completed on Fri Feb 18 21:47:55 2011

 

 

 

ICMP проходит а остально нет, т.е. как я понял UDP ходит а TCP нет.

Как быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SNAT и DNAT это stateful-фичи, пробуйте ip route nat и ip rule nat

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SNAT и DNAT это stateful-фичи, пробуйте ip route nat и ip rule nat
Спасибо, но неужели если по умолчаюнию все разрешено в FORWARD то он все равно блочит пакеты?

Очень хочется заставить iptables пропускать такие пакеты.

Кто знает как еще можено реализовать такую схему?

Изменено пользователем tsolodov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пробовал сделать такую же штуку на pf+pfsync. Не получилось. Забил.

 

Поиск в Гугле применительно к Линуксу выдаёт следующие ссылки:

 

http://www.spinics.net/lists/netfilter/msg48595.html

[ANNOUNCE] conntrack-tools 0.9.15 released

"... The daemon that allows to synchronize states between firewalls ..."

 

http://www.spinics.net/lists/netfilter/msg31218.html

Stateless NAT

 

http://linux-ip.net/html/nat-stateless.html

5.3. Stateless NAT with iproute2

5.4. Stateless NAT and Packet Filtering

 

Приятного просмотра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SNAT и DNAT это stateful-фичи, пробуйте ip route nat и ip rule nat
Спасибо, но неужели если по умолчаюнию все разрешено в FORWARD то он все равно блочит пакеты?

Очень хочется заставить iptables пропускать такие пакеты.

Дело в том, что до FORWARD пакеты просто не доходят, потому что на стадии "определение состояний"(см. картинку к этому посту) второй NAT-сервер(на который приходят пакеты в обратном направлении) не имеет в своей таблице xlat соответсвующей записи и поэтому не подсказывает процессу маршрутизации, что этот пакет нужно forward'ить, а не отправлять локальному приложению.

 

Собственно, Ilya Evseev предлагает использовать conntrackd с помощью которого можно синхронизировать таблицу трансляций между серверами. Звучит красиво конечно, но надо тестить на предмет производительности при большом кол-ве сессий. С первого взгляда, это больше решение уровня предпрития(чтобы сделать failover без сброса сессий), а не оператора. Сам давно хотел попробовать эту фишку, но никак руки не доходят, да и производственной необходимости нет, чисто академический интерес.

 

Кто знает как еще можено реализовать такую схему?

На этот вопрос уже прозвучал ответ - использовать ip rule+ip route. В вашем случае это лучше с точки зрения производительности, т.к. использовать stateful nat для реализации чисто stateless задачи это разбазаривание ресурсов.

400px_Netfilter_diagram_rus.png

Изменено пользователем s.lobanov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

-A PREROUTING -d EXTERNALIP -i eth1.16 -j DNAT --to-destination INTERNALIP

-A POSTROUTING -s INTERNALIP -o eth1.16 -j SNAT --to-source EXTERNALIP

имхо тут какая-то фигня написана, вы у каждого пакета меняете и src и dst одновременно. В итоге о "клиенте" не остается вообще никакой информации.

 

без полного описания задачи не понятно что вам конкретно надо, могу предположить, что для "входящего" трафика надо делать DNAT, для "исходящего" (на другом боксе) - SNAT.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

-A PREROUTING -d EXTERNALIP -i eth1.16 -j DNAT --to-destination INTERNALIP

-A POSTROUTING -s INTERNALIP -o eth1.16 -j SNAT --to-source EXTERNALIP

имхо тут какая-то фигня написана, вы у каждого пакета меняете и src и dst одновременно. В итоге о "клиенте" не остается вообще никакой информации.

Не фигня, обратите внимание на -i eth1.16 и -o eth1.16. Этими правилами классифицируются разные пакеты. Мало того, как написано в 1ом посте, это всё работает, если оно живёт на одном сервере.

 

без полного описания задачи не понятно что вам конкретно надо, могу предположить, что для "входящего" трафика надо делать DNAT, для "исходящего" (на другом боксе) - SNAT.
А всё равно не будет работать. Почему - см. выше(если в двух словах, то потому что SNAT и DNAT используют stateful алгоритмы).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Собственно, Ilya Evseev предлагает использовать conntrackd с помощью которого можно синхронизировать таблицу трансляций между серверами.
Собственно, Ilya Evseev предлагает только научиться пользоваться поиском ;-)))

 

Цитата(tsolodov @ 18.2.2011, 14:01) *

-A PREROUTING -d EXTERNALIP -i eth1.16 -j DNAT --to-destination INTERNALIP

-A POSTROUTING -s INTERNALIP -o eth1.16 -j SNAT --to-source EXTERNALIP

 

имхо тут какая-то фигня написана, вы у каждого пакета меняете и src и dst одновременно. В итоге о "клиенте" не остается вообще никакой информации.

Static NAT обязан работать в обе стороны - и когда клиент обращается в Интернет (postrouting snat), и когда к клиенту обращаются из Интернета (prerouting dnat).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Этими правилами классифицируются разные пакеты
да, недоглядел :) хотя один пакет вполне может попасть и под оба правила - если в результате маршрутизации будет отправлен назад )

 

а вообще да, если номер порта на каком-то этапе изменится - работать не будет, только stateful'ность тут сама по себе не виновата

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Этими правилами классифицируются разные пакеты
да, недоглядел :) хотя один пакет вполне может попасть и под оба правила - если в результате маршрутизации будет отправлен назад )

Исходя из моих представлений о netfilter и процессе маршрутизации в linux, без выхода пакета "наружу"(в интерфейс) этого произойти не может, а если он вернулся обратно через сеть это уже другой пакет.

 

а вообще да, если номер порта на каком-то этапе изменится - работать не будет, только stateful'ность тут сама по себе не виновата

В моём понимании, stateful это конечный автомат с памятью, stateless - без памяти. Подмена порта это запись в таблицу(память), т.е. использование памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

без выхода пакета "наружу"(в интерфейс) этого произойти не может
хм... почему ж не может, или я вас не так понял.

Простой пример - две системы, по одному сетевому интерфейсу, дефолтовые маршруты смотят друг на друга, форвардинг включен, rp фильтра нет - всё любой пакет (с dst не интерфейса), пришедший через eth0 туда же и уйдет. Здесь то же - меняем dst адрес и в результате маршрутизации может оказаться, что надо отправить через eth1.16, потом этот же пакет попадет и под SNAT.

 

Подмена порта это запись в таблицу(память), т.е. использование памяти
Да, но можно записать в память и не подменять номер порта, а можно не записывать, и подменить :) В первом случае должно работать, во втором - нет. А что именно netfilter делает и то, и другое... ну кто ж виноват. Хотя интересно чем обусловлена замена порта, вроде как без необходимости там номер порта не меняется (или не менялся?) и специально для смены порта сделали параметр --random.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SNAT и DNAT это stateful-фичи, пробуйте ip route nat и ip rule nat
Спасибо, но неужели если по умолчаюнию все разрешено в FORWARD то он все равно блочит пакеты?

Очень хочется заставить iptables пропускать такие пакеты.

Кто знает как еще можено реализовать такую схему?

Спасибо, как я понял то эти фичи на новых ядрах в Linux уже не работают?

Или я ошибаюсь?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SNAT и DNAT это stateful-фичи, пробуйте ip route nat и ip rule nat
Спасибо, но неужели если по умолчаюнию все разрешено в FORWARD то он все равно блочит пакеты?

Очень хочется заставить iptables пропускать такие пакеты.

Кто знает как еще можено реализовать такую схему?

Спасибо, как я понял то эти фичи на новых ядрах в Linux уже не работают?

Или я ошибаюсь?

nat - a special NAT route. Destinations covered by the prefix are considered to be dummy (or external) addresses which

require translation to real (or internal) ones before forwarding. The addresses to translate to are selected with the

attribute Warning: Route NAT is no longer supported in Linux 2.6.

 

Черт побери)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В linux 2.6 stateless nat переехал в tc(action nat), точнее появился там в ядрах, начиная с 2.6.24

 

Usage: ... nat NAT

NAT := DIRECTION OLD NEW

DIRECTION := { ingress | egress }

OLD := PREFIX

NEW := ADDRESS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.