akelsey
@akelsey

Как написать правильно NAT правило в iptables в такой конфигурации?

Здравствуйте,
Есть такая схема:
5a53cb2968bae670179532.png

Windows 10 Ent - Hyper-V host с двумя физическими ethernet. Eth0 - хост, eth1 - hyper-v. Т.е. виртуальный свич
hyper-v сконфигурен на eth1.
Роутер Mikrotik 2011, для Hyper-V отдельный Ethernet ни с кем не в бридже - на нём 10 VLAN.
На микроте статический адрес, но самый нужные порты уже заняты (443, 25, 110, 143) и его использовать нельзя (для 443 используется sslh уже тоже под завязку используется, т.е. без вариантов). Для виртуальных машин требуется отдельный IP адрес (для различных экспериментов).
Для этого куплен VPS (за 70 рублей в мес.), на котором поднят OpenVPN (TCP) сервер и микротик ему клиент.
Правилом Mangle весь трафик с 10.10.0.0/16 роутится через туннель. На VPS сконфигурен iptables - знаний и гугления мне хватило что бы сконфигурировать его как мне требуется, на правильную виртуальную машину.
Всё работает как нужно, мне, кроме одного. Далее внимание на зеленные и красную стрелочки.

Когда я с хоста подключаюсь например к X.X.X.X телнетом на порт 25, то все запросы идут от Y.Y.Y.Y на X.X.X.X:25 и виртуалки видят хост Y.Y.Y.Y пытаются законнектиться с ним (Зеленные стрелочки), но всё терминируется на Mikrotik (Красная стрелочка), т.к. данный адрес принадлежит ему, и в туннель уже ничего не улетает. (И требуется отдельная машина где то вне сети моего роутера, они конечно у меня есть, но это не очень удобно для работы и отладки)

Вопрос у меня один - как написать правило iptables на VPS что бы если вдруг запросы приходят от Y.Y.Y.Y они как то хайдились правилом и маскировались например адресом X.X.X.X, ну т.е. главное что бы роутинг работал через туннель. Наверняка для кого-то плёвое дело, но что то я не могу сообразить. (А может и не возможно это?).
Спасибо.
  • Вопрос задан
  • 330 просмотров
Решения вопроса 2
Ziptar
@Ziptar
Дилетант широкого профиля
Я, наверное, тупой, но я не очень понимаю чего Вы хотите.
У Вас X.X.X.X - внешний айпишник VPS и Вы хотите, чтобы запросы внутрь тунеля посылались от этого адреса? Это невозможно.
При этом суть проблемы неясна. Почему когда Вы подлючаетесь из сети за роутером к внешнему IP VPS - у вас ответы терминатятся на тике? У Вас запросы через роутер висят в цепочке forward, а не в input/output. Ответы тоже будут попадать в forward.
Вообще, поясните откуда вы пытаетесь подключиться к X.X.X.X.
Ответ написан
akelsey
@akelsey Автор вопроса
Сам же и отвечу, нужно было вдумчиво почитать документацию по iptables и применить src-nat, оставлю на память:

iptables -t nat -A POSTROUTING -o tun0 -s Y.Y.Y.Y -p tcp --dport 25 -j SNAT --to-source 10.1.0.1
или что универсальнее в моём случае (т.к. нужны все порты):
iptables -t nat -A POSTROUTING -o tun0 -s Y.Y.Y.Y -j SNAT --to-source 10.1.0.1

Теперь все пакеты приходящие с моего статического IP Y.Y.Y.Y в качестве источника подменяются на 10.1.0.1 (адрес интерфейса tun0) и корректно ходят по настроенным маршрутам. (Теперь маршрут отмеченный красной стрелочкой, которую можно продлить через туннель до VPS, достигает VPS, где уже из таблицы НАТ делается обратное преобразование и корректно маршрутизируется до моего host 192.168.101.100)
Само собой для всех требуемых портов нужно подменять источник.
Всем спасибо за желание помочь.
PS
Константин Антонов вам тоже спасибо, хоть netmap и не помог (т.к. у меня все же подсети разные), но это натолкнуло на правильную мысль.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vesper-bot
@vesper-bot
Любитель файрволлов
Зачем манглить на микротике, когда надо настраивать туннель на Х.Х.Х.Х, чтобы указать ему, что доступ к сетям 10.10.0.0/16 идет через 10.1.0.2 (ip route add 10.10.0.0/16 via 10.1.0.2)? После чего трафик из туннеля на тике натить никуда не надо (т.е. в vlan10-20 трафик должен роутиться), и хватит. Тогда машины в вланах будут видеть второй стороной 10.1.0.1, отправлять обратные пакеты на свой шлюз 10.10.х.1, а тик уже разберется, что 10.1.0.1 находится у него за туннелем и туда и запихнет ответный пакет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы