По какой-то причине документация по этому процессу в интернете отсутствует или устарела. По сути, у меня есть гостевая виртуальная машина VMWare в VMWare Fusion (под управлением Ubuntu 10.10), и в качестве хоста у меня Mac OSX 10.6. Я хочу иметь возможность SSH с Mac на Linux VM. Как я могу настроить вещи так, чтобы это было возможно?
5 ответов
На самом деле, есть множество веских причин использовать NAT с виртуальными машинами, а не мостовой интерфейс. (Это старый вопрос, но он возник как первый результат, когда я искал, как это сделать, переходя с VirtualBox, где я делаю это все время, поэтому я подумал, что стоит добавить)
Просто несколько причин использовать NAT:
- Это легко и портативно
- если вы находитесь в локальной сети клиента, которой для получения IP-адреса требуется известный MAC-адрес (в противном случае вам придется попытаться угадать неиспользуемые и рискнуть конфликтом, и вообще привлечь к себе плохое внимание :)),
- такие вещи, как разрешение вашим виртуальным машинам использовать один прокси-сервер на вашем хосте (например, если вы не управляете сетью, в которой вы находитесь), или возможность брандмауэра / фильтрации своего широковещательного (оконного и т. д.) трафика на выходе в одном удобное место.
- возможность назначить им фиксированный или зарезервированный IP-адрес, чтобы вы могли ссылаться на них по имени / IP-адресу вне хоста (опять же, если вы не можете получить резервирование в сети с мостовым интерфейсом)
- но, прежде всего, он позволяет вам прятаться за единственной конфигурацией брандмауэра на вашем хосте и делиться вещами между вами / ними более защищенным способом, вместо того, чтобы подвергать каждую виртуальную машину "дикому" и необходимости защищать их всех индивидуально и т. д. .. Так же, как вы делаете с интернет-модемом / маршрутизатором
В любом случае, для моего случая (VMWare Workstation 10, хост Linux, OS X Guest) и всех, кто сталкивается с этим, это обзор того, что сработало для меня. Помимо вафли и что-если, на самом деле есть только 3 основных шага.
- Итак, сначала вам нужно решить, что вы хотите разрешить вашей ВМ / гостю "снаружи" вашего хоста (обратите внимание, как показано ниже, вы сможете легко добраться до него с самого хоста). Безопасной ставкой было бы просто выставить / разрешить только SSH (порт 22) для машин в вашей подсети. Вы также можете разрешить порт 80/443, если у вас есть веб-сервер на виртуальной машине и т.д., И вы также можете использовать "туннель" для доступа к другим службам с использованием SSH (приведу пример ниже), а также использовать FUSE / SSHFS для указания вашего хоста. доступ к файловой системе .. (Или средство общих папок в VMWare, но я еще не использовал его).
Таким образом, идея выглядит примерно так: «Разрешить вещам в локальной сети моего хоста (например, 10.1.1.0/24 или 192.168.1.0/24) подключиться к порту 22222 на хосте, который мы перенаправим на порт 22 конкретный гость ". Конечно, это должен быть конкретный гость (это делает возможность настраивать ваши IP-адреса еще более полезными, и вы можете изменить их все в одном месте, не открывая каждую виртуальную машину), так же, как это делается через интернет-маршрутизатор, чтобы позволить игровым вещам и т. д.
Далее, решив, какие услуги вам понадобятся
разрешите соединения на вашем хост-компьютере с "внешним" портом через iptables/firewall. Порт 22, возможно, уже будет использоваться на хосте sshd, так что вы можете использовать что-то вроде 22222. В этом случае добавьте что-то подобное в /etc/ufw/before.rules (и перезапустите ufw)
# Ваша локальная сеть / маска подсети может выглядеть примерно так:10.1.1.0/24...
-A ufw-before-input -p tcp --dport 22222 -m состояние -state NEW -s my_subnet_and_mask -j ПРИНЯТЬ `
дайте вашей виртуальной машине зарезервированный IP-адрес в основной конфигурации VMware DHCP (необязательно, но на него проще положиться, если вы хотите "утаптать" его от хоста), добавив что-то вроде этого в конец / etc / vmware / VMnet8 / DHCPD / dhcpd.conf
# Just like a normal dhcpd reservation host my_vm_1 { hardware ethernet *your_vm_eth_mac_here**; # This is in default range for guests, but outside the 'pool'. # - check that it matches your vmware config fixed-address 192.168.198.10; # And/or your own internal nameserver etc option domain-name-servers 8.8.8.8; option domain-name "some_domain_suffix"; # This is the default default-route of the VM option routers 192.168.198.2; }
Скажите VMWare переадресовывать соединения с 22222 на гостевую:22, добавив это в раздел [inputtcp] в /etc/vmware/vmnet8/nat/nat.conf, а затем перезапустите сервис (ы) vmware (см. Примечание ниже)
[Incomingtcp]
22222 = 192.168.198.10:22
Вам также может потребоваться разрешить подключение к порту 22 в гостевой системе, в зависимости от того, что это такое / если он имеет собственный брандмауэр. В этом гостевом случае OS X это было для включения "удаленного входа" через настройки общего доступа, в Linux это может быть через ufw, как на хосте выше, и т.д.
Итак, как только все это будет сделано, вы можете быть на своем ноутбуке или другом компьютере в локальной сети, подключиться по ssh к своей рабочей станции (хост vmware) по номеру 22222, и вы будете спрятаны от имени гостя, которому вы сказали его переслать. Как упомянуто выше, если вы также сказали, что хотите иметь возможность подключиться к серверу postgres на гостевой (или vnc-сервере, который часто не зашифрован), вы можете туннелировать в той же команде (вместо того, чтобы добавить ее также в conf dhcp). Например,
console ~> ssh root@hostip -p 22222 -L 54320:localhost:5432
и вы будете ssh'ed к гостю через ip forward в vmware, и сможете указать свой инструмент pgadmin3 на localhost:54320 (непривилегированный) на вашем ноутбуке, и ваш трафик в сети будет зашифрован. (Обратите внимание, что localhost там уже перенаправлен гостю)
Заметки
- Есть все виды способов сделать это .. Во-первых, вы можете просто туннелировать хост и указать ip гостя в -L, и он "вырвется" и укажет на вас, но опция nat.conf хороша и удобна, и вам не нужно ее набирать каждый раз. Есть и другие способы переадресации портов
- Я видел ссылку на пару потоков виртуального сетевого интерфейса, чтобы сделать это (как в virtualbox), но я не смог найти его в этой версии
- Я не использую Windows, поэтому, хотя я предполагаю, что это будет очень похоже на настройку в качестве хоста, я не уверен. Хотя настройки NAT должны работать для любого гостя VMware (хотя я не использовал другие версии VMWare)
VMware устанавливает маршрут так, чтобы хост мог напрямую связываться с гостем NAT, IE с консоли хоста, я могу пинговать /ssh и т.д. С гостем NAT 192.168.198.10 (определено выше) напрямую
console ~> route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface <snip> 192.168.198.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8 192.168.233.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
- Из примечания о Linux есть некоторые проблемы с vmware с systemd init для автоматического запуска, и наряду с этим я обнаружил, что не могу просто перезапустить vmware (vmci не загружается снова), и мне нужно перезапустить моя машина, чтобы заставить вещи NAT /DHCP выше придерживаться, но у Вас, возможно, нет проблемы. Хотя есть некоторые темы с решениями systemd
абсолютно - это всего лишь вопрос использования только локального или мостового интерфейса и определения IP-адреса системы, на которой запущен ssh-сервер (с помощью команды ifconfig). установите openssh-сервер на ВМ, используйте ваш ssh-клиент, и все готово.
Если вы используете интерфейс NAT, он может быть более сложным и обычно не рекомендуется.
Чтобы упростить вещи:
- Запустите свою ВМ
- Из меню> Виртуальная машина> Сетевой адаптер> Мостовой.
- В вашей виртуальной машине найдите свой IP-адрес, например, в linux:
ifconfig
. - С хоста ssh, используя
ssh user@ip
.
Я предполагаю, что у вас установлена и запущена служба SSH.
Вместо того, чтобы знать IP для SSH, я настроил Avahi на своих гостях в Linux, чтобы он передавал динамическое имя хоста, посмотрите мой ответ здесь: https://superuser.com/a/710233/242604
Надеюсь это поможет!
Вы можете использовать мостовой сетевой интерфейс, который помогает подключаться к Интернету и легко подключаться по SSH.