Puncte:-4

Cel mai bun mod de a configura Ubuntu 20.04 Dekstop Host și Ubuntu 20.04 Server Guest pentru a avea acces la internet, SSH și comunicare gazdă cu invitat

drapel tr

ACTUALIZAȚI
În orice caz, ar trebui să se întâmple cineva cu această postare. Soluția de mai jos, de fapt, funcționează, voturile negative pentru această întrebare fără feedback/critici constructive sau identificarea erorilor par nejustificate.

Poartă

Am nevoie de cea mai bună modalitate de a configura serverul ubuntu vbox6.1 guest pentru a avea acces la internet și pentru a permite gazda desktop ubuntu 20.04 să ssh în cutie.

Progres / Cercetare
Deși este o soluție foarte comună să folosești combinații de 2 adaptoare de rețea cu servere virtualbox pentru a stabili comunicații gazdă-oaspete și acces la internet pentru virtualbox, aceste metode comune au anumite avertismente.

Metoda combinată a adaptorului cu punte și a adaptorului NAT - de departe cea mai ușoară și rapidă metodă, dar vine cu avertismentul că, dacă utilizați un killswitch cu firewall/VPN UFW, atunci de foarte multe ori trebuie să ajustați setările firewall-ului în funcție de wi-fi. rețeaua la care sunteți conectat deoarece adresele gateway-ului se modifică (o problemă comună pentru cei care folosesc adrese IP statice pe vbox). Dacă ești foarte, bun cu regulile firewall-ului, atunci această metodă este pentru tine.

Metoda combinată de adaptor NAT și adaptor numai pentru gazdă - Adaptorul nat oferă acces ușor la internet în interiorul cutiei, iar adaptorul numai pentru gazdă oferă comunicații pentru oaspeți gazdă pentru aplicații precum apache. Avertismentul aici este că unele aplicații se configurează pe baza adresei IP a adaptorului primar la instalare (aceasta este problema mea actuala) și deoarece adresa IP NAT nu poate comunica cu gazda, acest lucru creează o problemă.

Soluția la care lucrez, care poate este puțin greu de configurat inițial, este configurarea unui adaptor numai pentru gazdă pentru a avea acces la internet prin adaptorul de rețea principal al gazdei.

SENS
UNU Adaptor vboxnet0 numai pentru gazdă pentru a oferi ssh, comunicare gazdă-oaspete și acces la internet în exterior pentru câte vbox-uri doriți, fie cu ip-uri statice, fie dinamice... gata de bătăi de cap cu conectivitate vbox.

Iată argumentele pro și contra, împreună cu pașii mei de progres.

Pasul 1
Creați un adaptor numai pentru gazdă pentru mașina dvs. (vboxnet0) A mea are adresa IP 192.168.51.1

PRO:
aveți opțiunea de a activa serverul DHCP dacă intenționați să aveți mai multe vbox-uri pe același adaptor numai pentru gazdă

Pasul 2:
Creați o configurație IP statică pentru vbox-ul dvs. (al meu este serverul Ubuntu 20.04). Opțional, puteți sări peste acest pas și doar să utilizați un ip dinamic

eu folosesc

reţea:
  versiunea: 2
  redator: în rețea
  ethernet:
        enp0s3:
            adrese: ['192.168.51.47/24']
            gateway4: 192.168.51.1
            servere de nume:
                adrese: [127.0.0.1, 192.168.51.1, 8.8.8.8]

Pro
Cu un ip static pe mașina dvs. puteți SSH în cutie, fără a utiliza un al doilea adaptor NAT.

Pasul trei

Creați o regulă UFW UFW ușoară și minimă pentru comunicațiile gazdă-oaspete

Acesta este tot ceea ce este necesar pentru a configura un adaptor numai pentru gazdă pentru a funcționa cu UFW:

ufw permit permite intrare/ieșire pe vboxnet0

Pro

  • Folosind această metodă, puteți crea instantaneu comunicații gazdă-oaspete pentru mai multe vbox-uri folosind o singură regulă de firewall, atâta timp cât fiecare casetă este pe vboxnet0 (excelent dacă intenționați să creați multe vbox-uri care necesită comunicare gazdă-oaspete)

Pasul patru
Crea permanent acces la internet pentru vboxnet0 prin partajarea adaptorului de rețea principal al mașinii gazdă folosind MASQUERADE

