LINUX.ORG.RU
ФорумAdmin

iptables DNAT в сочетании с бриджем


0

2

Надо пробросить весь (или частично) траффик с одного из IP адресов сервера на другой хост. Пишу, значит:

iptables -t nat -A PREROUTING -j DNAT -i xenbr0 -p tcp -d $local_address --to-destination $remote_address
iptables -t nat -A POSTROUTING -o xenbr0 -p tcp -s $local_address -d $remote_address -j MASQUERADE
$local_address и $remote_address — само собой, интернетные
Но это не работает. Подключение к $local_address не устанавливается.
Полагаю, тут каким-то образом виноват бридж (объединяет физический интерфейс и виртуальные интерфейсы виртуалок).

Тот хост, откуда пробрасываешь, является дефолт-гейтвеем для того, куда пробрасываешь? :)

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

Нет, естественно. Они вообще в совершенно разных сетях.

frozen_twilight ★★
() автор топика

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

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

nixtrian
()

а еще выхлоп tcpdump на обоих серверах в студию

а еще проверь нет ли чего в таблице filter такого

а еще в таблице nat глянь, может чего лишнего транслируется

nixtrian
()

Нужна симметричность маршрутизации, т.к. нат переписывает пакеты как в одну, так и в другую сторону. А вообще схему бы, а то не понятно.

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

Никаких извне вовнутрь. Нужно с одного из IP'ов сервера 1 прозрачно гнать траффик (TCP как минимум) на сервер 2.
Прежде описанная схема работала на ура, вроде бы даже при наличии бриджа, а вот тут вдруг какой-то затык случился.

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

а еще проверь нет ли чего в таблице filter такого а еще в таблице nat глянь, может чего лишнего транслируется

Ничего лишнего, естественно. iptables -F же

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

Ты похоже не понимаешь механизм, по которому работает NAT. NAT делается на маршрутизаторе, лежащем между хостами A и B.

Если маршрутизация идёт мимо хоста, который делает NAT, то ничего ессесно работать не будет.

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

Про маршрутизацию это вы начали, я про неё ни слова не говорил. Задача стояла перенаправлять/форвардить траффик на сервер А через сервер Б. Да, стоило, конечно, уточнить про «входящие подключения», поскольку остальное не интересует.

frozen_twilight ★★
() автор топика
iptables -t nat -A PREROUTING -j DNAT -i xenbr0 -p tcp -d $local_address --to-destination $remote_address

ну тут, предположим, все ясно — пакет пришел, адрес получателя заменился на $remote_address и пакет пошел дальше

iptables -t nat -A POSTROUTING -o xenbr0 -p tcp -s $local_address -d $remote_address -j MASQUERADE

а тут с чего у пакета source address будет $local_address ? он же не пойми откуда (из белых сетей) пришел. условие "-s ..." надо убрать.

Или ты хочешь сделать так, чтобы сам хост, пытаясь законнектиться на себя, коннектился на удаленный хост?

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

Вы начали про iptables и NAT/DNAT, который в данном случае не причем, если нет роутинга.

Если нет роутинга, то можно юзать любой TCP-прокси, например haproxy. Но только траффик ессесно будет выглядеть так, как будто он исходит с прокси, а не с клиента.

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