Лучший способ настроить Ubuntu 20.04 Dekstop Host и Ubuntu 20.04 Server Guest для доступа в Интернет, SSH и связи между хостом и гостем

Лучший способ настроить Ubuntu 20.04 Dekstop Host и Ubuntu 20.04 Server Guest для доступа в Интернет, SSH и связи между хостом и гостем

ОБНОВЛЯТЬ
В любом случае, если кто-то наткнется на этот пост. Решение ниже действительно работает, голосование против этого вопроса без какой-либо обратной связи / конструктивной критики или определения ошибок кажется неоправданным.

Цель

Мне нужен лучший способ настроить гостевую систему Ubuntu Server vbox6.1 для доступа в Интернет и разрешить хосту Ubuntu 20.04 Desktop подключаться к нему по протоколу SSH.

Прогресс / Исследования
Хотя очень распространенным решением является использование комбинаций из двух сетевых адаптеров с серверами VirtualBox для установления связи между хостом и гостем и доступа к Интернету для VirtualBox, эти распространенные методы имеют определенные оговорки.

Метод комбинированного мостового адаптера и адаптера NAT - безусловно, самый простой и быстрый метод, но он сопровождается оговоркой, что если вы используете killswitch с вашим брандмауэром UFW / VPN, то очень часто вам придется настраивать параметры брандмауэра в зависимости от того, к какой сети Wi-Fi вы подключены, поскольку адреса шлюзов меняются (обычная проблема для тех, кто использует статические IP-адреса на vbox). Если вы очень хорошо разбираетесь в правилах брандмауэра, то этот метод для вас.

Метод комбинированного адаптера NAT и адаптера только для хоста - адаптер NAT обеспечивает легкий доступ к Интернету внутри коробки, а адаптер только для хоста обеспечивает гостевые соединения хоста для таких приложений, как apache. Предостережение здесь в том, что некоторые приложения настраиваются на основе IP-адреса основного адаптера при установке (это моя текущая проблема) и поскольку IP-адрес NAT не может связаться с хостом, это создает проблему.

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

ЗНАЧЕНИЕ
ОДИНvboxnet0 — адаптер только для хоста, обеспечивающий SSH, связь хост-гость и внешний доступ в Интернет для любого количества vbox со статическими или динамическими IP-адресами... Больше никаких проблем с подключением vbox.

Вот плюсы и минусы, а также мои шаги по прогрессу.

Шаг 1
Создайте хост-адаптер для вашего компьютера (vboxnet0). У меня IP-адрес 192.168.51.1

ЗА:
у вас есть возможность включить DHCP-сервер, если вы планируете иметь несколько vbox на одном хост-адаптере

Шаг 2:
Создайте статический IP-адрес для вашего vbox (у меня Ubuntu 20.04 server). Вы можете пропустить этот шаг и просто использовать динамический IP-адрес

Я использую

network:
  version: 2
  renderer: networkd
  ethernets:
        enp0s3:
            addresses: ['192.168.51.47/24']
            gateway4: 192.168.51.1
            nameservers:
                addresses: [127.0.0.1, 192.168.51.1, 8.8.8.8]

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

Шаг третий

Создайте простое, минимальное правило брандмауэра UFW для взаимодействия хоста и гостя

Это все, что требуется для настройки хост-адаптера для работы с UFW:

ufw allow allow in|out on vboxnet0

Профи

  • Используя этот метод, вы можете мгновенно создать связь хост-гость для нескольких vbox, используя одно правило брандмауэра, при условии, что каждый ящик находится на vboxnet0 (отлично, если вы планируете создать много vbox, которым требуется связь хост-гость)

Шаг четвертый
Создаватьпостоянныйдоступ в интернет для vboxnet0 путем совместного использования основного сетевого адаптера хост-компьютера с помощью MASQUERADE

Это мой текущийПРОБЛЕМА. Я могу создать только временный доступ в Интернет для vboxnet0, потому что я просто недостаточно знаком с таблицами IP и MASQUERADE.

В качестве временного решения я использую эти 4 команды внутри bash-скрипта:

sudo iptables -A FORWARD -o wg0 -i vboxnet0 -s 192.168.51.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

Где wg0 — основной сетевой адаптер моего хост-компьютера.

На этом этапе вы должны иметь возможность выполнить ping 8.8.8.8 изнутри vbox, чтобы убедиться, что у него есть доступ в Интернет.

Я получил вышеуказанные команды от:
https://help.ubuntu.com/community/Internet/ConnectionSharing

Может ли кто-нибудь доработать/отполировать метод создания доступа в Интернет для одного или нескольких vbox с использованием адаптера только для хоста?

Кажется, это может помочь многим пользователям ubunutu. С этим методом ваши vboxes "сетевой портативный" и иметь доступ к Интернету с минимальными усилиями после первоначальной настройки.

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

