15

По какой-то причине документация по этому процессу в интернете отсутствует или устарела. По сути, у меня есть гостевая виртуальная машина VMWare в VMWare Fusion (под управлением Ubuntu 10.10), и в качестве хоста у меня Mac OSX 10.6. Я хочу иметь возможность SSH с Mac на Linux VM. Как я могу настроить вещи так, чтобы это было возможно?

5 ответов5

21

На самом деле, есть множество веских причин использовать 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
12

абсолютно - это всего лишь вопрос использования только локального или мостового интерфейса и определения IP-адреса системы, на которой запущен ssh-сервер (с помощью команды ifconfig). установите openssh-сервер на ВМ, используйте ваш ssh-клиент, и все готово.

Если вы используете интерфейс NAT, он может быть более сложным и обычно не рекомендуется.

2

Чтобы упростить вещи:

  1. Запустите свою ВМ
  2. Из меню> Виртуальная машина> Сетевой адаптер> Мостовой.
  3. В вашей виртуальной машине найдите свой IP-адрес, например, в linux: ifconfig .
  4. С хоста ssh, используя ssh user@ip .

Я предполагаю, что у вас установлена и запущена служба SSH.

1

Вместо того, чтобы знать IP для SSH, я настроил Avahi на своих гостях в Linux, чтобы он передавал динамическое имя хоста, посмотрите мой ответ здесь: https://superuser.com/a/710233/242604

Надеюсь это поможет!

-1

Вы можете использовать мостовой сетевой интерфейс, который помогает подключаться к Интернету и легко подключаться по SSH.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .