LINUX.ORG.RU

проброс портов в виртуалку

 , livbirt


0

2

Есть корпоративный сервер с россыпью виртуалок, которые управляются libvirt. На одной из виртуалок крутится postgres. Хочется сделать так, чтобы этот postgres был виден в основной сети. Iptables для меня - китайская грамота, так что нужен совет всезнающего лора.


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

Но если я понял правильно, и есть машина, кторая видит и мир, и изолированную сетку для виртуалок, то можно обойтись ssh:

root@router# ssh -L 192.168.1.5:4444:localhost:4444 -fN <postgres_machine>

router - ваш гипервизор, который имеет связь и с виртуалками, и с миром. 192.168.1.5 - айпи роутера в мире, 4444 - порт постгреса (ну не помню я его наизусть). Смысл заклинания - перенаправлять пакеты с порта 4444 роутера на порт 4444 виртуалки с постгресом. Для того, чтобы такой проброс работал, может понадобиться поменять значение параметра GatewayPorts на yes в /etc/ssh/sshd_config на роутере.

Естественно, такая операция потребует ssh-ключа или пароля, так что либо должна производиться вручную при каждой загурзке, либо (если с ssh-ключом беспарольным) годится только для отладки (доступ рута под рутом без пароля с сервера на сервер - это дыра в безопасности).

Лучше все-таки почитать про iptables. На опеннете есть русский перевод, если надо.

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

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

Топология примерно такая

Но если я понял правильно, и есть машина, кторая видит и мир, и изолированную сетку для виртуалок, то можно обойтись ssh

Поняли вы все правильно, но хочется сделать автоматический форвардинг, который создавал бы ощущение, что postgres запущен на основном серваке. Пока что нашел только эту статью. Доберусь до работы попробую сделать как там описано

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

Вот моя строчка для проброса mysql:

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 63306 -j DNAT --to-destination 10.108.118.15:3306

3306 — порт mysql в виртуалке

63306 — порт на хостовой машине (там стоит и свой mysql, так что виртуалка на другом порту)

10.108.118.15 — адрес виртуалки

Нужно также не забыть единичку в /proc/sys/net/ipv4/ip_forward

А ssh для этой цели — это ж закручивание шурупа плоскогубцами :)

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

Ну, в случае серьезной нагрузки решение с ssh - и правда, ерунда.

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

Главное, чтобы виртуалка имела шлюзом гипервизор, а то она не будет знать, куда ответы присылать.

pianolender ★★★
()

посмотрите в сторону rinetd , его простота удивит вас

vxzvxz ★★★
()
Ответ на: комментарий от KRoN73
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 63306 -j DNAT --to-destination 10.108.118.15:3306

не помогло. а вот решение из этой статьи, хоть и названо хаком, но сработало.

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