решение1

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

В любом случае, недавно у меня возникло требование к программному обеспечению для адаптера host-only для virtualbox с доступом в интернет. Это означает, что широко используемый метод с двумя адаптерами не подойдет. Решая эту проблему, я, по сути, наткнулся на супербезопасную, суперудобную и суперэффективную среду разработки ubuntu/virtualbox. Я публикую все свои шаги ниже, чтобы помочь другим веб-разработчикам, которые ищут более эффективную среду веб-разработки.

Для начала краткий обзор:

Метод комбинирования мостового адаптера и адаптера NAT

Плюсы:

  • Легко и быстро настроить, если вы опытный пользователь UFW

Минусы:

  • требуется настроить 2 сетевых интерфейса внутри гостевой ОС
  • У гостя со статическими IP-адресами могут возникнуть проблемы при смене сетей Wi-Fi из-за значений шлюза.
  • требуется более сложная настройка брандмауэра
  • поощряет использование /etc/hostsдля разрешения локальных доменных имен (со временем становится громоздким)

Адаптер NAT и адаптер только для хоста

Плюсы:

  • Легко настроить
  • Минимальная конфигурация брандмауэра

Минусы:

  • требуется настроить 2 сетевых интерфейса внутри гостевой ОС
  • некоторые программные пакеты используют IP-адрес по умолчанию при установке, поэтому адреса по умолчанию 10.XXX не подходят
    (в моей ситуации создание пользовательского адреса NAT через настройки VirtualBox не помогло бы, так как мое программное обеспечение устанавливается только на адрес NAT по умолчанию, а адрес NAT не маршрутизируется и не доступен хосту)
  • требуется более сложная настройка брандмауэра
  • поощряет использование /etc/hostsдля разрешения локальных доменных имен (со временем становится громоздким)

Наиболее эффективное решение:
Один хост-адаптер с доступом в Интернет.

адаптер только для хоста с методом доступа в интернет

Плюсы:

  • один адаптер для всех гостей
  • упрощенная конфигурация брандмауэра
  • упрощенное взаимодействие гостей
  • гостевые системы ведут себя скорее как серверы prod, которые обычно имеют один сетевой интерфейс «eth0»
  • полное исключение /etc/hostsиспользования

Минусы:

  • более сложная первоначальная конфигурация.

Поняв все вышесказанное, давайте начнем:

Я предполагаю:

  1. у вас установлена ​​последняя версия virtualbox
  2. у тебяМежсетевой экран UFW с VPN KillSwitchуже настроено. (Обратите внимание на раздел «Маскарад IP», мы вернемся к нему.)
  3. вы уже создали гостевой сервер в VirtualBox и добавили ключ SSH PUB для своего пользователя
  4. Веб-проект, готовый к веб-доступу внутри вашего гостя с доменом, заканчивающимся на «.test» (т.е. www.example.test)

Шаг 1

ВВиртуалбокс>Файлы>Менеджер хост-сетисоздайте хост-адаптер только для вашего компьютера (например, vboxnet0). Для этого руководства у меня будет IP-адрес 192.168.51.1

Шаг 2

ВVirtualbox > Настройки > Сеть, нажмите "Включить адаптер" для Адаптера 1 и для "Прикреплено к" выберите имя vboxnet0, которое вы создали в "Шаг 1"

Шаг 3

Создайте статический IP-адрес для вашего гостевого сервера (мой — сервер Ubuntu 20.04). Это необходимо для ssh и разрешения доменных имен, но вы можете использовать динамический IP-адрес, если вам не нужен ssh/dns.

Для Ubuntu Server я использую:

network:
  version: 2
  renderer: networkd
  ethernets:
        enp0s3:
            addresses: ['192.168.51.47/24']
            gateway4: 192.168.51.1  #**NOTE** Your vboxnet0 ip address is the gateway for your static ip address.
            nameservers:
                addresses: [127.0.0.1, 192.168.51.1, 8.8.8.8]

Помнить
Запустите #netplan applyи/или , #netplan --debug generateчтобы найти опечатки и ошибки.

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

Шаг четвертый

Создайте простое, минимальное правило брандмауэра UFW, которое позволит хост-гостевым соединениям. Это все, что требуется для настройки адаптера только для хоста для работы с UFW:

$sudo ufw allow in on vboxnet0 && sudo ufw allow out on vboxnet0

На этом этапе вам следует выполнить ping на статический IP-адрес вашего гостя с хоста и подключиться к хосту по SSH.

Тест с: ssh -p 22 -i ~/.ssh/id_rsa root@your-guest's-static-ip address

ping -c 5 your-guest's-static-ip address

Шаг пятый

Создайте постоянный доступ в интернет для vboxnet0, разделив основной сетевой адаптер хост-машины с помощью MASQUERADE. Когда вы настраивали свой vpn killswitch, вам пришлось использовать ip masquerading для адреса вашего vpn, отредактировав /etc/ufw/before.rules, мы снова отредактируем этот файл.

