LINUX.ORG.RU
решено ФорумAdmin

OSPF & iptables & snat

 , ,


0

3

Добрый день, есть такая ситуация.

Три НАТа, на базе Debian, стоит квага, настраиваю OSPF.

У каждого ната есть ip из 172.16.0.xxx. Что бы Наты могли ходить в инет, понятно что они СНАТяться.

Все бы ок, но вот беда.

Когда поднимаю ОСПФ на данном интерфейсе, то сервера не могут увидеть друг друга, tcpdump-ом посмотрел, и вижу что hello пакеты идут от IPшников на которые я делаю СНАТ. Стоит мне поднять Алиас, из другой сети (который не снатится) все друг друга видят и все ок.

Собственно вопрос, каким образом можно добавить исключение в iptables что бы эти правила не распространялись на OSPF пакеты?

пробовал:
-d 224.0.0.0/4 -j ACCEPT
-d 224.0.0.5 -j ACCEPT
-d 224.0.0.6 -j ACCEPT
-p ospf -j ACCEPT

ни одно из них не помогло, пакеты все равно приходят от ip на который делаю снат. :(


Ответ на: комментарий от post-factum

iptables -t nat -L -n

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            224.0.0.5
ACCEPT     all  --  0.0.0.0/0            224.0.0.0/4
ACCEPT     all  --  10.70.22.0/24        0.0.0.0/0            match-set CLIENTS_NET dst
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            match-set SERVICE_NET dst
ACCEPT     all  --  172.16.0.0/24        0.0.0.0/0            match-set SERVICE_NET dst
SNAT       all  --  10.70.22.0/24        0.0.0.0/0            to:193.169.xxx.xxx
SNAT       all  --  172.16.0.0/24        0.0.0.0/0            to:193.169.xxx.xxx

ipset -L SERVICE_NET

10.70.28.0/24
10.70.24.0/23
10.70.21.0/28
192.168.100.0/24
172.16.0.0/24
10.70.22.0/24

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

Попробуй выполнить conntrack -D -s $IP, где $IP - адрес машины с запущенной кваггой. Выполнять для каждого адреса отдельно.

anonymous
()
Ответ на: комментарий от Morbid

ospf ходит своим протоколом (89), вот его и исключай из NAT.

Посмотри на «iptables -t nat -nvxL» - счетчики на правилах есть нулевые ?

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

Как написал выше, пробовал

iptalbes -t nat -I POSTROUTING -s 172.16.0.3 -p ospf -j ACCEPT

Правило добавляется в самый вверх, но ни один пакет под него не попадает :(

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

Ну когда полная засада - «iptables -t raw -A OUTPUT -p 89 -j TRACE»

только не на долго - логи объемные получаются!

vel ★★★★★
()

Прочитал бегло, но если у тебя OSPF за натами, то пакеты, по логике, в FORWARD должны проходить. Какая у тебя там полися по умолчанию?

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

ospf обычно не форвардится между соседями, только input/output.

Больше скажу, по-умолчанию пакет формируется с ttl=1.

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

iptalbes -t nat -I POSTROUTING -s 172.16.0.3 -p ospf -j ACCEPT

172.16.0.3 - это что такое ? Нарисовал бы схему, где что, а то непонятно.

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

Схема подключения такая, все три ната в один коммутатор

       /-- nat1 (172.16.0.2) (193.169.xxx.2)
switch --- nat2 (172.16.0.3) (193.169.xxx.3)
       \-- nat3 (172.16.0.6) (193.169.xxx.6)

172.16.0.xx - серые ип для связи друг с другом (один физический интерфейс) 193.169.xxx.x - реальники, они подняты на соответсвтующих серверах, и на них происходит SNAT (другой физический интерфейс)

запускаю tcpdump, и вижу Хелло с ипишников 193.169.xxx.x Поднял на интерфейсе с 172.16.0.xxx (алиас 172.16.1.xxx), OSPF сразу начинает видеть друг-друга и все начинает работать.

На натах, если опустить правила сната пользователей, правила идут в следующем порядке:

1-ое правило: iptalbes -t nat -I POSTROUTING -s 172.16.0.ХХХ -p ospf -j ACCEPT
----------------8<-------------
100-ое правило: iptalbes -t nat -I POSTROUTING -s 172.16.0.ХХХ -j SNAT --to 193.169.xxx.x

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

"-p ospf"

ospf в /etc/services точно описан ? Что-то мне не попадалось. Но как в Дебиане - не знаю.

Но, вообще, а какой смысл натить 172.16.0.ХХХ ? Я бы натил клиентов, и всё. nat1-nat3 наружу через реальные IP ходить будут всё равно.

ну и привязать nat к eth с реальником.

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

в /etc/services нет, есть в /etc/protocols.

Iptables видит запись, как 1 ACCEPT 89  — 172.16.0.3 0.0.0.0/0

так что тут, как я понимаю все ок.

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

Прошу прощения, все заработало. затупил сам, судя по всему проморгал команду:

conntrack -D -s $IP

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

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

в /etc/services нет, есть в /etc/protocols.

А, ну да. Что-то я стормозил.

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