LINUX.ORG.RU
ФорумAdmin

Proxmox. Проброс портов из ВМ на ВМ

 , ,


0

1

Доброго времени суток!

Имеется сервер с Proxmox 4 под Debian 'jessie' и 2 IP адреса. Первый IP у хост машины (xxx.xxx.xx.146), второй у одной из виртуалок (xxx.xxx.xx.184). Сеть на хост машине имеет следующие настройки:

auto lo
iface lo inet loopback

iface vmbr0 inet static
	address  xxx.xxx.xx.146
	netmask  255.255.255.192
	gateway  xxx.xxx.xx.129
	bridge_ports eth0
	bridge_stp off
	bridge_fd 0
	
auto vmbr1
iface vmbr1 inet static
	address  192.168.1.1
	netmask  255.255.255.0
	bridge_ports none
	bridge_stp off
	bridge_fd 0

	post-up iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
	post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j MASQUERADE
Виртуалка с реальным IP следующие:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
	address xxx.xxx.xx.184
	netmask 255.255.255.0
	gateway xxx.xxx.xx.129


auto vmbr0
iface vmbr0 inet static
	address 192.168.1.101
	netmask 255.255.255.0
	gateway 192.168.1.1

То есть, этой ВМ присвоено два интерфейса: по первому ее видно из вне (vmbr0), по второму она видит другие виртуалки (vmbr1). Все остальные виртуалки за NAT, используют privat подсеть 192.168.1.1 (vmbr1). Я хочу пробросить порты к этим виртуалкам (которые за NAT). Проброс нужно сделать не из хост машины, а из виртуалки, которая имеет реальный IP. Пробую добавлять правило в этой виртуалке

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 52022 -j DNAT --to-destination 192.168.1.102:22
но такой проброс не работает и подключится к виртуалке с IP 192.168.1.102 (xxx.xxx.xx.184:52022) из вне я не могу. Знатоки, подскажите пожалуйста, что я делаю не так?

ЗЫ. Виртуалки LXC



Последнее исправление: sektor2704 (всего исправлений: 1)

но такой проброс не работает и подключится к виртуалке с IP 192.168.1.102 (xxx.xxx.xx.184:52022) из вне я не могу. Знатоки, подскажите пожалуйста, что я делаю не так?

Подожди. У тебя же x.184 и 192.168.1.102 на одной и той же виртуалке висят. А судя по твоему посту, тебе надо к другой виртуалке подключаться.

Если тебе надо к той же виртуалке, просто со «внешнего» порта 52022 подключаться к реальному 22, то это делается не DNAT, а REDIRECT. Но проще и лучше в конфиге sshd Listen указать белый IP и порт 52022 плюс на локалке на 22.

Если тебе надо к другой машине пробрасывать в сети 192.168.1.X (при это X это не та же виртуалка 102) то правило верное. Только помимо него должен быть разрешен форвардинг пакетов в /proc/sys/net/ipv4/ip_forward и в цепочке FORWARD. Также виртуалка, на которую будут переадресовываться запросы должна иметь шлюзом по умолчанию твою машину 192.168.1.102 или придется писать правило еще и для SNAT.

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

Подожди. У тебя же x.184 и 192.168.1.102 на одной и той же виртуалке висят.

Нет, не на одной, пардон, очепятался. У ВМ с реальным IP - x.184 и 192.168.1.101.

Если тебе надо к другой машине пробрасывать в сети 192.168.1.X (при это X это не та же виртуалка 102) то правило верное.

Да, вы правильно поняли. Именно это и нужно.

Только помимо него должен быть разрешен форвардинг пакетов

в /etc/sysctl.conf

net.ipv4.ip_forward=1

Также виртуалка, на которую будут переадресовываться запросы должна иметь шлюзом по умолчанию твою машину

Указал для ВМ 192.168.1.102 шлюз 192.168.1.101. Удалось подключится к ней через SSH. Правда как-то очень долго подключается и временами тупит + в ней (192.168.1.102) нет инета :(

или придется писать правило еще и для SNAT.

Я пробовал вот такой вариант

iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.102 --dport 22 -j SNAT --to-source xxx.xxx.xx.184
не работало. Хотя, возможно я просто неправильно писал правило?

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

Не правильно конечно. Тебе надо реальный IP изменить на локальный, а ты его меняешь сам на себя. Правильно так:

iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.102 --dport 22 -j SNAT --to-source 192.168.1.101

Указал для ВМ 192.168.1.102 шлюз 192.168.1.101. Удалось подключится к ней через SSH. Правда как-то очень долго подключается и временами тупит + в ней (192.168.1.102) нет инета :(

Логично. Ты ведь сделал шлюзом для неё 1.101, а этой виртуалке у тебя наверняка нет правил для NAT и разрешения выхода других виртуалок через неё как положено в инет. И тупит ssh потому, что DNS перестал разрешаться, т.к. инета нет.

Можно либо как я выше правилом на виртуалке с реальным IP решить, но тогда все коннекты из инета к твоей виртуалке .1.102 будут как будто бы от .1.101.

Либо по хорошему правильно настраивать маршрутизацию в сети, но мне некогда это описывать. А особенно если тебе надо чтобы виртуалки по умолчанию выходили в сеть через .146, а к ним можно было достучаться через port-forwarding со .184 IP - тут вообще по сути схема с policy based routing, аналогичная той, что обычно делается для маршрутизации через 2х провайдеров.

Вообще стоит изучить вообще как сети работают, маршрутизацию и NAT. Тогда всё станет на свои места.

nstorm
()
Последнее исправление: nstorm (всего исправлений: 1)
Ответ на: комментарий от nstorm

Правильно так:

Спасибо, так работает

а этой виртуалке у тебя наверняка нет правил для NAT и разрешения выхода других виртуалок через неё как положено в инет

Можете, пожалуйста, подсказать правила?

А особенно если тебе надо чтобы виртуалки по умолчанию выходили в сеть через .146

Нет, мне наоборот нужно, чтобы эти виртуалки никак не касались x.146. Потому и делаю все через x.184.

Вообще стоит изучить вообще как сети работают, маршрутизацию и NAT.

Да это в принципе касается любой вещи, которую настраиваешь, но мне это не особо нужно и интересно. Просто сложилась такая ситуация, что нужно настроить это дело, а я в этих сетях практически не разбираюсь, а настроть больше некому :( Благодаря вам - заработало, за что вам огромное спасибо!

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

Нет, мне наоборот нужно, чтобы эти виртуалки никак не касались x.146. Потому и делаю все через x.184.

Можете, пожалуйста, подсказать правила?

Тогда всё просто. На виртуалке x.184 настраиваешь обычный NAT как для любого шлюза. Примеров в сети куча. Например тут, раздел NAT: https://wiki.gentoo.org/wiki/Home_Router/ru

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

nstorm, огромное вам спасибо за помощь и советы. Выручили!

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