Рейтинг:-4

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

флаг tr

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

Цель

Мне нужен лучший способ настроить гостевой сервер ubuntu vbox6.1, чтобы иметь доступ в Интернет и включить хост рабочего стола ubuntu 20.04 для ssh в поле.

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

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

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

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

СМЫСЛ
ОДИН Адаптер vboxnet0 только для хоста для обеспечения ssh, связи между хостом и гостем и внешнего доступа в Интернет для любого количества vbox, которое вы хотите, со статическим или динамическим ips ... больше никаких головных болей с подключением vbox.

Вот плюсы и минусы вместе с моими шагами.

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

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

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

Я использую

сеть:
  версия: 2
  визуализатор: сетевой
  Ethernet:
        enp0s3:
            адреса: ['192.168.51.47/24']
            шлюз4: 192.168.51.1
            серверы имен:
                адреса: [127.0.0.1, 192.168.51.1, 8.8.8.8]

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

Шаг третий

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

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

ufw разрешить вход | выход на vboxnet0

Про

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

Шаг четвертый
Создавать постоянный доступ в Интернет для 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 ПРИНЯТЬ
sudo iptables -A FORWARD -m conntrack --ctstate УСТАНОВЛЕНО, СВЯЗАННО -j ПРИНЯТЬ
sudo iptables -t nat -F РАЗМЕЩЕНИЕ
sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

Где wg0 — основной сетевой адаптер моей хост-машины.

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

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

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

Похоже, это может помочь многим пользователям Ubuntu. С помощью этого метода ваши vbox'ы "сетевой портативный" и иметь доступ к Интернету с минимальными усилиями после первоначальной настройки.

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

флаг in
Похоже, вы слишком стараетесь. С VirtualBox все, что вам нужно сделать, это установить сетевой интерфейс (в настройках VirtualBox) на «Мост», установить флажок «Дополнительно», затем установить «Неразборчивый режим» на «Разрешить все». Это все, что я делаю со своими виртуальными машинами Ubuntu Server, и они полностью подключены и правильно отображаются в сети для хоста и любой другой машины, которой может потребоваться доступ.
nightwatch avatar
флаг tr
Вы правы .. Я слишком старался ... Я подумал ... чуть позже опубликую решение.
nightwatch avatar
флаг tr
@matigo Я обновил свой пост ... мое решение «почти» хорошее ... Я просто не могу использовать ssh через NAT, и для этого нет видимой причины.
флаг in
Новый вопрос действительно должен быть * новым * вопросом ...
nightwatch avatar
флаг tr
достаточно справедливо .. Я отредактирую ... и задам новый вопрос ... Я просто продолжаю свою первоначальную цель ...
nightwatch avatar
флаг tr
@matigo ты хорошо разбираешься в IP-таблицах и IP-маскараде?
флаг in
Мне никогда не приходилось возиться с IP-таблицами или маскироваться при использовании виртуальных машин VirtualBox, и я разрабатывал этот метод в течение ... (считает пальцы) ... как минимум десять лет. Возможно, мне следует просто написать пошаговое описание того, как я настраиваю свои машины VirtualBox, которые довольно портативны, поскольку я обычно отправляю их в NAS, когда они не используются, и импортирую их на разные машины (Ubuntu и MacOS). ) при необходимости...
nightwatch avatar
флаг tr
Четкое пошаговое руководство было бы полезно для новичков в локальной веб-разработке vbox. Тем не менее, я получил постоянный доступ в Интернет для адаптера только для хоста, добавив команды шага 4 в /etc/rc-local. Итак, в принципе проблема решена. Я просто не люблю хаки. В любом случае, я могу использовать ssh, создавать статические/динамические IP-адреса для нескольких ящиков, мгновенно устанавливать связь между хостом и гостем и выполнять свою работу в любой сети Wi-Fi без настройки брандмауэра, просто используя vboxnet0 в качестве адаптера. Чуть позже выложу свой конфиг /etc/rc.local.
nightwatch avatar
флаг tr
@matigo Сегодня я взломал шаг 4 ... работаю над последней частью головоломки, и я опубликую полноценный шаг за шагом ...в очень потрясающую среду разработки с использованием адаптера только для одного хоста. Шаг 4 был простым одним вкладышем в файле конфигурации.
nightwatch avatar
флаг tr
@matigo видите какие-либо проблемы / проблемы с моим ответом ниже?
Рейтинг:2
флаг tr

This solution is meant to make the life of ubuntu developers a lot more convenient & secure. I hope an admin and/or others will see fit vote my original question back up as it is a pretty common question for folks who want to use Ubuntu for web development.

In any case, I recently had the software requirement for a host-only adapter for virtualbox with internet access. Meaning the widely used dual-adapter method wouldn't suffice. While solving this problem, I essentially stumbled upon a super secure, super convenient, and super efficient ubuntu/virtualbox dev environment. I am posting all of my steps below to help other web developers who are seeking a more efficient web dev environment.

First off, a quick overview:

Bridged adapter & NAT adapter Combo Method

Pros:

  • Easy & quick to set up, if you are proficient with UFW

Cons:

  • requires 2 network interfaces to be configure inside guest
  • guest with static ip addresses might have issues changing wi-fi networks due to gateway values
  • requires more advanced configuration of firewall
  • encourages use of /etc/hosts to resolve local domain names (gets cumbersome over time)

NAT adapter & host-only adapter

Pros:

  • Easy to set-up
  • Minimal firewall configuration

Cons:

  • requires 2 network interfaces to be configured inside guest
  • some software packages utilize default ip on installation, so default 10.X.X.X addresses not suitable
    (in my situation creating a custom NAT address through virtualbox preferences wouldn't help, as my software only installs on the default NAT address and NAT address isn't routeable, accessible to the host)
  • requires more advanced configuration of firewall
  • encourages use of /etc/hosts to resolve local domain names (gets cumbersome over time)

The Most Efficient Solution:
Single host-only adapter with Internet access.

host-only adapter w. internet access method

Pros:

  • single adapter for all guests
  • simplified firewall config
  • simplified networking of guests
  • guest behave more like prod servers that usually have a single network interface "eth0"
  • complete elimination of /etc/hosts use

Cons:

  • more difficult initial configuration.

With the above understood, lets get started:

I will assume:

  1. you have the latest version of virtualbox installed
  2. you have a UFW firewall with VPN KillSwitch already configured. (Pay attention to the IP Masquerade section, we will re-visit it.)
  3. you have have already created a guest server in virtualbox & added an ssh pub key for your user
  4. A web project ready for web access inside your guest with a domain ending with ".test" (i.e. www.example.test)

Step 1

In Virtualbox > Files > Host Network Manager create a host-only adapter for your machine (i.e. vboxnet0) For this guide mine will have the IP address of 192.168.51.1

Step 2

In Virtualbox > Settings > Network, click "Enable Adapter" for Adapter 1 and for "Attached to" select the vboxnet0 name that you created in "Step 1"

Step 3

Create a static ip config for your guest server (mine is Ubuntu 20.04 server). This is necessary for ssh and domain name resolution, but you can use dynamic ip if you don't need ssh/dns.

For Ubuntu Server, I am using:

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]

Remember
Run #netplan apply and/or #netplan --debug generate to find your typos & errors.

Reboot your guest to be sure settings take affect.

Step Four

Create easy, minimal UFW firewall rule enable host-guest communications. This is all that is required to configure a host-only adapter to work with UFW:

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

At this point you should ping your guest's static ip from the host and ssh in into host.

Test with: ssh -p 22 -i ~/.ssh/id_rsa root@your-guest's-static-ip address

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

Step Five

Create permanent internet access for vboxnet0 by sharing host machine's primary network adapter using MASQUERADE. When you configured your vpn killswitch you had to use ip masquerading for your vpn's address by editing /etc/ufw/before.rules, we will edit this file again.

sudo nano /etc/ufw/before.rules

In this section of the file:

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

Add:

-A POSTROUTING -s 192.168.51.1/24 -j MASQUERADE #NOTEthis is the ip address of your vboxnet0 host-only adapter, which acts as the gateway for your guest's static ip address.

Close & Save the file

Now all traffic 192.168.51.1 will be sent through the host's primary network interface even if it changes (i.e. wi-fi vs lan)

You can test this by accessing your vbox guest and on the command line, running:
ping -c 5 8.8.8.8

If successful, your host-only adpater now has internet access.

Step 6

This is the final step and by far the most most complex. At this point, the only thing that needs to be done for your virtualbox web dev environment to be ready for use is to install and configure dnsmasq so that domain names from your guest server can be resolved locally.Sidebar dnsmasq can obviously be used with the combo network adapter methods mentioned above as to eliminte use of /etc/hosts, but when using a single host-only adapter, dnsmasq is required to resolve local domain names.

  1. Disable & stop systemd resolved

    $ sudo systemctl disable systemd-resolved
    $ sudo systemctl stop systemd-resolved

  2. Remove symlink on /etc/resolv.conf & remove the file

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

  3. Create a new /etc/resolv.con with the following values:

    $ sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolv.conf' #(host machine resolution of doman names)

    $ sudo bash -c 'echo "nameserver 208.67.222.222" >> /etc/resolv.conf' #(OpenDNS public dns server ip for outside internet)

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

  4. Install dnsmasq

    $ sudo apt install dnsmasq

  5. Add .test to the dnsmasq config file:

    $ sudo bash -c 'echo "address=/.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'

NOTE: Folks developing wordpress multisites that need wildcard domain resolution can use:

$ sudo bash -c 'echo "address=/example.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
  1. Create a directory resolver for the guest's static ip address:

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

  2. Restart dnsmasq and network-manager

    $ sudo systemctl restart dnsmasq $ sudo systemctl restart network-manager

  3. Test your dnsmasq set-up

a.) open your browser and confirm that you still have outside internet access

b.) run dig example.test you should be able to see the static ip address of your guest server

c.) in your host machine's browser open example.test

BANG! Done.

With this web dev environment you can change wi-fi newtworks at will without ufw/guest ip address issues, you have only one host-only adapter that you use on all future guests you create, more easily network guests together, and completely stop using the /etc/hosts file to resolve local domain names for your projects, since it is done automatically by dnsmasq.

My sources:
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

Ответить или комментировать

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