Điểm:-4

Cách tốt nhất để định cấu hình Ubuntu 20.04 Máy chủ Dekstop & Máy chủ Ubuntu 20.04 Khách để có quyền truy cập Internet, SSH và Giao tiếp giữa máy chủ với khách

lá cờ tr

CẬP NHẬT
Trong mọi trường hợp, nếu bất cứ ai vấp phải bài đăng này. Trên thực tế, giải pháp dưới đây thực sự hiệu quả, bỏ phiếu cho câu hỏi này mà không có bất kỳ phản hồi/chỉ trích mang tính xây dựng hoặc xác định lỗi nào có vẻ không chính đáng.

Ghi bàn

Tôi cần cách tốt nhất để thiết lập máy khách vbox6.1 của máy chủ Ubuntu để có quyền truy cập internet và kích hoạt máy chủ lưu trữ trên máy tính để bàn Ubuntu 20.04 để ssh vào hộp.

Tiến độ / Nghiên cứu
Mặc dù giải pháp rất phổ biến là sử dụng kết hợp 2 bộ điều hợp mạng với máy chủ hộp ảo để thiết lập liên lạc máy chủ-khách và truy cập internet cho hộp ảo, nhưng các phương pháp phổ biến này có một số lưu ý nhất định.

phương pháp kết hợp bộ điều hợp cầu nối & bộ điều hợp NAT - cho đến nay là phương pháp dễ nhất và nhanh nhất, nhưng nó đi kèm với lời cảnh báo rằng nếu bạn sử dụng killswitch với tường lửa UFW / VPN của mình, thì bạn thường phải điều chỉnh cài đặt tường lửa dựa trên wi-fi nào mạng bạn đã kết nối do địa chỉ cổng thay đổi (vấn đề phổ biến đối với những người sử dụng địa chỉ ip tĩnh trên vbox). Nếu bạn rất giỏi với các quy tắc tường lửa, thì phương pháp này là dành cho bạn.

Phương pháp kết hợp bộ điều hợp NAT & bộ điều hợp chỉ dành cho máy chủ - Bộ điều hợp nat cung cấp khả năng truy cập internet dễ dàng bên trong hộp và bộ điều hợp chỉ dành cho máy chủ lưu trữ cung cấp thông tin liên lạc của máy chủ dành cho khách cho các ứng dụng như apache. Thông báo trước ở đây là một số ứng dụng tự định cấu hình dựa trên địa chỉ IP của bộ điều hợp chính khi cài đặt (đây là vấn đề hiện tại của tôi) và vì địa chỉ IP NAT không thể giao tiếp với máy chủ, điều này tạo ra sự cố.

Giải pháp mà tôi đang thực hiện, ban đầu có thể hơi khó thiết lập, là định cấu hình bộ điều hợp chỉ dành cho máy chủ để có quyền truy cập internet thông qua bộ điều hợp mạng chính của máy chủ.

Ý NGHĨA
MỘT bộ điều hợp chỉ dành cho máy chủ vboxnet0 để cung cấp ssh, giao tiếp máy chủ-khách và truy cập internet bên ngoài cho bao nhiêu vbox mà bạn muốn với ip tĩnh hoặc động... không còn phải đau đầu về kết nối vbox nữa.

Đây là Ưu điểm & Nhược điểm cùng với các bước tiến bộ của tôi.

Bước 1
Tạo bộ điều hợp chỉ lưu trữ cho máy của bạn (vboxnet0) Địa chỉ IP của tôi là 192.168.51.1

CHUYÊN NGHIỆP:
bạn có tùy chọn bật máy chủ DHCP nếu bạn dự định có nhiều vbox trên cùng một bộ điều hợp chỉ lưu trữ trên máy chủ

Bước 2:
Tạo cấu hình ip tĩnh cho vbox của bạn (của tôi là máy chủ Ubuntu 20.04). Bạn có thể tùy chọn bỏ qua bước này và chỉ cần sử dụng một ip động

tôi đang dùng

mạng:
  phiên bản: 2
  trình kết xuất: mạng
  ethernet:
        enp0s3:
            địa chỉ: ['192.168.51.47/24']
            cổng4: 192.168.51.1
            máy chủ tên:
                địa chỉ: [127.0.0.1, 192.168.51.1, 8.8.8.8]

chuyên nghiệp
Với một ip tĩnh trên máy của bạn, bạn có thể SSH vào hộp mà không cần sử dụng bộ điều hợp NAT thứ hai.

Bước thứ ba

Tạo quy tắc tường lửa UFW dễ dàng, tối thiểu cho liên lạc giữa máy chủ và khách

Đây là tất cả những gì cần thiết để định cấu hình bộ điều hợp chỉ lưu trữ để hoạt động với UFW:

ufw cho phép cho phép vào|ra trên vboxnet0

chuyên nghiệp

  • Sử dụng phương pháp này, bạn có thể ngay lập tức tạo giao tiếp giữa máy chủ và khách cho nhiều vbox bằng cách sử dụng một quy tắc tường lửa duy nhất miễn là mỗi hộp nằm trên vboxnet0 (thật tuyệt nếu bạn định tạo nhiều vbox cần giao tiếp giữa máy chủ và khách)

Bước bốn
Tạo ra dài hạn truy cập internet cho vboxnet0 bằng cách chia sẻ bộ điều hợp mạng chính của máy chủ bằng cách sử dụng MASQUERADE

