4

Если я создаю несколько гостей Ubuntu на одном хосте (Windows 7), все с сетевым адаптером, настроенным как «Только для хоста», то в результате все гости на хосте могут пинговать друг друга

На хосте Windows 7, с ipconfig я вижу что-то вроде

Ethernet-адаптер Local Area Connection:

   Connection-specific DNS Suffix  . : wr
   Link-local IPv6 Address . . . . . : ......
   IPv4 Address. . . . . . . . . . . : 10.15.38.101
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.16.2.254

Ethernet-адаптер VirtualBox Host-Only Network:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : .........
   IPv4 Address. . . . . . . . . . . : 192.168.56.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

и фактически все гости показывают свой ip на 192.168.56.Х подсеть.

Вопрос: возможно ли легко подключить гостей, работающих на разных хостах, с этой сетью только для хостов, доступной через локальную сеть?

2 ответа2

4

Чем дольше и лучше ответ «да».

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

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

Четыре простых шага

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

Конфигурация сети только для хоста

Убедитесь, что ваши сети только для хоста уникальны (по крайней мере, те, которые участвуют в схеме). То есть каждая сеть только для хоста должна быть разной, а не все той же сетью по умолчанию 192.168.56.0/24.

Ваш пример помещает ваш хост в сеть 10.15.38.0/24, которая уже является частным диапазоном (не так уж важно), так что вы можете выбрать использование других сетей 10.xy0/24 (у вас есть около 64 КБ!) для ваших хост-сетей. (Обратите внимание, что поскольку ваш пример шлюза отсутствует в вашей сети, он предполагает, что ваша сеть действительно 10.0.0.0/8, так что будьте осторожны с другими потенциальными конфликтами.) Конечно, вы также можете продолжать использовать сети 192.168.y.0/24, но убедитесь, что каждая сеть только для хоста использует свое значение "y".

Документация VirtualBox по адресу https://www.virtualbox.org/manual/ch08.html#idp59149232 описывает, как настроить интерфейс только для хоста и связанный DHCP-сервер для изменения адресов. GUI также предлагает механизмы, если командная строка не является вашим другом, но документы помогают сделать ее понятной (или должна), и на самом деле не обращаются к GUI.

Гостевые шлюзы

Сконфигурируйте своих гостей так, чтобы маршруты выходили из сети только для хоста через IP-адрес сети только для хоста. В отличие от виртуальных сетей NAT, DHCP-сервер только для хоста не предоставляет гостям информацию о маршрутизации, а только адреса.

Это можно сделать различными способами, например, заменить DHCP-сервер, но по сути все, что вам нужно сделать, - это сообщить каждой гостевой ОС, как выйти из сети только для хоста. Для большинства ОС это одна и та же команда (которая требует административных полномочий):

route add default gw <<host-only-if>>

По умолчанию интерфейсу только для хоста будет присвоен узел .1 сети, поэтому в этих примерах 10.xy1, поэтому команда становится route add default gw 10.xy1 (где x и y, конечно, являются действительными значениями),

Создание этого перманента зависит от гостевой ОС, но используйте графический интерфейс пользователя или отредактируйте файлы /etc / при необходимости или запускайте строку добавления маршрута каждый раз, когда вы запускаете виртуальную машину.

Маршрутизация хоста между сетевыми картами

Настройте ваши виртуальные хосты для маршрутизации между интерфейсами. Это где это становится сложным, и многие люди сдаются. Что касается вашей хост-ОС, использование сети только для хоста означает, что они являются машинами с несколькими сетевыми платами, и их можно настроить для перемещения трафика из виртуальной сети в реальную сеть.

Поскольку вы используете Windows, http://windows.microsoft.com/en-us/windows/configuring-multiple-network-gateways обрисовывает в общих чертах эту концепцию и дает некоторые подробности о команде route. Кажется, включение RIP Listener и добавление / проверка маршрутизации «это все, что нужно».

На хосте Linux это так же просто, как установить для файла /proc /sys /net /ipv4 /ip_forward значение 1 и убедиться, что таблица маршрутизации включает в себя виртуальные и реальные сети. Это работает на моем хосте Ubuntu:

echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward

Более того, мой хост Ubuntu уже имел правильную маршрутизацию для реальных и виртуальных сетей, поэтому все, что мне нужно было сделать, это изменить это значение в этом файле.

Гугл "моя ОС как роутер" или что-то в этом роде, пока не найдешь что-нибудь удобное. Вы можете использовать любой механизм, который позволит вам включить маршрутизацию и настроить маршруты.

статическая маршрутизация

Настройте ваши хосты для маршрутизации в виртуальные сети других хостов. Это - то, где это становится грязным, и даже люди, которые могут пройти через шаг 3, иногда сдаются. Это грязно, потому что на каждом хосте виртуальной машины вам нужно выполнить эту настройку, и если у вас много хостов и сетей только с хостом, отслеживать и загружать может быть сложно.

