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

Непонятки с NAT Не работает SNAT --persistent

Возникла непонятка с NAT на машине с lISG.

Всё запущено на CentOS 6.8, 2.6.32-642.3.1.el6.x86_64.

"Обычный" NAT работает

iptables -t nat -I POSTROUTING -o vlan61 -s 10.20.0.0/16 -j SNAT --to-source AAA.BBB.18.131

где AAA.BBB.18.131 - публичный IP на vlan61.

Решил сделать NAT "в диапазон IP" (persistent)

iptables -t nat -I POSTROUTING -o vlan61 -s 10.20.0.0/16 -j SNAT --to-source AAA.BBB.18.161-AAA.BBB.18.190 --persistent

И вот тут не поехало.. На vlan61 tcpdump-ом от клиентов трафик с IP выделенного диапазона вижу, к клиентам - нет. Соотв. у клиента трассировка затыкается на роутере (коммутатор DGS-3120 с IP AAA.BBB.18.130). AAA.BBB.18.130 является шлюзом машины lISG

Публичная подсеть (AAA.BBB.18.128/25), выделенная аплинком, порезана на три: AAA.BBB.18.128/27, AAA.BBB.18.160/27, AAA.BBB.18.192/26.

В первой находятся роутер и машина с lISG, во второй планировал реализовать тот самый NAT persistent.

На роутере в NAT подсеть прописан маршрут AAA.BBB.18.160/27 AAA.BBB.18.131.

На машине с lISG эту подсеть завернул в блэкхол (ip route add blackhole AAA.BBB.18.160/27), пробовал и убирать из блэкхол. Результат тот же...

В iptables FORWARD (после правил LISG) добавил: FORWARD -s AAA.BBB.18.160/27 -j ACCEPT и FORWARD -d AAA.BBB.18.160/27 -j ACCEPT.

Ничего не изменилось..

Изначально погрешил на кривую маршрутизацию у провайдера аплинка, но оказалось, что он тут ни при чём.

Попробовал назначить IP AAA.BBB.18.189/27 alias-ом на vlan61 - трассировка с этим source IP пошла, из "внешки" на него тоже..

 

Что я сделал не так??

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


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

Варианты решения проблемы:

1. Эту сеть надо повешать алиасами на lo:

2. echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind

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


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

' timestamp='1480402955' post='1347476']

Варианты решения проблемы:

1. Эту сеть надо повешать алиасами на lo:

2. echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind

Т.е. 1-й вариант такой:

ifconfig lo:0 AAA.BBB.18.160/32
ifconfig lo:0 AAA.BBB.18.161/32
ifconfig lo:1 AAA.BBB.18.162/32
....
ifconfig lo:30 AAA.BBB.18.191/32

Так?

 

По 2-му варианту тоже есть вопрос. Прочёл в интернетах следующее:

3.1.7. ip_nonlocal_bind

 

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

 

Эта переменная может иметь два значения -- 0 или 1. Если установлено значение 0, то опция отключена, 1 -- включена. Значение по-умолчанию -- 0.

По выделенному в цитате что-нибудь можете добавить? В плане каких таких "других приложений", и что с ними может приключиться?

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


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

Т.е. 1-й вариант такой:

ifconfig lo:0 AAA.BBB.18.160/32
ifconfig lo:0 AAA.BBB.18.161/32
ifconfig lo:1 AAA.BBB.18.162/32
....
ifconfig lo:30 AAA.BBB.18.191/32

Так?

 

Как-то логичней было бы

 

ip addr add AAA.BBB.18.161/32 dev lo

...

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


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

никогда диапазоны не вешал на лупбек и прочих извращений не делал, только в блекхол заворачивал и все работало, именно с таким правилом как у вас. впечатление, что ваш роутер не знает мака, куда роутить ваш диапазон (судя по тому, что вы не видите в дампе входящих пакетов). и кстати совсем незачем терять два ипа - .160 и .191. оно вполне корректно работает с "--to-source AAA.BBB.18.160-AAA.BBB.18.191"

 

ps. еще есть подозрение, что ваша AAA.BBB.18.160/27 (или более толстая) висит на вашем роутере и когда вы повесили алиас на влану, роутер записал в свой арпкеш (или спросил через арп) соответствие мака вашей вланы и AAA.BBB.18.189, поэтому у вас трафик пошел в обратную сторону. в общем я бы ковырял не iptables, а роутер.

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


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

Так?

Не обязательно /32, можно и побольше побить, хоть /24.

 

В плане каких таких "других приложений", и что с ними может приключиться?

Ниразу таких "других приложений" не видел. Возможно имееются ввиду те, которые будут слушать rawsocket, и не ожидают там увидеть чужие адреса.

 

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