Acesta este curentul meu PROBLEMĂ. Nu pot crea decât acces temporar la internet pentru vboxnet0, deoarece nu sunt suficient de familiarizat cu tabelele IP și MASQUERADE.

Ca soluție temporară, folosesc aceste 4 comenzi în interiorul unui script bash:

sudo iptables -A FORWARD -o wg0 -i vboxnet0 -s 192.168.51.0/24 -m conntrack --ctstate NOU -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

Unde wg0 este adaptorul de rețea principal al mașinii mele gazdă.

În acest moment, ar trebui să puteți ping 8.8.8.8 din interiorul vbox-ului pentru a vă asigura că are acces la internet.

Am primit comenzile de mai sus de la:
https://help.ubuntu.com/community/Internet/ConnectionSharing

Poate cineva să termine/lustruiască metoda adaptorului doar pentru gazdă de a crea acces la internet pentru una sau mai multe vbox-uri?

Se pare că acest lucru ar putea ajuta mulți utilizatori ubunutu. Cu această metodă, vbox-urile dvs. sunt "portabil în rețea" și au acces la internet cu un efort minim după configurarea inițială.

Singura contra aici sunt: Configurarea inițială dificilă și vbox-urile nu sunt accesibile altor mașini de pe LAN, ceea ce este neglijabil dacă faceți doar dezvoltare web locală.

drapel in
Se pare că te străduiești prea mult. Cu VirtualBox, tot ce trebuie să faceți este să setați interfața de rețea (în setările VirtualBox) la âBridgedâ, faceți clic pe caseta de selectare Avansat, apoi setați âPromiscuous Modeâ la âAllow Allâ. Acesta este tot ce fac cu mașinile mele Ubuntu Server și sunt complet conectate și apar corect în rețea pentru gazdă și orice altă mașină care ar putea avea nevoie de acces
nightwatch avatar
drapel tr
Ai dreptate.. Am încercat mult prea mult... m-am gândit că... voi posta o soluție în scurt timp.
nightwatch avatar
drapel tr
@matigo Mi-am actualizat postarea... soluția mea este „aproape” bună... Pur și simplu nu pot să fac ssh peste NAT și nu există niciun motiv aparent.
drapel in
Noua întrebare ar trebui să fie o întrebare *nouă*...
nightwatch avatar
drapel tr
destul de corect.. Voi edita... și voi pune o nouă întrebare... O voi face doar ca o continuare a obiectivului meu inițial...
nightwatch avatar
drapel tr
@matigo ești bun cu tabele IP și ip masquerade?
drapel in
Nu am avut niciodată nevoie să mă încurc cu tabelele IP sau cu mascarada când folosesc VM-uri VirtualBox și am dezvoltat acest fel de... (numărează degetele) ... cel puțin un deceniu. Poate că ar trebui să scriu pas cu pas modul în care îmi configurez mașinile VirtualBox, care sunt destul de portabile, deoarece tind să le expediez pe NAS atunci când nu sunt folosite și să le import pe diferite mașini (Ubuntu și MacOS). ) când este necesar...
nightwatch avatar
drapel tr
Un pas cu pas clar ar fi grozav pentru cei care sunt începători în dezvoltarea web locală vbox. Cu toate acestea, am obținut acces permanent la internet pentru adaptorul meu numai pentru gazdă, adăugând comenzile mele de la pasul 4 la /etc/rc-local. Deci, în principiu, problema este rezolvată. Pur și simplu nu-mi plac hack-urile. În orice caz, pot să ssh, să creez adrese IP statice/dinamice pentru mai multe casete, să am instantaneu o comunicare gazdă-oaspete și să-mi fac munca pe orice rețea wi-fi fără a ajusta firewall-ul, folosind pur și simplu vboxnet0 ca adaptor. Voi posta configurația mea /etc/rc.local puțin mai târziu.
nightwatch avatar
drapel tr
@matigo Am spart pasul 4 mai devreme astăzi... lucrând cu o ultimă piesă a puzzle-ului și voi publica un pas cu pas complet...într-un mediu de dezvoltare foarte grozav folosind un singur adaptor pentru gazdă. Pasul 4 a fost o linie simplă într-un fișier de configurare.
nightwatch avatar
drapel tr
@matigo vezi probleme/probleme cu răspunsul meu de mai jos?
Puncte:2
drapel 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

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.