sudo nano /etc/ufw/before.rules

В этом разделе файла:

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

Добавлять:

-A POSTROUTING -s 192.168.51.1/24 -j MASQUERADE#ПРИМЕЧАНИЕэто IP-адрес вашего хост-адаптера vboxnet0, который действует как шлюз для статического IP-адреса вашего гостя.

Закрыть и сохранить файл

Теперь весь трафик 192.168.51.1 будет отправляться через основной сетевой интерфейс хоста, даже если он изменится (например, Wi-Fi вместо локальной сети)

Вы можете проверить это, открыв гостевую систему vbox и выполнив в командной строке:
ping -c 5 8.8.8.8

В случае успеха ваш хост-адаптер теперь имеет доступ в Интернет.

Шаг 6

Это последний шаг и, безусловно, самый сложный. На этом этапе единственное, что нужно сделать для того, чтобы ваша среда разработки веб-приложений virtualbox была готова к использованию, — это установить и настроить dnsmasq, чтобы доменные имена с вашего гостевого сервера могли быть разрешены локально.Боковая панельОчевидно, что dnsmasq можно использовать с методами комбинированных сетевых адаптеров, упомянутыми выше, чтобы исключить использование /etc/hosts, но при использовании одного адаптера только для хоста dnsmasq требуется для разрешения локальных доменных имен.

  1. Отключение и остановка systemd решены

    $ sudo systemctl отключить systemd-resolved
    $ sudo systemctl остановить systemd-resolved

  2. Удалить символическую ссылку /etc/resolv.confи удалить файл

    $ ls -lh /etc/resolv.conf
    $ sudo rm /etc/resolv.conf

  3. Создайте новый / etc/resolv.conсо следующими значениями:

    $ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf' #(разрешение доменных имен на хост-машине)

    $ sudo bash -c 'echo "nameserver 208.67.222.222" >> /etc/resolv.conf' #(IP-адрес публичного DNS-сервера OpenDNS для внешнего Интернета)

    $ sudo bash -c 'echo "nameserver your-guest's-static-ip address" >> /etc/resolv.conf'

  4. Установить dnsmasq

    $ sudo apt install dnsmasq

  5. Добавьте .test в файл конфигурации dnsmasq:

    $ sudo bash -c 'echo "address=/.test/статический-IP-адрес-вашего-гостя" >> /etc/dnsmasq.conf'

ПРИМЕЧАНИЕ: Разработчики мультисайтов на WordPress, которым необходимо разрешение доменов с подстановочными знаками, могут использовать:

$ sudo bash -c 'echo "address=/example.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
  1. Создайте распознаватель каталогов для статического IP-адреса гостя:

    $sudo mkdir -v /etc/resolver && sudo bash -c 'echo "nameserver your-guest's-static-ip address" > /etc/resolver/test'

  2. Перезапустите dnsmasq и сетевой менеджер.

    $ sudo systemctl перезапускает dnsmasq $ sudo systemctl перезапускает сетевой менеджер

  3. Проверьте настройку dnsmasq

а.) откройте браузер и убедитесь, что у вас все еще есть внешний доступ в Интернет

б) запустите, dig example.testи вы увидите статический IP-адрес вашего гостевого сервера.

в.) в браузере вашего хост-компьютера откройте example.test

ХЛОПНУТЬ!Сделанный.

С помощью этой среды веб-разработки вы можете изменять новые сети Wi-Fi по своему усмотрению без проблем с IP-адресами UFW/гостевых машин, у вас будет только один адаптер хоста, который вы будете использовать для всех будущих гостевых систем, вам будет проще объединять гостевые системы в сеть и вы полностью прекратите использовать файл /etc/hostsдля разрешения локальных доменных имен для своих проектов, поскольку это делается автоматически dnsmasq.

Мои источники:
https://unix.stackexchange.com/questions/304050/how-to-avoid-conflicts-between-dnsmasq-and-systemd-resolved
https://brunopaz.dev/blog/setup-a-local-dns-server-for-your-projects-on-linux-with-dnsmasq/
https://www.stevenrombauts.be/2018/01/use-dnsmasq-instead-of-etc-hosts/#configure-dnsmasq
https://linuxize.com/post/how-to-setup-a-firewall-with-ufw-on-ubuntu-20-04/
https://superuser.com/questions/1237463/virtualbox-host-only-with-internet
https://www.stevenrombauts.be/2018/01/use-dnsmasq-instead-of-etc-hosts/#configure-dnsmasq https://medium.com/soulweb-academy/docker-local-dev-stack-with-traefik-https-dnsmasq-locally-trusted-certificate-for-ubuntu-20-04-5f036c9af83d

Связанный контент