LINUX.ORG.RU
решено ФорумAdmin

Подключение по ssh к виртуалке(kvm)

 , , ,


0

1

Есть три виртуалки, сетевой мост и потребность поднять на каждой отдельный сервер(prosody, nginx, minecraft). Открыть их я могу только по vnc, благодоря мосту сеть в них работает, но вот подключится к ним напрямую (ssh) уже не получается. Что надо сделать и какие статьи курить? Если что я не сисадмин и занимаюсь этим в свободное время как хобби, так что прошу не закидывать помидорами.

Ответ на: комментарий от nik_neznay

Используйте nmap снаружи и netstat внутри и все будет ясно с вашими виртуалками. Ну и проверить ssh можно зайдя браузером на порт ssh сервера (по умолчанию 22).

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

При подключении к ssh пишет: ssh: connect to host 192.168.122.185 port 22: Resource temporarily unavailable

При том, сейчас проверил, пропинговать виртуалку с хоста я могу, но не с другой машины из локальной сети, подключится по ssh тоже.

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

пропинговать виртуалку с хоста я могу, но не с другой машины

Тогда у вас скорее всего не мост. 192.168.122 - это емнип дефолтный адрес для выдачи адресов за натом хоста.

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

В доке все написано, можно пробрасывать порты хуком(если оставить NAT) или сделать настоящий бридж в котором будет сетевуха хоста и интерфейсы виртуалок

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

Те что

#!/bin/bash

IMPORTANT: Change the «VM NAME» string to match your actual VM Name.

In order to create rules to other VMs, just duplicate the below block and configure

it accordingly.

if [ «${1}» = «VM NAME» ]; then

Update the following variables to fit your setup

GUEST_IP= GUEST_PORT= HOST_PORT=

if [ «${2}» = «stopped» ] || [ «${2}» = «reconnect» ]; then /sbin/iptables -D FORWARD -o virbr0 -p tcp -d $GUEST_IP –dport $GUEST_PORT -j ACCEPT /sbin/iptables -t nat -D PREROUTING -p tcp –dport $HOST_PORT -j DNAT –to $GUEST_IP:$GUEST_PORT fi if [ «${2}» = «start» ] || [ «${2}» = «reconnect» ]; then /sbin/iptables -I FORWARD -o virbr0 -p tcp -d $GUEST_IP –dport $GUEST_PORT -j ACCEPT /sbin/iptables -t nat -I PREROUTING -p tcp –dport $HOST_PORT -j DNAT –to $GUEST_IP:$GUEST_PORT fi fi

? Я лично пытался, но ничего особо не получилось

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

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

Я имел в виду вывод virsh dumpxml <имя машины> и virsh net-dumpxml <имя сети>. Только не сюда, а на pastebin.

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

Впервые вижу :).

Это что, предполагается что я для каждой из 40 виртуалок на хосте должен где-то её имя в скрипте подменять? Годно.

@nik_neznay, ещё ifconfig или ip a с хоста.

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

virsh net-dumpxml <имя сети>.

Какой именно? virbr0? Вот dumpxml машины (одной из 3х, наверное разницы между ними особой нет) - https://pastebin.com/1cwdNXGi

Вот ip addr - https://pastebin.com/jViqhxRv

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

И кстати у меня он заработал только после добавления похожего правила: iptables -t nat -I OUTPUT -p tcp --dport 22221 --dst X.X.X.X -j DNAT --to 192.168.122.99:22

А вот ссылка на документацию: https://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections

Где-то видел более удобный скрипт, сейчас искать лень.

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

Настраивал мост, но учитывая что я занимаюсь этим непрофессионально, то мог легко накосячить и спутать мануалы.

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

У вас нет моста. Наружу, по крайней мере. virbr0 - это интерфейс, создаваемый либвиртом для организации NAT. Туда ваша виртуалка и попадает. А мост наружу надо делать самому, в убунте - в /etc/network/interfaces.

ЗЫ всё это имеет смысл если в этой «наруже» у вас есть dhcp-сервер, готовый выдать виртуалке адрес. Если там сразу провайдер или впн какой - то можно не мучаться.

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

Пробрасывать порты, как выше кто-то советовал. Вероятно, тем самым скриптом где просят подставлять имя. Я думаю, это займёт существенно больше времени, чем настройка моста. Хотя идеологически держать сервер за натом, открывая наружу только необходимые порты - это правильная идея.

А почему не докер, кстати? Для ваших целей виртуалки не особо и нужны.

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

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

А почему не докер, кстати? Для ваших целей виртуалки не особо и нужны.

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

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

Я бы проксмокс порекомендовал, он попроще будет и с веб интерфейсом для виртуалок. Там же и бридж настраивается автоматом, нет такой мутотени с пробросом портов. Если на виртуалках Линукс, то можно обойтись контейнерами на lxc они гораздо ближе к виртуалкам, чем докер.

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

Я долгое время работал с virtualbox и там проброс портов делается буквально на раз-два. Почему на libvirt такая мутота с пробросом портов? Да идеологически этим должен заниматься фаервол, но он же и существенно увеличивает порог вхождения.

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

Я для VB бридж тоже заводил вручную. А дальше на раз-два, что тут, что там.

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

pinus_nigra
()

Метод с хуками для nat’а помог, сижу радуюсь чёрному окошку :). Спасибо всем кто отписался в теме.

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

Я сперва ручками прописывал правила, так посмотреть проще, что работает, а что нет. Заодно и таблицу сохранил на всякий случай.

einhander ★★★★★
()

За словом «бридж» слишком много разных сущностей скрывается.

Скорее всего виртуалки подключены к основной сети NAT-ом.

Если нужно только ssh соединение, то один из вариантов - по ssh заходить на host, а оттуда - в guest виртуалку.

Гуглите:

  • ssh ProxyJump
  • ssh ProxyCommand
anonymous
()
Ответ на: комментарий от einhander

А вот ссылка на документацию: https://wiki.libvirt.org/page/Networking#Forwarding_Incoming_Connections

Вот спасибо! Я поднимал подобный вопрос Добавляются правила iptables для виртуалки правила так и добавляются, но они уже после, так что работает как хотелось!

alex_sim ★★★★
()
Последнее исправление: alex_sim (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.