Score:-4

วิธีที่ดีที่สุดในการกำหนดค่า Ubuntu 20.04 Dekstop Host & Ubuntu 20.04 Server Guest เพื่อให้มีการเข้าถึงอินเทอร์เน็ต, SSH และ Host to Guest Communication

ธง tr

อัปเดต
ไม่ว่าในกรณีใดใครก็ตามควรสะดุดกับโพสต์นี้ วิธีแก้ปัญหาด้านล่างใช้งานได้จริง การลงคะแนนเสียงสำหรับคำถามนี้โดยไม่มีข้อเสนอแนะ / คำวิจารณ์เชิงสร้างสรรค์หรือการระบุข้อผิดพลาดดูเหมือนจะไม่ยุติธรรม

เป้าหมาย

ฉันต้องการวิธีที่ดีที่สุดในการตั้งค่าผู้เยี่ยมชมเซิร์ฟเวอร์อูบุนตู vbox6.1 เพื่อเข้าถึงอินเทอร์เน็ตและเปิดใช้งานโฮสต์เดสก์ท็อปอูบุนตู 20.04 เพื่อ ssh ลงในกล่อง

ความก้าวหน้า/การวิจัย
แม้ว่าจะเป็นวิธีการแก้ปัญหาทั่วไปในการใช้อะแดปเตอร์เครือข่าย 2 ตัวร่วมกับเซิร์ฟเวอร์ virtualbox เพื่อสร้างการสื่อสารระหว่างโฮสต์กับแขกและการเข้าถึงอินเทอร์เน็ตสำหรับ virtualbox วิธีการทั่วไปเหล่านี้มีข้อแม้บางประการ

วิธีคอมโบของอะแดปเตอร์บริดจ์และอะแดปเตอร์ NAT - เป็นวิธีที่ง่ายที่สุดและเร็วที่สุด แต่ก็มีข้อแม้ว่าหากคุณใช้ killswitch กับไฟร์วอลล์ UFW / VPN บ่อยครั้งที่คุณต้องปรับการตั้งค่าไฟร์วอลล์ตาม Wi-Fi ใด เครือข่ายที่คุณเชื่อมต่ออยู่เนื่องจากที่อยู่เกตเวย์เปลี่ยนไป (ปัญหาทั่วไปสำหรับผู้ที่ใช้ที่อยู่ IP แบบคงที่บน vbox) หากคุณเก่งกฎไฟร์วอลล์มาก วิธีนี้เหมาะสำหรับคุณ

วิธีคอมโบอแด็ปเตอร์ NAT และอแดปเตอร์เฉพาะโฮสต์ - อแดปเตอร์ nat ให้การเข้าถึงอินเทอร์เน็ตที่ง่ายดายภายในกล่อง และอแดปเตอร์เฉพาะโฮสต์ให้การสื่อสารของผู้เยี่ยมชมที่เป็นโฮสต์สำหรับแอปต่างๆ เช่น apache ข้อแม้ที่นี่คือบางแอปพลิเคชันกำหนดค่าตัวเองตามที่อยู่ IP ของอแด็ปเตอร์หลักเมื่อทำการติดตั้ง (นี่คือปัญหาปัจจุบันของฉัน) และเนื่องจากที่อยู่ IP ของ NAT ไม่สามารถสื่อสารกับโฮสต์ได้ สิ่งนี้จึงสร้างปัญหา

วิธีแก้ไขที่ฉันกำลังดำเนินการอยู่ ซึ่งอาจจะยากเล็กน้อยในการตั้งค่าในตอนแรก คือการกำหนดค่าอแด็ปเตอร์สำหรับโฮสต์เท่านั้นให้มีการเข้าถึงอินเทอร์เน็ตผ่านอแด็ปเตอร์เครือข่ายหลักของโฮสต์

ความหมาย
หนึ่ง อะแดปเตอร์ vboxnet0 สำหรับโฮสต์เท่านั้นเพื่อให้ ssh การสื่อสารระหว่างโฮสต์กับแขก และการเข้าถึงอินเทอร์เน็ตภายนอกสำหรับ vbox ได้มากเท่าที่คุณต้องการด้วย ips แบบคงที่หรือไดนามิก... ไม่ต้องปวดหัวกับการเชื่อมต่อ vbox อีกต่อไป

นี่คือ Pro's & Cons พร้อมกับขั้นตอนความคืบหน้าของฉัน