Ваша общая конфигурация сети по умолчанию будет выглядеть так: «все, что не находится в моей подсети, находится на другой стороне моего шлюза по умолчанию». В вашем примере, если он не находится в сети 10.15.38.0/24, он находится на другой стороне от 10.16.2.254 (что опять-таки предполагает, что ваша сеть действительно 10.0.0.0/8, и ваша маска сети неверна, но это ХОРОШО). Что вам нужно сделать, это сказать вашим хостам настроить статический маршрут к виртуальным сетям других хостов. В качестве альтернативы, вы можете настроить маршрутизатор по умолчанию вашего хоста (ваш 10.16.2.254), чтобы знать эти маршруты ... трафик покинет хост, попадет в маршрутизатор, вернется к другому хосту ...

Примерно так будет работать на большинстве хост-ОС.

route add -net <<guest-ip-range>> netmask <<correct-mask>> gw <<host-lan-IP>>

Таким образом, в случае вашего примера вы должны поместить route add -net 10.xy0 netmask 255.255.255.0 gw 10.15.38.101 на каждый хост, который необходим для доступа к виртуальной сети вашего хоста.

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

Сквозной пример

Допустим, в вашей сети есть два хоста, для которых вы хотите применить это: 10.15.38.101 и 10.15.38.201. Для облегчения запоминания измените каждую из своих сетей только для хоста, чтобы использовать их последний октет в качестве определения сети, например, 10.101.0.0/24 на хосте .101 и 10.201.0.0/24 на хосте .201.

На каждом госте в сети только для хоста добавьте маршрут через интерфейс хоста только для хоста. Таким образом, на машинах 10.101.0.0/24 добавьте gw 10.101.0.1 по умолчанию, а на машинах 10.201.0.0/24 добавьте gw 10.201.0.1 по умолчанию .

На каждом хосте включите маршрутизацию и убедитесь, что таблица маршрутизации включает обе сети. На моем хосте Ubuntu я сделал эхо "1" | sudo tee /proc /sys /net /ipv4 /ip_forward и затем route -n покажет что-то вроде этого (отредактировано в соответствии с вашим примером):

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.16.2.254     0.0.0.0         UG    0      0        0 eth0
10.15.38.0      0.0.0.0         255.255.255.0   U     1      0        0 eth0
10.101.0.0      0.0.0.0         255.255.255.0   U     0      0        0 vboxnet0

Затем на каждом хосте необходимо добавить статический маршрут в сеть только для другого хоста. Итак, на хосте .101 вы должны ввести route add -net 10.201.0.0 маска сети 255.255.255.0 gw 10.15.38.201, а на хосте .201 вы введете route add -net 10.101.0.0 маска сети 255.255.255.0 gw 10.15.38.101 установить статические маршруты.

Теперь вы сможете использовать сеть, чтобы перейти от вашей 10.101.0.101 (первый адрес DHCP по умолчанию в сети хоста) к вашей виртуальной машине 10.201.0.101 на другом хосте. Я не знаю, что предлагает ваша гостевая ОС, но SSH или веб-браузер, или обычно ping, должны работать.

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

Предостережения

Остается настроить другие службы, например DNS, чтобы упростить разрешение всех узлов. Это может быть так же просто, как добавить строки в /etc/resolv.conf или любой другой механизм GUI в гостевой ОС или отредактировать файлы /etc /hosts с другими адресами хоста.

Это может быть непонятно, но уловка статической маршрутизации должна быть в любой системе, к которой должен иметь доступ только гость сети. В пошаговом примере только два хоста настроены со статическим адресом. Это означает, что любая машина в сети 10.101.0.0/24 или 10.201.0.0/24 или хосты 10.15.38.101 или 10.15.38.201 могут взаимодействовать, но устройства в сетях только для хоста не могут взаимодействовать с другими хостами на 10.15 .38.0/24 сети (или другие сети 10.0.0.0/8), в которых также не добавлен статический маршрут.

Это может быть изменено путем дальнейшей настройки хостов ВМ с более надежными правилами пересылки, добавлением программного обеспечения NAT или прокси. Это программное обеспечение не обязательно должно быть установлено на одном из хостов виртуальной машины или в другой системе, если это устройство было настроено со статическими маршрутами во все сети только для хоста, которые оно должно было обслуживать. Если бы это было критически необходимо, можно было бы выбрать более широкое решение для маршрутизации.

1

Краткий ответ: нет. Вы не можете использовать «Host-Only Networking» и подключать гостей на нескольких физических хостах. Возможно, вам лучше использовать мостовую сеть, если вам нужно подключить гостей к вашей локальной сети.

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

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