LINUX.ORG.RU

iptables | подмена адресов подсети


0

0

Добрый день.
Итак, есть шлюз, за которым находится подсеть x.y.1.192/27
нужно, чтобы все пакеты, адресованные в сеть x.y.42.192/27, перенаправлялись в x.y.1.192/27, а их ответы были видны как ответы из подсети x.y.42.192/27. (преобразование адресов один к одному)

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

У гугля спрашивал: DNAT и SNAT (как я понял) не могут работать сразу с целыми подсетями. Есть ещё NETMAP, для прероутинга вроде всё просто: ... -d x.y.42.192/27 -j NETMAP --to x.y.1.192/27, но как с ним работать в построутинге неясно.

Помогите пожалуйста

>-d x.y.42.192/27 -j NETMAP --to x.y.1.192/27

Не-не-не, Девид Блейн, там другая маска, не подсети. Кури ман.

>но как с ним работать в построутинге неясно

Зачем?

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

> там другая маска, не подсети. Кури ман.
Курение мана не дало результата, за сим вам и пишу.
И какая же там может быть маска, если не маска подсети?

> > но как с ним работать в построутинге неясно

> Зачем?

Ну мне же нужно заменить адрес источника c x.y.1.z на фейковый x.y.42.z.
А это делается в построутинге, am i right?

eDeath32
() автор топика

Есть ещё NETMAP, для прероутинга

Не гони, оно для любой цепочки в таблице nat

В POSTROUTING прекрасно добавляется и работает.

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

>> там другая маска, не подсети. Кури ман.
>Курение мана не дало результата, за сим вам и пишу.

>И какая же там может быть маска, если не маска подсети?


Ну, читая ман, может сложится впечатление что это не маска подсети, но в действительности получается как раз она :)
Все адреса прошедшие через NETMAP будут преобразованы таким образом, что они будут принадлежать подсети в аргументе --to
А будут ли коллизии при преобразовании уже зависит от таких аргументов как -d, -s и прочих условий.

Если исходная сеть имеет ту же маску что и указанная в NETMAP то как раз получится маппинг один к одному.

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

Чтобы все корректно работало нужны записи и в POSTROUTING и PREROUTING, иначе будет работать в одну сторону.

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

> В POSTROUTING прекрасно добавляется и работает.
Ага, добавляется. Только какие адреса заменяются при NETMAP в построутинге: источника или назначения? В любом случае у меня не заработало.

> Если исходная сеть имеет ту же маску что и указанная в NETMAP то как раз получится маппинг один к одному.

Я так и понял.

> Чтобы все корректно работало нужны записи и в POSTROUTING и PREROUTING, иначе будет работать в одну сторону.

Да-да, я понимаю, но как это сделать? Входящие пакеты, например, можно через NETMAP.
Ну а как грамотно подменить адрес источника для исходящих из x.y.1.192/27 пакетов?

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

Полагаю, как-то так
iptables -t nat -I PREROUTING -d x.y.42.192/27 -j NETMAP --to x.y.1.0/24
iptables -t nat -I POSTROUTING -s x.y.1.192/27 -j NETMAP --to x.y.42.0/24

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

--to address[/mask]
Network address to map to. The resulting address will be constructed in the following way: All 'one' bits in the mask are filled in from the new ‘address'. All bits that are zero in the mask are filled in from the original address.

Это значит, что первые 24 бита будут взяты из --to, а последние 8 — из исходного адреса.

Учитывая, что первые два бита в последнем байте у них все равно одни и те же — это не принципиально.

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

попробовал вот так:
> iptables -t nat -I PREROUTING -d x.y.42.192/27 -j NETMAP --to x.y.1.192/27

> iptables -t nat -I POSTROUTING -s x.y.1.192/27 -j NETMAP --to x.y.42.192/27


результат: пинги [до любого фейкового адреса] не проходят; трейс первым же прыжком находит, но на этом не останавливается, продолжает работать, причём последующие прыжки уже ничего не находят.
(по логике вещей первым прыжком в трейсе должен найтись шлюз)

сдаётся мне, что NETMAP в построутинге не заменяет адрес источника пакета [а заменяет что-то другое]

eDeath32
() автор топика

А как у тебя дела с роутингом? Маршрут на x.y.42.192/27 прописан на правильный интерфейс? (а то может идёт по дефолтному, который торчит не в ту сторону)
Ибо netmap не даёт автоматом нужный маршрут.

Если не разобрался то покажи выводы команд:
ifconfig
iptables -vnL
iptables -t nat -vnL
route -n

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