Vagrant ローカルシステムで既存の開発ツール(エディター、ブラウザー、デバッガーなど)を引き続き使用できるため、開発者とDevOpsエンジニアの間で非常に人気があります。たとえば、開発者はファイルをゲストマシンからローカルシステムに同期し、お気に入りのエディターを使用してそれらのファイルを編集し、最後にゲストマシンに同期することができます。同様に、VM上にWebアプリケーションを作成した場合は、ローカルシステムのWebブラウザーからそのアプリケーションにアクセスしてテストできます。このガイドでは、ローカルホストシステムからゲストマシンへのアクセスを提供するためにVagrantでネットワークを構成する方法を説明します。
Vagrantでネットワークを構成する
Vagrantは、次の3つのネットワークオプションを提供します。
- ポートフォワーディング
- プライベートネットワーク(ホストのみのネットワーク)
- パブリックネットワーク(ブリッジネットワーク)
1。ポートフォワーディングを構成する
デフォルトでは、vagrant ssh
指図。 SSH経由でVMにアクセスすると、Vagrantはポート22をゲストマシンからホストマシンの開いているポートに転送します。これはポートフォワーディングと呼ばれます。 Vagrantは、ユーザーの介入なしにこのポート転送プロセスを自動的に処理します。選択した特定のポートを転送することもできます。たとえば、ポート 80を転送した場合 ゲストマシンでポート8080に ホストマシンで、 http:// localhost:8080 に移動して、Webサーバーにアクセスできます。 ホストマシン上。
ポートフォワーディングは「Vagrantfile」で設定できます。 Vagrantプロジェクトディレクトリに移動し、お気に入りのエディターでVagrantfileを開きます。
次の行を見つけます:
Vagrant.configure("2") do |config| [...] # config.vm.network "forwarded_port", guest: 80, host: 8080 end
コメントを外し、どのポートをどこに転送するかを定義します。この例では、ゲストのポート80をホストのポート8080に転送しています。
Vagrant.configure("2") do |config| [...] config.vm.network "forwarded_port", guest: 80, host: 8080 end
次に、更新されたVagrantfileを使用してVagrantマシンを再起動します。
$ vagrant reload --provision
出力にポート転送が設定されていることがわかります:
==> default: Halting domain… ==> default: Starting domain. ==> default: Waiting for domain to get an IP address… ==> default: Waiting for SSH to become available… ==> default: Creating shared folders metadata… ==> default: Forwarding ports… ==> default: 80 (guest) => 8080 (host) (adapter eth0) ==> default: Rsyncing folder: /home/sk/myvagrants/ => /vagrant
VMを破棄し、更新されたVagrantfileを使用して再実行することもできます:
$ vagrant destroy <VM-name>
$ vagrant up
次に、コマンドを使用してゲストマシンにSSHで接続します:
$ vagrant ssh
その中にApacheWebサーバーをインストールします。 VMがDebベースの場合は、次を実行します。
$ sudo apt install apache2
RHELベースのシステムの場合は、次のコマンドを実行します:
$ sudo yum install httpd
Apacheサービスを開始します:
$ sudo systemctl enable --now httpd
次に、ホストシステムでWebブラウザーを開き、 http:// localhost:8080に移動します。 ブラウザからのアドレス。ブラウザにApacheテストページが表示されます。
URL http:// localhost:8080を使用してWebサーバーにアクセスしますが ホストシステムでは、ローカルWebサーバーからは提供されません。実際のWebサイト(つまり、Apacheテストページ)はゲスト仮想マシンから提供され、すべての実際のネットワークデータがゲストに送信されます。
1.1。ポート8080が別のアプリケーションで使用されている場合はどうなりますか?
前の例では、ポート80をゲストからホストのポート8080に転送しました。つまり、ポート8080に送信されたトラフィックは、実際にはゲストマシンのポート80に転送されます。他のアプリケーションが現在ポート8080を使用している場合はどうなりますか?複数のVMを実行している場合、ポートの衝突が発生します。すでに使用されているポートを無意識のうちに転送する可能性があります。心配ない! Vagrantには、ポートの衝突を検出するためのサポートが組み込まれています。ポートがすでに別のアプリケーションによって使用されている場合、Vagrantはそれを出力で報告するため、ポートを解放するか、別のポートを使用することができます。
Vagrantも賢く、ポートの衝突を自動的に見つけて修正するのに十分です。ポートが別のポートと衝突していることが検出されると、他の未使用のポートを使用して自動修正されます。
自動修正を有効にするには、オプションauto_correct: true
を追加します。 Vagrantfileのポート転送定義にあります。
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true
デフォルトでは、Vagrantはポート 2200の間で自動修正ポートを選択します およびポート2250 範囲。以下のようにVagrantfileで次の行を定義することにより、独自のカスタム範囲を選択することもできます。
config.vm.usable_port_range = (2200..2250)
Vagrantマシンを再起動して、変更を有効にします:
1.2。ネットワークプロトコルを変更する
デフォルトでは、Vagrantはポート転送にTCPプロトコルを使用します。ただし、UDPパケットを転送する場合は、UDPプロトコルを使用できます。
UDPポートを使用するには、Vagrantfileに次の定義を追加します。
config.vm.network "forwarded_port", guest: 80, host: 8080,auto_correct:
true
protocol: "udp"
VagrantVMを再起動して変更を適用します。
2。プライベートネットワークを構成する
プライベートネットワークまたはホストオンリーネットワークでは、ホストシステムとホストシステム上のVMの間にネットワーク接続が作成されます。プライベートネットワークは、ホストオペレーティングシステムから見える仮想ネットワークアダプターを使用して作成されます。ネットワーク上の他のシステムはVMと通信できません。すべてのネットワーク操作は、ホストシステム内で許可されています。
プライベートネットワークはDHCPサーバーとしても機能し、独自のサブネットを持っています。プライベートネットワーク内の各VMは、このIPスペースからIPアドレスを取得します。そのため、ホストシステムのIPを使用してVMに直接アクセスできます。
静的IPアドレスを使用してVagrantでプライベートネットワークまたはホストオンリーネットワークを構成するには、Vagrantfileを開き、次の行を見つけてコメントを解除します。
config.vm.network "private_network", ip: "192.168.121.60"
ここでは、 192.168.121.60 VMのIPアドレスです。これを自分のIPに置き換えてください。
VMを再起動して、変更を有効にします。
DHCPからIPアドレスを自動的に設定する場合は、プライベートネットワークの定義を次のように変更します。
config.vm.network "private_network", type: "dhcp"
ランダムなIPアドレスがVMに割り当てられます。 VMのIPを見つけるには、vagrant ssh
コマンドを実行し、ip
コマンド。
3。パブリックネットワークを構成する
パブリックネットワークまたはブリッジネットワークでは、すべてのVMがホストマシンと同じネットワークになります。各VMは、DHCPサーバーから独自のIPアドレスを受け取ります(ローカルネットワークで利用可能な場合)。したがって、すべてのVMは、ネットワーク上の別の物理システムのように機能し、ネットワーク内の任意のシステムと通信できます。
パブリックネットワークまたはブリッジネットワークを構成するには、Vagrantfileを編集し、次の行を見つけてコメントを外します。
config.vm.network "public_network"
ファイルを保存して閉じます。 VMを再起動して、変更を適用します。 VMは自動的にIPアドレスを取得します。
静的IPを設定する場合は、次のようにネットワーク定義を変更するだけです。
config.vm.network "public_network", ip: "192.168.121.61"
4。ホスト名を設定
config.vm.hostname
を使用してホスト名を定義できます Vagrantfileの設定。
好みのエディターでVagrantfileを編集し、次の行を追加/変更します。
config.vm.hostname = "myhost.ostechnix.example"
ファイルを保存して閉じます。上記の定義により、myhost.ostechnix.example
が追加されます /etc/hosts
の行 ファイル。
Vagrant VMを再起動して、変更を有効にします。
ホスト名が変更されているかどうかを確認します:
[[email protected] ~]$ hostname -f
myhost.osechnix.example
/etc/hosts
の内容を直接確認することもできます ファイル。
$ cat /etc/hosts
出力例:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.1.1 myhost.osechnix.example myhost
5。複数のネットワークオプションを有効にする
各ネットワークオプションには、独自の長所と短所があります。何らかの理由で、すべてのネットワークオプションを単一のVMに構成したい場合があります。その場合、Vagrantには複数のネットワークオプションを有効にする機能があります。以下のように、Vagrantfileでネットワークオプションを1つずつ定義するだけです。
config.vm.hostname = "myhost.ostechnix.example" config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true config.vm.network "private_network", ip: "192.168.121.60"
このVagrantfileを使用して新しいVMを作成すると、vagrantは次のネットワーク詳細を使用してVMを作成します。
- ホスト名をmyhost.ostechnix.exampleとして設定
- ポートフォワーディングを構成する
- 静的IP192.168.121.60でプライベートを構成する
複数の種類のネットワークを構成するだけでなく、複数のネットワークを定義することもできます。たとえば、以下のように、IPアドレスが異なる複数のホストオンリーネットワークを定義できます。
config.vm.network "private_network", ip: "192.168.121.60" config.vm.network "private_network", ip: "192.168.121.61"
お役に立てれば。この段階で、Vagrantネットワークの種類と、コマンドラインからVagrantでネットワークを構成する方法についての基本的な考え方を理解しているかもしれません。学ぶべきことがもっとあります。より詳細な構成については、Vagrantの公式ドキュメントを確認することをお勧めします。