- Как настроить сеть между гостевой виртуальной машиной и хостом в Oracle VirtualBox
- Требования
- Создайте сеть для гостей и хост-машины
- Настройка сетевых параметров виртуальной машины
- Настройте адаптер для подключения виртуальной машины к хосту
- Настройка адаптера для подключения виртуальной машины к Интернету
- Настройка статического IP-адреса для гостевой виртуальной машины
- Управление виртуальными машинами с хоста с помощью SSH
- VirtualBox: виртуальная локальная сеть, доступ в интернет через Linux-сервер
- Немного теории
- Вывод хоста в интернет
- Ограничение проходящих пакетов
- Более сложный пример
- Заключение
Как настроить сеть между гостевой виртуальной машиной и хостом в Oracle VirtualBox
После того, как вы установили различные операционные системы в Oracle VirtualBox, вы можете включить связь между хостом и виртуальными машинами.
В этой статье мы опишем самый простой и прямой метод настройки сети для гостевых виртуальных машин и хоста в Linux.
Для целей этого руководства:
- Основная операционная система – Linux Mint 18
- ОС виртуальной машины — CentOS 7 и Ubuntu 16.10
Требования
- Рабочий Oracle Virtualbox, установленный на хост-компьютере.
- У вас должна быть установлена гостевая операционная система, такая как Ubuntu, Fedora, CentOS, Linux Mint или любая другая по вашему выбору в виртуальной машине Oracle.
- Выключайте виртуальные машины по мере выполнения настроек вплоть до шага, на котором требуется их включить.
Чтобы гостевой и хост-компьютеры могли обмениваться данными, они должны находиться в одной сети, и по умолчанию вы можете подключить до четырех сетевых карт к своим гостевым компьютерам.
Сетевая карта по умолчанию (адаптер 1) обычно используется для подключения гостевых машин к Интернету с помощью NAT через хост-компьютер.
Важно. Всегда устанавливайте первый адаптер для связи с хостом, а второй адаптер для подключения к Интернету.
Создайте сеть для гостей и хост-машины
В интерфейсе диспетчера Virtualbox ниже начните с создания сети, в которой будут работать хост и гости.
Перейдите в Файл –> Настройки или нажмите Ctrl + G :
В следующем интерфейсе есть два варианта; выберите Host-only Networks, нажав на него. Затем используйте знак + справа, чтобы добавить новую сеть только для хоста.
Ниже приведен снимок экрана, показывающий, что была создана новая сеть только для хоста с именем vboxnet0.
При желании вы можете удалить его, нажав кнопку — посередине, а для просмотра сведений/настроек сети нажмите кнопку изменить.
Вы также можете изменить значения в соответствии с вашими предпочтениями, такие как сетевой адрес, маска сети и т. д.
Примечание. Адрес IPv4 в интерфейсе ниже — это IP-адрес вашего хост-компьютера.
В следующем интерфейсе вы можете настроить сервер DHCP, если вы хотите, чтобы гостевые машины использовали динамический IP-адрес (перед использованием убедитесь, что он включен). Но я рекомендую использовать статический IP-адрес для виртуальных машин.
Теперь нажмите ОК во всех интерфейсах сетевых настроек ниже, чтобы сохранить изменения.
Настройка сетевых параметров виртуальной машины
Примечание. Вы можете выполнить описанные ниже шаги для каждой виртуальной машины, которую вы хотите добавить в сеть для связи с хост-машиной.
Вернувшись в интерфейс диспетчера виртуальных ящиков, выберите свою гостевую виртуальную машину, например сервер Ubuntu 16.10 или CentOS 7, и щелкните меню Настройки.
Настройте адаптер для подключения виртуальной машины к хосту
Выберите параметр Сеть в интерфейсе выше. После этого настройте первую сетевую карту (Адаптер 1) со следующими параметрами:
- Отметьте параметр \Включить сетевой адаптер, чтобы включить его.
- В поле Прикреплено к: выберите Адаптер только для хоста
- Затем выберите имя сети: vboxnet0
Как показано на снимке экрана ниже, нажмите OK, чтобы сохранить настройки:
Настройка адаптера для подключения виртуальной машины к Интернету
Затем добавьте вторую сетевую карту (адаптер 2), чтобы подключить виртуальную машину к Интернету через хост. Используйте настройки ниже:
- Отметьте параметр \Включить сетевой адаптер, чтобы активировать его.
- В поле Подключено к: выберите NAT
Настройка статического IP-адреса для гостевой виртуальной машины
На этом этапе включите гостевую виртуальную машину, войдите в систему и настройте статический IP-адрес. Запустите команду ниже, чтобы отобразить все интерфейсы на гостевой машине и выделенные IP-адреса:
На снимке экрана выше видно, что на виртуальной машине включены три интерфейса:
- lo – петлевой интерфейс
- enp0s3 (адаптер 1) — для связи только с хостом, использующей DHCP, установленный на одном из предыдущих шагов, а затем настроенный со статическим IP-адресом.
- enp0s8 (Адаптер 2) — для подключения к Интернету. По умолчанию будет использоваться DHCP.
В Debian/Ubuntu/Linux Mint
Важно: здесь я использовал сервер Ubuntu 16.10: IP-адрес: 192.168.56.5.
Откройте файл /etc/network/interfaces в своем любимом редакторе с правами суперпользователя:
$ sudo vi /etc/network/interfaces
Используйте следующие настройки интерфейса enp0s3 (используйте здесь предпочтительные значения):
auto enp0s3 iface enp0s3 inet static address 192.168.56.5 network 192.168.56.0 netmask 255.255.255.0 gateway 192.168.56.1 dns-nameservers 8.8.8.8 192.168.56.1
Затем перезапустите сетевые службы следующим образом:
$ sudo systemctl restart networking
Либо перезагрузите систему и внимательно проверьте, использует ли интерфейс новые IP-адреса:
В RHEL/CentOS/Fedora
Важно. Для этого раздела я использовал CentOS 7: IP-адрес: 192.168.56.10.
Начните с открытия файла для enp0s3 — сетевого интерфейса только для хоста; /etc/sysconfig/network-scripts/ifcfg-enp0s3 в вашем любимом редакторе с правами суперпользователя:
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
Создайте/измените следующие настройки (используйте здесь предпочтительные значения):
BOOTPROTO=static ONBOOT=yes IPADDR=192.168.56.10 NETWORK=192.168.56.0 NETMASK=255.255.255.0 GATEWAY=192.168.56.1 DNS=8.8.8.8 192.168.56.1 NM_CONTROLLED=no #use this file not network manager to manage interface
Сохраните файл и выйдите. Затем перезапустите сетевую службу следующим образом (вы также можете перезагрузиться):
$ sudo systemctl restart network.service
Проверьте, использует ли интерфейс новые IP-адреса, следующим образом:
Управление виртуальными машинами с хоста с помощью SSH
На хост-компьютере используйте SSH для управления виртуальными машинами. В следующем примере я получаю доступ к серверу CentOS 7 (192.168.56.10) с помощью SSH:
Вот и все! В этом посте мы описали простой способ настройки сети между гостевой виртуальной машиной и хостом. Поделитесь своими мыслями об этом уроке, используя раздел обратной связи ниже.
VirtualBox: виртуальная локальная сеть, доступ в интернет через Linux-сервер
Представляю вашему вниманию продолжение своей предыдущей статьи. Здесь мы рассмотрим, как выпустить хосты в интернет через сервер с помощью утилиты iptables и как фильтровать входящие, исходящие или проходящие соединения.
Считаю важным сказать, что статья лишь демонстрирует, как могут работать некоторые сетевые технологии в Linux. Моральное и физическое устаревание описанных технологий никак не помешает вынести что-то полезное из приведенной информации.
В уже построенной сети настроим будем настраивать межсетевой экран, иногда его называют брандмауэр или файрвол.
Немного теории
Iptables — это, можно сказать, фильтр, через который проходят сетевые пакеты. Эти пакеты могут быть входящими (INPUT), исходящими (OUTPUT) или проходящими (FORWARD).
INPUT, OUTPUT и FORWARD — это три основные цепочки, есть еще две дополнительные цепочки POSTROUTING и PREROUTING. В первую пакет попадает тогда, когда он уже прошел через FORWARD, во вторую — когда еще неизвестно, куда из трех основных цепочек он попадет.
Также в iptables есть 4 таблицы: raw, mangle, nat, filter. Рассматривать их подробно сейчас не имеет смысла, так как будут использоваться только две из них: filter и nat. Таблица filter используется по умолчанию, а ее название говорит само за себя.
Самая наглядная информация — графическая, поэтому предлагаю ознакомиться с маршрутом прохождения пакетов с помощью следующей картинки:
Действия, которые можно совершать с пакетами:
- ACCEPT — принять пакет
- DROP — удалить пакет
- REJECT — отклонить пакет с сообщением отправителю
- LOG — сделать запись о пакете в лог-файл
- QUEUE — отправить пакет пользовательскому приложению
При необходимости советую посетить следующую ссылку для получения более исчерпывающей информации: Настройка iptables для чайников.
Вывод хоста в интернет
Посмотрим, как по умолчанию выглядят цепочки iptables по умолчанию:
После Chain идет название цепочки, а в скобках — политика по умолчанию. Chain INPUT (policy ACCEPT) значит, что по умолчанию входящие пакеты принимаются, а Chain FORWARD (policy DROP) значило бы, что проходящие через сервер пакеты удалятся. Состояние файрвола можно смотреть несколькими способами (второй, на мой взгляд, нагляднее):
iptables-save iptables -L -nv
Выводить хосты из локальных сетей в интернет будем через сервер. Для этого необходимо сделать так, чтобы пакеты шли в интернет от хоста через сервер, сервер заменял ip-адрес хоста на свой и отправлял в интернет как бы от своего имени. Для этого используется следующая команда:
iptables -t nat -j POSTROUTING -o eth0 -j MASQUERADE
Указывать при этом следует тот сетевой интерфейс, который на сервере уже смотрит в интернет (например, если eth0 — сетевой мост или NAT).
На хостах стоит проверить маршрутизацию командой route:
Если нет маршрута по умолчанию, то его следует добавить:
route add default gw 192.168.1.10 dev eth0
gw — адрес сервера, dev eth0 — интерфейс, связанный с сервером. Затем стоит пропинговать публичный DNS-сервер Google, чтобы убедиться, что выход в интернет есть. Обратите внимание, что на сервере должна быть разрешена пересылка пакетов в настройках ядра (echo 1 > /proc/sys/net/ipv4/ip_forward), а также политика цепочки FORWARD должна быть ACCEPT (на данном этапе).
Ограничение проходящих пакетов
Стоит сказать, что правила iptables иногда перекрывают друг друга. Например, если сначала вы затем запретили абсолютно все пакеты, а затем разрешили пакеты по протоколу HTTP, то по HTTP пакеты идти не будут. Происходит это потому, что когда пакет приходит в таблицу filter, в первую очередь он натыкается на первое прописанное правило (на то, которое запрещает абсолютно всё). По этому правилу пакет удаляется, и до разрешающего правила пакет уже не добирается.
Поэтому иногда легче установить политику по умолчанию, которая запретит проходить всем пакетам, а затем вручную прописать правила для отдельных типов пакетов.
iptables -P FORWARD DROP iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
В данном случае всё просто: первая команда — политика для цепочки FORWARD, вторая — разрешаем HTTP (80 порт) по tcp. Всё, теперь проходят только HTTP-пакеты
Более сложный пример
Сначала ограничим все проходящие пакеты, а затем постараемся пропинговать Яндекс по доменному имени ya.ru. В таком случае, необходимо вручную включить FORWARD icmp-пакетов и DNS-пакетов, а также определить, откуда брать доменные имена. Доменные имена будем брать с уже известного адреса 8.8.8.8, дописав параметры в файл /etc/hosts:
echo "8.8.8.8 nameserver" >> /etc/hosts
Разрешать пинг и DNS-пакеты будем следующими командами:
iptables -P FORWARD DROP iptables -A FORWARD -p icmp -j ACCEPT iptables -A FORWARD -p tcp --dport 53 -j ACCEPT iptables -A FORWARD -p udp --dport 53 -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Важно разрешить пересылку пакетов по 53 порту не только по tcp, но и по udp. Я не до конца уверен, с чем именно это связано, но если сделать иначе, то пинг по доменному имени не сработает. Последнее же правило нужно, чтобы разрешить перенаправление пакетов, которые являются частью установленных соединений или связаны с ними. Это важно для поддержания работоспособности уже установленных соединений, а также для обработки ответных пакетов или пакетов, проходящих через систему и перенаправляемых между сетями.
Стоит быть особенно внимательным при настройке iptables, ведь, например, можно забыть открыть 21 порт при тестировании соединений утилитой telnet. Также не стоит забывать об использовании iptables-save и iptables-restore, чтобы сохранять текущее состоянии файрвола в текстовый файл и в любой удобный момент восстанавливать предыдущее состояние.
iptables-save > firewall_ver1.txt iptables-restore firewall_ver1.txt
Заключение
Это лишь малая часть из того, что можно рассказать про iptables, сетевые технологии и Linux. Некоторым представленным инструментам давно пора на пенсию, но для обучения на простых примерах они еще используются. При желании можно копнуть глубже и найти более грамотные и лаконичные решения для представленных мной задач, я лишь показал возможные варианты, знание которых мне бы сильно помогло на начальных этапах.