Đây là hiện tại của tôi VẤN ĐỀ. Tôi chỉ có thể tạo quyền truy cập internet tạm thời cho vboxnet0 vì tôi không đủ quen thuộc với các bảng ip và MASQUERADE.

Là một giải pháp tạm thời, tôi đang sử dụng 4 lệnh này bên trong tập lệnh bash:

Sudo iptables -A FORWARD -o wg0 -i vboxnet0 -s 192.168.51.0/24 -m conntrack --ctstate MỚI -j CHẤP NHẬN
sudo iptables -A FORWARD -m conntrack --ctstate ĐÃ THÀNH LẬP, LIÊN QUAN -j CHẤP NHẬN
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

Trong đó wg0 là bộ điều hợp mạng chính của máy chủ của tôi.

Tại thời điểm này, bạn sẽ có thể ping 8.8.8.8 từ bên trong vbox để đảm bảo rằng nó có quyền truy cập internet.

Tôi đã nhận được các lệnh trên từ:
https://help.ubuntu.com/community/Internet/ConnectionSharing

Ai đó có thể hoàn thành/đánh bóng phương pháp bộ điều hợp chỉ lưu trữ để tạo quyền truy cập internet cho một hoặc nhiều vbox không?

Có vẻ như điều này có thể giúp rất nhiều người dùng ubunutu. Với phương pháp này, vbox của bạn là "mạng xách tay" và có quyền truy cập internet với nỗ lực tối thiểu sau khi cấu hình ban đầu.

Duy nhất khuyết điểm đây là: Thiết lập ban đầu khó khăn & vbox không thể truy cập được đối với các máy khác trong mạng LAN của bạn, điều này không đáng kể nếu bạn chỉ đang phát triển web cục bộ.

lá cờ in
Có vẻ như bạn đang cố gắng quá sức. Với VirtualBox, tất cả những gì bạn cần làm là đặt giao diện mạng (trong cài đặt VirtualBox) thành âBridgedâ, nhấp vào hộp kiểm Nâng cao, sau đó đặt âPromiscuous Modeâ thành âAllow Allâ. Đây là tất cả những gì tôi làm với máy ảo Ubuntu Server của mình và chúng được kết nối đầy đủ và xuất hiện chính xác trên mạng cho máy chủ và bất kỳ máy nào khác có thể cần quyền truy cập
nightwatch avatar
lá cờ tr
Bạn đã đúng .. Tôi đã cố gắng hết sức ... Tôi đã tìm ra nó ... sẽ đăng một giải pháp sau một chút.
nightwatch avatar
lá cờ tr
@matigo Tôi đã cập nhật bài đăng của mình... giải pháp của tôi "gần như" tốt... Tôi không thể ssh qua NAT và không có lý do rõ ràng.
lá cờ in
Câu hỏi mới thực sự phải là một câu hỏi *mới* ...
nightwatch avatar
lá cờ tr
đủ công bằng.. Tôi sẽ chỉnh sửa... và đặt một câu hỏi mới... Tôi chỉ coi đó là phần tiếp theo của mục tiêu ban đầu của mình...
nightwatch avatar
lá cờ tr
@matigo bạn có giỏi về bảng IP và giả trang ip không?
lá cờ in
Tôi chưa bao giờ phải loay hoay với các bảng IP hoặc giả trang khi sử dụng máy ảo VirtualBox và tôi đã phát triển theo cách này trong ... (đếm ngón tay) ... ít nhất một thập kỷ. Có lẽ tôi chỉ nên viết từng bước về cách định cấu hình các máy VirtualBox của mình, những máy này khá di động vì tôi có xu hướng chuyển chúng đến NAS khi chúng không được sử dụng và nhập chúng trên nhiều máy khác nhau (Ubuntu & MacOS ) khi cần thiết ...
nightwatch avatar
lá cờ tr
Từng bước rõ ràng sẽ rất phù hợp với những người mới phát triển web vbox cục bộ. Tuy nhiên, tôi đã nhận được quyền truy cập internet vĩnh viễn của bộ điều hợp chỉ lưu trữ trên máy chủ bằng cách thêm các lệnh bước 4 của mình vào /etc/rc-local. Vì vậy, về cơ bản vấn đề đã được giải quyết. Tôi chỉ không thích hack. Trong mọi trường hợp, tôi có thể ssh, tạo địa chỉ ip tĩnh/động cho nhiều hộp, liên lạc giữa máy chủ và khách ngay lập tức và thực hiện công việc của mình trên bất kỳ mạng wi-fi nào mà không cần điều chỉnh tường lửa, chỉ bằng cách sử dụng vboxnet0 làm bộ điều hợp. Tôi sẽ đăng cấu hình /etc/rc.local của mình sau một chút.
nightwatch avatar
lá cờ tr
@matigo Tôi đã giải quyết được bước 4 sớm hơn ngày hôm nay... đang giải quyết một mảnh ghép cuối cùng và tôi sẽ xuất bản từng bước đầy đủ...đến một môi trường nhà phát triển rất tuyệt vời bằng cách sử dụng một bộ chuyển đổi chỉ lưu trữ duy nhất.. Bước 4 là một lớp lót đơn giản trong tệp cấu hình..
nightwatch avatar
lá cờ tr
@matigo thấy bất kỳ vấn đề/vấn đề nào với câu trả lời của tôi bên dưới?
Điểm:2
lá cờ 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

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.