Входящие пакеты не появятся, если нет маршрута. А маршрут будет либо при arp-ответе, если сеть одна и та же, либо при анонсе по ротоколу маршрутизации, если сети разные.

Возможно на той стороне криво сделано именно через arp (т.е. у вышестоящего что-то вроде ip route add x.x.x.x/y dev eth0 вместо via z.z.z.z)

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


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

' timestamp='1480501165' post='1347811']

Не обязательно /32, можно и побольше побить, хоть /24.

Не совсем понял.. NAT подсеть у меня /27.

Я так понимаю, Вы считаете, чтобы в данном случае NAT заработал, будет достаточно назначить алиасом на lo всего ОДИН IP с маской /27?

' timestamp='1480501165' post='1347811']

В плане каких таких "других приложений", и что с ними может приключиться?

Ниразу таких "других приложений" не видел. Возможно имееются ввиду те, которые будут слушать rawsocket, и не ожидают там увидеть чужие адреса.

Не уверен, но вроде dhcpd юзает rawsocket? А он на машине есть. Правда, dhcp запросы приходят на него через релей.

Не будет здесь проблем?

' timestamp='1480501165' post='1347811']

Входящие пакеты не появятся, если нет маршрута. А маршрут будет либо при arp-ответе, если сеть одна и та же, либо при анонсе по ротоколу маршрутизации, если сети разные.

Возможно на той стороне криво сделано именно через arp (т.е. у вышестоящего что-то вроде ip route add x.x.x.x/y dev eth0 вместо via z.z.z.z)

Я правильно понимаю, если у вышестоящего прова сделано именно так, как Вы описали, то все любые другие "правильные" манипуляции с маршрутизацией с моей стороны не помогут?

Или всё же у меня есть возможность решить всё общепринятым путём? Ну например, на "вышестоящем роутере" (DGS-3120) что-то поправить?

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


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

Я правильно понимаю, если у вышестоящего прова сделано именно так, как Вы описали, то все любые другие "правильные" манипуляции с маршрутизацией с моей стороны не помогут?

честно перечитал все 3 раза. если у вас действительно длинк маршрутизатор, то все дело в нем, увы на л3 я его не пользовал.

но 1. ничего не надо в лупбэки прописывать. и какие то no_bind тоже в жизни не делал.

в общем даже нат сеть не назначайте пока. идите на 3120 и sh ipr, может для теста вы там эту подсеть подымали и забыли удалить. пинг с инета и дамп на сетевой. Если он действительно л3, значит собака там зарыта, прошивку в конце концов обновить ибо и покруче у длинков моделей есть баги в не стандартой маской маршрута. они видимо все на 24 тестят

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

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


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

Я так понимаю, Вы считаете, чтобы в данном случае NAT заработал, будет достаточно назначить алиасом на lo всего ОДИН IP с маской /27?

Да, это именно так и работает. На lo вешается не один ip, а вся подсеть сразу.

 

Не будет здесь проблем?

Не знаю, проще проверить.

 

Я правильно понимаю, если у вышестоящего прова сделано именно так, как Вы описали, то все любые другие "правильные" манипуляции с маршрутизацией с моей стороны не помогут?

Именно так.

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


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

' timestamp='1480604995' post='1348344']

Я так понимаю, Вы считаете, чтобы в данном случае NAT заработал, будет достаточно назначить алиасом на lo всего ОДИН IP с маской /27?

Да, это именно так и работает. На lo вешается не один ip, а вся подсеть сразу.

Т.е. вот так -

ifconfig lo:0 AAA.BBB.18.160/27

?

 

И правило NAT в таком случае будет выглядеть так -

iptables -t nat -I POSTROUTING -o vlan61 -s 10.20.0.0/16 -j SNAT --to-source AAA.BBB.18.161-AAA.BBB.18.190 --persistent

? Т.е. БЕЗ "адреса сети" - AAA.BBB.18.160

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


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

Т.е. вот так -

ifconfig lo:0 AAA.BBB.18.160/27

?

Синтаксис у ifconfig вроде другой, но идея верная.

 

 

? Т.е. БЕЗ "адреса сети" - AAA.BBB.18.160

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

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


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

' timestamp='1480658431' post='1348477']

Т.е. вот так -

ifconfig lo:0 AAA.BBB.18.160/27

?

Синтаксис у ifconfig вроде другой, но идея верная.

Он самый

ifconfig lo:0 AAA.BBB.18.160/27 up

lo:0      Link encap:Local Loopback
         inet addr:AAA.BBB.18.160  Mask:255.255.255.224
         UP LOOPBACK RUNNING  MTU:65536  Metric:1

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


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

Join the conversation

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

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

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

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

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

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

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