アップデート
いずれにせよ、誰かがこの投稿に遭遇した場合、以下の解決策は実際に機能するため、フィードバックや建設的な批判、エラーの特定なしにこの質問に反対票を投じることは不当に思われます。
ゴール
インターネット アクセスができるように Ubuntu サーバー vbox6.1 ゲストを設定し、Ubuntu 20.04 デスクトップ ホストがボックスに SSH 接続できるようにするための最適な方法が必要です。
進捗状況 / 研究
2 つのネットワーク アダプターの組み合わせを VirtualBox サーバーと併用して、VirtualBox のホストとゲスト間の通信とインターネット アクセスを確立することは非常に一般的なソリューションですが、これらの一般的な方法には特定の注意点があります。
ブリッジ アダプターと NAT アダプターの組み合わせ方法 - これまでで最も簡単で最速の方法です。ただし、UFW ファイアウォール/VPN でキルスイッチを使用する場合、ゲートウェイ アドレスが変更されるため、接続している Wi-Fi ネットワークに基づいてファイアウォール設定を調整する必要があることがよくあります (vbox で静的 IP アドレスを使用している場合によくある問題)。ファイアウォール ルールに精通している場合は、この方法が最適です。
NAT アダプタとホストオンリーアダプタの組み合わせ方法 - NAT アダプタはボックス内での簡単なインターネット アクセスを提供し、ホストオンリーアダプタは Apache などのアプリケーションにホスト ゲスト通信を提供します。ここでの注意点は、一部のアプリケーションはインストール時にプライマリ アダプタ IP アドレスに基づいて構成されることです (これが私の現在の問題です) NAT IP アドレスはホストと通信できないため、問題が発生します。
私が取り組んでいる解決策は、最初は設定が少し難しいかもしれませんが、ホストのプライマリ ネットワーク アダプター経由でインターネットにアクセスできるようにホスト専用アダプターを構成することです。
意味
1つvboxnet0 ホスト専用アダプターは、静的または動的 IP のいずれかを使用して、必要な数の vbox に SSH、ホストとゲスト間の通信、および外部のインターネット アクセスを提供します。これで、vbox の接続で頭を悩ませる必要がなくなります。
ここに、私の進捗手順とともに、長所と短所を示します。
ステップ1
マシン用のホストオンリーアダプターを作成します(vboxnet0)私のマシンのIPアドレスは192.168.51.1です
プロ:
同じホストオンリーアダプタに複数のvboxを設置する予定の場合は、DHCPサーバーを有効にするオプションがあります。
ステップ2:
vboxの静的IP設定を作成します(私のはUbuntu 20.04サーバーです)。この手順を省略して、動的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 があれば、2 番目の NAT アダプターを使用せずにボックスに SSH 接続できます。
ステップ3
ホストとゲスト間の通信のための簡単で最小限の UFW ファイアウォール ルールを作成する
ホストオンリー アダプターを UFW で動作するように構成するために必要なのはこれだけです。
ufw allow allow in|out on vboxnet0
プロ
- この方法を使用すると、各ボックスが vboxnet0 上にある限り、単一のファイアウォール ルールを使用して複数の vbox のホストとゲストの通信を即座に作成できます (ホストとゲストの通信を必要とする多数の vbox を作成する予定の場合に最適です)。
ステップ4
作成する永続MASQUERADE を使用してホスト マシンのプライマリ ネットワーク アダプタを共有することで、vboxnet0 のインターネット アクセスを実現します。
これは私の現在の問題私は IP テーブルと MASQUERADE に十分精通していないため、vboxnet0 に一時的なインターネット アクセスを作成することしかできません。
一時的な解決策として、bash スクリプト内で次の 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 POSTROUTING
sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
ここで、wg0 はホスト マシンのプライマリ ネットワーク アダプターです。
この時点で、vbox 内から 8.8.8.8 に ping を実行して、インターネットにアクセスできるかどうかを確認できるはずです。
上記のコマンドは以下から取得しました:
https://help.ubuntu.com/community/Internet/ConnectionSharing
1 つまたは複数の vbox にインターネット アクセスを作成するホスト専用アダプター方式を完成させたり、改良したりできる人はいますか?
これは多くの ubunutu ユーザーの役に立つようです。この方法では、vbox は「ネットワークポータブル初期設定後は最小限の労力でインターネットにアクセスできるようになります。
唯一の短所初期設定が難しいことと、LAN 上の他のマシンから vbox にアクセスできないこと (ローカル Web 開発のみを行っている場合は、これは無視できる程度です) です。
答え1
このソリューションは、Ubuntu 開発者の生活をより便利かつ安全にすることを目的としています。Web 開発に Ubuntu を使用したい人にとっては、これはかなり一般的な質問なので、管理者や他の人が私の元の質問に再度投票してくれることを願っています。
いずれにせよ、最近、インターネットにアクセスできる VirtualBox 用のホスト専用アダプターのソフトウェア要件がありました。つまり、広く使用されているデュアルアダプター方式では不十分です。この問題を解決している間に、私は非常に安全で、非常に便利で、非常に効率的な ubuntu/virtualbox 開発環境に偶然出会いました。より効率的な Web 開発環境を求めている他の Web 開発者の役に立つように、以下にすべての手順を掲載します。
まず、簡単に概要を説明します。
ブリッジアダプタとNATアダプタの組み合わせ方法
長所:
- UFWに精通していれば、セットアップは簡単かつ迅速です
短所:
- ゲスト内に2つのネットワークインターフェースを設定する必要があります
- 静的 IP アドレスを持つゲストは、ゲートウェイ値が原因で Wi-Fi ネットワークの変更に問題が発生する可能性があります。
- ファイアウォールのより高度な設定が必要
/etc/hosts
ローカルドメイン名を解決するためにの使用を推奨します(時間が経つにつれて面倒になります)
NAT アダプタとホストオンリーアダプタ
長所:
- セットアップが簡単
- 最小限のファイアウォール構成
短所:
- ゲスト内に2つのネットワークインターフェースを設定する必要があります
- 一部のソフトウェア パッケージはインストール時にデフォルトの IP を使用するため、デフォルトの 10.XXX アドレスは適していません
(私の状況では、VirtualBox の設定でカスタム NAT アドレスを作成しても役に立ちません。ソフトウェアはデフォルトの NAT アドレスにのみインストールされ、NAT アドレスはルーティング可能ではなく、ホストにアクセスできないためです)。 - ファイアウォールのより高度な設定が必要
/etc/hosts
ローカルドメイン名を解決するためにの使用を推奨します(時間が経つにつれて面倒になります)
最も効率的なソリューション:
インターネットにアクセスできる単一のホスト専用アダプター。
インターネット アクセス方式を備えたホストオンリー アダプタ
長所:
- すべてのゲストに1つのアダプター
- 簡素化されたファイアウォール設定
- ゲストのネットワークを簡素化
- ゲストは、通常単一のネットワークインターフェース「eth0」を持つ本番サーバーのように動作します。
/etc/hosts
使用の完全な排除
短所:
- 初期設定がより困難になります。
上記を理解した上で、始めましょう:
私は次のように仮定します:
- 最新バージョンのVirtualBoxがインストールされています
- あなたが持っているVPN キルスイッチを備えた UFW ファイアウォールすでに設定されています。(IP マスカレードのセクションに注意してください。後で再度説明します。)
- すでにVirtualBoxにゲストサーバーを作成し、ユーザーのSSH pubキーを追加しています。
- ゲスト内でWebアクセス可能なWebプロジェクトで、ドメイン末尾が「.test」であるもの(つまり www.example.test)
ステップ1
でバーチャルボックス>ファイル>ホストネットワークマネージャーマシン用のホストオンリーアダプターを作成します(例:vboxnet0)。このガイドでは、IPアドレスは192.168.51.1になります。
ステップ2
でVirtualbox > 設定 > ネットワーク、 クリック "アダプタを有効にするアダプタ1の場合は「」、アダプタ2の場合は「に添付「で作成したvboxnet0名を選択してください」ステップ1「
ステップ3
ゲスト サーバー (私のサーバーは Ubuntu 20.04) の静的 IP 構成を作成します。これは SSH とドメイン名解決に必要ですが、SSH/DNS が不要な場合は動的 IP を使用できます。
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
、タイプミスやエラーを見つけます。
設定が有効になっていることを確認するには、ゲストを再起動してください。
ステップ4
簡単で最小限の UFW ファイアウォール ルールを作成して、ホストとゲスト間の通信を有効にします。これは、UFW で動作するようにホスト専用アダプターを構成するために必要なすべてです。
$sudo ufw allow in on vboxnet0 && sudo ufw allow out on vboxnet0
この時点で、ホストからゲストの静的 IP に ping を実行し、ホストに SSH 接続する必要があります。
テスト対象:
ssh -p 22 -i ~/.ssh/id_rsa root@your-guest's-static-ip address
ping -c 5 your-guest's-static-ip address
ステップ5
MASQUERADE を使用してホスト マシンのプライマリ ネットワーク アダプターを共有することにより、vboxnet0 の永続的なインターネット アクセスを作成します。VPN キルスイッチを構成するときに、編集して VPN のアドレスに IP マスカレードを使用する必要がありました/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 と LAN)、そのインターフェイスを介して送信されます。
これをテストするには、vbox ゲストにアクセスし、コマンド ラインで次のコマンドを実行します。
ping -c 5 8.8.8.8
成功した場合、ホストオンリーアダプタはインターネットにアクセスできるようになります。
ステップ6
これは最後のステップであり、これまでで最も複雑なステップです。この時点で、VirtualBox Web 開発環境を使用可能にするのに必要なことは、ゲスト サーバーのドメイン名をローカルで解決できるように dnsmasq をインストールして構成することだけです。サイドバーdnsmasq は、明らかに、 の使用を排除するために、上記の組み合わせネットワーク アダプター メソッドで使用できます/etc/hosts
が、単一のホスト専用アダプターを使用する場合は、ローカル ドメイン名を解決するために dnsmasq が必要です。
systemd を無効化して停止する問題が解決しました
$ sudo systemctl systemd-resolved を無効にします
$ sudo systemctl systemd-resolved を停止しますシンボリックリンクを削除して
/etc/resolv.conf
ファイルを削除する$ ls -lh /etc/resolv.conf
$ sudo rm /etc/resolv.confetc/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' #(インターネット外部の OpenDNS パブリック DNS サーバー IP)
$ sudo bash -c 'echo "nameserver your-guest's-static-ip address" >> /etc/resolv.conf'
dnsmasqをインストールする
$ sudo apt install dnsmasq
dnsmasq 構成ファイルに .test を追加します。
$ sudo bash -c 'echo "address=/.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
注記: ワイルドカード ドメイン解決を必要とする WordPress マルチサイトを開発している人は、以下を使用できます。
$ sudo bash -c 'echo "address=/example.test/your-guest's-static-ip address" >> /etc/dnsmasq.conf'
ゲストの静的 IP アドレスのディレクトリ リゾルバを作成します。
$sudo mkdir -v /etc/resolver && sudo bash -c 'echo "nameserver your-guest's-static-ip address" > /etc/resolver/test'
dnsmasqとnetwork-managerを再起動します
$ sudo systemctl dnsmasqを再起動します $ sudo systemctl network-managerを再起動します
dnsmasq の設定をテストする
a.) ブラウザを開いて、外部インターネットアクセスがまだあることを確認します
b.) 実行すると、dig example.test
ゲストサーバーの静的IPアドレスが表示されるはずです。
c.) ホストマシンのブラウザでexample.testを開きます。
バン!終わり。
この Web 開発環境を使用すると、ufw/ゲスト IP アドレスの問題なしに Wi-Fi ネットワークを自由に変更でき、今後作成するすべてのゲストで使用するホスト専用アダプターが 1 つだけになり、ゲストをより簡単にネットワーク接続でき、/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