ขั้นตอนที่ 1
สร้างอะแดปเตอร์สำหรับโฮสต์เท่านั้นสำหรับเครื่องของคุณ (vboxnet0) ของฉันมีที่อยู่ IP 192.168.51.1

มือโปร:
คุณมีตัวเลือกในการเปิดใช้เซิร์ฟเวอร์ DHCP หากคุณวางแผนที่จะมี vbox หลายตัวในอะแด็ปเตอร์เฉพาะโฮสต์เดียวกัน

ขั้นตอนที่ 2:
สร้างการกำหนดค่า ip แบบคงที่สำหรับ vbox ของคุณ (ของฉันคือเซิร์ฟเวอร์ Ubuntu 20.04) คุณสามารถเลือกข้ามขั้นตอนนี้และใช้ IP แบบไดนามิกได้

ฉันใช้

เครือข่าย:
  รุ่น: 2
  เรนเดอร์: เครือข่าย
  อีเธอร์เน็ต:
        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 น้อยที่สุดและง่ายดายสำหรับการสื่อสารระหว่างโฮสต์และแขก

นี่คือทั้งหมดที่จำเป็นสำหรับการกำหนดค่าอะแด็ปเตอร์โฮสต์เท่านั้นเพื่อทำงานกับ UFW:

ufw อนุญาตให้เข้า | ออกบน vboxnet0

มือโปร

  • เมื่อใช้วิธีนี้ คุณสามารถสร้างการสื่อสารระหว่างโฮสต์กับแขกสำหรับ vbox หลายรายการได้ทันทีโดยใช้กฎไฟร์วอลล์เดียว ตราบใดที่แต่ละกล่องอยู่บน vboxnet0 (ดีมากหากคุณวางแผนที่จะสร้าง vbox จำนวนมากที่ต้องการการสื่อสารระหว่างโฮสต์กับแขก)

ขั้นตอนที่สี่
สร้าง ถาวร การเข้าถึงอินเทอร์เน็ตสำหรับ vboxnet0 โดยการแบ่งปันอะแดปเตอร์เครือข่ายหลักของเครื่องโฮสต์โดยใช้ MASQUERADE

นี่คือปัจจุบันของฉัน ปัญหา. ฉันสามารถสร้างการเข้าถึงอินเทอร์เน็ตชั่วคราวสำหรับ vboxnet0 เท่านั้น เพราะฉันไม่คุ้นเคยกับตาราง ip และ MASQUERADE มากพอ

เป็นวิธีแก้ปัญหาชั่วคราว ฉันใช้ 4 คำสั่งเหล่านี้ภายในสคริปต์ทุบตี:

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 การโพสต์
sudo iptables -t nat -A โพสต์ -o wg0 -j MASQUERADE

โดยที่ wg0 คืออะแดปเตอร์เครือข่ายหลักของเครื่องโฮสต์ของฉัน

ณ จุดนี้ คุณควรสามารถ ping 8.8.8.8 จากภายใน vbox เพื่อให้แน่ใจว่ามีการเข้าถึงอินเทอร์เน็ต

ฉันได้รับคำสั่งข้างต้นจาก:
https://help.ubuntu.com/community/Internet/ConnectionSharing

ใครสามารถเสร็จสิ้น / ขัดเกลาวิธีอะแดปเตอร์โฮสต์เท่านั้นในการสร้างการเข้าถึงอินเทอร์เน็ตสำหรับหนึ่งหรือหลาย vboxes

ดูเหมือนว่าสิ่งนี้สามารถช่วยผู้ใช้อูบุนตูจำนวนมากได้ ด้วยวิธีนี้ vboxes ของคุณคือ "เครือข่ายแบบพกพา" และเข้าถึงอินเทอร์เน็ตได้โดยใช้ความพยายามน้อยที่สุดหลังจากการกำหนดค่าเริ่มต้น

เพียง ข้อเสีย นี่: การตั้งค่าเริ่มต้นที่ยากลำบาก & vboxes ไม่สามารถเข้าถึงได้โดยเครื่องอื่นบน LAN ของคุณ ซึ่งไม่สำคัญหากคุณเพิ่งทำการพัฒนาเว็บในพื้นที่

in flag
ดูเหมือนว่าคุณกำลังพยายามมากเกินไป ด้วย VirtualBox สิ่งที่คุณต้องทำคือตั้งค่าอินเทอร์เฟซเครือข่าย (ในการตั้งค่า VirtualBox) เป็น âBridgedâ คลิกช่องทำเครื่องหมายขั้นสูง จากนั้นตั้งค่า âโหมดที่ไม่สำรวมเป็น âAllow Allâ นี่คือทั้งหมดที่ฉันทำกับ Ubuntu Server VM ของฉัน และพวกมันเชื่อมต่ออย่างสมบูรณ์และปรากฏอย่างถูกต้องบนเครือข่ายสำหรับโฮสต์และเครื่องอื่นๆ ที่อาจจำเป็นต้องเข้าถึง
nightwatch avatar
tr flag
คุณถูกต้อง .. ฉันพยายามอย่างหนักเกินไป ... ฉันคิดออกแล้ว ... จะโพสต์วิธีแก้ปัญหาในไม่ช้า
nightwatch avatar
tr flag
@matigo ฉันอัปเดตโพสต์ของฉัน ... โซลูชันของฉัน "เกือบ" ดี ... ฉันไม่สามารถ ssh ผ่าน NAT ได้และไม่มีเหตุผลที่ชัดเจน
in flag
คำถามใหม่ควรเป็นคำถาม *ใหม่* จริงๆ ...
nightwatch avatar
tr flag
พอใช้.. ฉันจะแก้ไข...และตั้งคำถามใหม่... ฉันแค่เป็นการสานต่อเป้าหมายเดิมของฉัน...
nightwatch avatar
tr flag
@matigo คุณเก่งเรื่อง IP table และ ip masquerade ไหม?
in flag
ฉันไม่เคยต้องวุ่นวายกับตาราง IP หรือการปลอมตัวเมื่อใช้ VirtualBox VM และฉันพัฒนาด้วยวิธีนี้มา ... (นับนิ้ว) ... อย่างน้อยหนึ่งทศวรรษ บางทีฉันควรจะเขียนทีละขั้นตอนเกี่ยวกับวิธีกำหนดค่าเครื่อง VirtualBox ของฉัน ซึ่งค่อนข้างพกพาได้ เนื่องจากฉันมักจะส่งมันไปยัง NAS เมื่อไม่ได้ใช้งานและนำเข้ามันในเครื่องต่างๆ (Ubuntu & MacOS ) เมื่อต้องการ ...
nightwatch avatar
tr flag
ทีละขั้นตอนที่ชัดเจนจะดีสำหรับผู้ที่ยังใหม่กับการพัฒนาเว็บ vbox ในพื้นที่ อย่างไรก็ตาม ฉันได้รับการเข้าถึงอินเทอร์เน็ตถาวรของอแด็ปเตอร์สำหรับโฮสต์เท่านั้นโดยเพิ่มคำสั่งขั้นตอนที่ 4 ไปที่ /etc/rc-local ดังนั้นโดยพื้นฐานแล้วปัญหาจะได้รับการแก้ไข ฉันไม่ชอบแฮ็ค ไม่ว่าในกรณีใด ฉันสามารถ ssh, สร้างที่อยู่ IP แบบคงที่/ไดนามิกสำหรับหลาย ๆ กล่อง, มีการสื่อสารระหว่างโฮสต์กับแขกได้ทันที และทำงานของฉันบนเครือข่าย wi-fi ใด ๆ โดยไม่ต้องปรับไฟร์วอลล์ เพียงแค่ใช้ vboxnet0 เป็นอะแดปเตอร์ ฉันจะโพสต์ /etc/rc.local config ของฉันในภายหลัง
nightwatch avatar
tr flag
@matigo ฉันถอดรหัสขั้นตอนที่ 4 ก่อนหน้านี้แล้ววันนี้... ไขปริศนาชิ้นสุดท้ายแล้วฉันจะเผยแพร่ทีละขั้นตอนอย่างเต็มรูปแบบ...ไปสู่สภาพแวดล้อม dev ที่ยอดเยี่ยมมากโดยใช้อะแด็ปเตอร์โฮสต์เดียวเท่านั้น .. ขั้นตอนที่ 4 เป็นแบบซับในไฟล์ปรับแต่ง ..
nightwatch avatar
tr flag
@matigo เห็นปัญหา / ปัญหาใด ๆ กับคำตอบของฉันด้านล่าง?
Score: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

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา