web-dev-qa-db-ja.com

Vagrantでのみブリッジアダプターを使用する必要があります。NATなし

だから私は私のMAC本で 'hashicorp/precise64'の自慢の設定で問題を抱えている。

まず、私の設定:

 VAGRANTFILE_API_VERSION = "2" 
 Vagrant.configure(VAGRANTFILE_API_VERSION)do | config | 
 config.vm.box = "hashicorp/precise64" 
 config.vm。ネットワーク "public_network"、タイプ: "dhcp"、:bridge => 'en4:Thunderbolt Ethernet' 
 config.vm.hostname = "mddirector" 
 end 

これは 'vagrant up'のアウトプットです

 ==>デフォルト:VMを正常にシャットダウンしようとしています... 
 ==>デフォルト:ボックス 'hashicorp/precise64'が最新であるかどうかをチェックしています... 
 == > default:以前に設定した転送ポートをクリアしています... 
 ==> default:以前に設定したネットワークインターフェイスをクリアしています... 
 ==> default:設定に基づいてネットワークインターフェイスを作成
デフォルト:Adapter 1:nat 
デフォルト:Adapter 2:ブリッジされた
 ==>デフォルト:転送ポート... 
デフォルト:22 => 2222(アダプタ1)
 ==>デフォルト:VMの起動中... 
 ==>デフォルト:マシンの起動を待っています。数分かかることがあります... 
デフォルト:SSHアドレス:127.0.0.1:2222 
デフォルト:SSHユーザー名:vagrant 
デフォルト:SSH認証方法:秘密鍵
デフォルト:警告:接続タイムアウト。再試行しています... 
 ==>デフォルト:マシンが起動して準備完了!
 GuestAdditions 4.3.10実行中--- OK。
 ==>デフォルト:VMでのゲスト追加の確認... 
 ==>デフォルト:ホスト名の設定... 
 ==>デフォルト:ネットワークインターフェースの設定と有効化... 
 ==>デフォルト:共有フォルダのマウント.. 
デフォルト:/ vagrant =>/Users/garthm/Projects/vagrant 
 ==>デフォルト:マシンはすでにプロビジョニングされています。強制的にプロビジョニングするには、 `vagrant provision`を実行するか` --provision` 
 ==> default:を使用してください。常に実行するようにマークされているプロビジョニング担当者は、引き続き実行されます。

'ifconfig'は以下を表示します。

 vagrant @ mddirector:〜$ ifconfig 
 eth0リンクのカプセル化:イーサネットHWaddr 08:00:27:88:0c:a6 
 inet addr:10.0.2.15 Bcast:10.0.2.255マスク:255.255.255.0 
 inet6 addr:fe80 :: a00:27ff:fe88:ca6/64スコープ:リンク
上りマルチキャストMTU:1500メトリック:1 
 RXパケット:725エラー:0ドロップ:0オーバーラン:0フレーム:0 
 TXパケット:544エラー:0ドロップ:0オーバーラン:0キャリア:0 
コリジョン:0 txqueuelen:1000 
 ] RXバイト:90824(90.8 KB)TXバイト:63375(63.3 KB)
 
 eth1リンクエンキャップ:イーサネットHWaddr 08:00:27:2f:bb:6a 
 inet addr:10.0.24.118 Bcast:10.0.31.255 Mask:255.255.248.0 
上りブロードキャストマルチキャストMTU:1500メトリック:1 
 RXパケット:3490エラー:0ドロップ:0オーバーラン:0フレーム: 0 
 TXパケット:7エラー:0ドロップ:0オーバーラン:0キャリア:0 
コリジョン:0 txqueuelen:1000 
 RXバイト:34 5981(345.9 KB)TXバイト:1102(1.1 KB)
 
 lo encap:ローカルループバック
 inet addr:127.0.0.1 Mask:255.0.0.0 
 inet6 addr::: 1/128範囲:ホスト
アップループバックMTU:16436メトリック:1 
 RXパケット:0エラー:0ドロップ:0オーバーラン:0フレーム:0 
 TXパケット:0エラー:0ドロップ:0オーバーラン:0キャリア:0 
コリジョン:0 txqueuelen:0 
 RXバイト:0(0.0 B)TXバイト:0(0.0 B)[ ]

私の問題は、私が自分のホストマシン(IP:10.0.24.112)からVMにpingを実行できること、他の人が私の自分のVMにもpingを実行できることです(10.0.24.XXX) 、私のVMは私のdevbox(IP:10.10.116.254)にpingを実行できます、私は私のdevboxから他の開発者仮想マシン設定にpingを実行できます(Vagrant、IP:10.10.116.254ではありません)私のdevboxや他の開発者からのVMは自分のdevboxから私のVMにpingを実行できません。

彼らが持っている仮想マシンの設定はBridged NICだけですが、どういうわけかvagrantにはNATとBridgedがあります。ご覧のとおり、Vagrant VMには2つのIPアドレスがありますが、これは正しくないようです。また、起動時に、アダプタ1のポート転送を行うこともできます。これは、NATアダプタです。つまり、デフォルトでNATアダプタを使用しているように見えます。 。

NATアダプタを取り除き、ブリッジのみを使用するにはどうすればよいですか?

VirtualBoxの設定を編集してNATアダプタを無効にすると、ブリッジされたアダプタしかなくVirtualBoxでボックスを起動すると(つまりvagrant upを使用しないで)、IPアドレスのあるeth0だけが使用されます。それは私のdevboxからping可能で、それが私が探しているものです。 VirtualBoxの設定を編集してNATアダプタを無効にした後でボックスを表示しようとすると、次のエラーが表示されます。

 VirtualBoxを制御するためにVagrant 
によって使用されているCLIである `VBoxManage`の実行中にエラーが発生しました。 
 
コマンド:["modifyvm"、 "7f1c12f7-74cd-4c6b-aa5a-16d6209cf2b3"、 "--natpf1"、 "ssh、tcp、127.0。" 0.1、2222、、22 "] 
 
 Stderr:VBoxManage:エラー:この名前のNATルールは既に存在します
 VBoxManage:エラー:詳細:コードNS_ERROR_INVALID_ARG(0x80070057)、コンポーネントNATEngine、インターフェイスINATEngine、呼び出し先nsISupports 
 )、Bstr(strGuestIp).raw()、RTStrToUInt16(strGuestPort)) "ファイルVBoxManageModifyVM.cppの1655行目

すぐにもう一度vagrantを実行すると、NATアダプタが再び有効になり、再び同じ問題が発生します。

35
SynackSA

NATとしてのeth0は、現在の状態におけるVagrantの 基本的な要件です 。しかし、eth1のデフォルトのルーター設定を上書きすることができます。

Vagrantドキュメント から:

デフォルトルーター

設定によっては、デフォルトのルータ設定を手動で上書きしたい場合があります。あなたにはこれが必要です パブリックネットワークを介して他のネットワークからVagrantボックスにアクセスする必要がある。そのためには、シェルプロビジョニングスクリプトを使用できます。

 config.vm.network "public_network"、ip: "192.168.0.17" 
 
#default router 
 config.vm.provision "Shell"、[。 [run]: "always"、
 inline: "route add default gw 1​​92.168.0.1" 
 
#default router ipv6 
 config.vm.provision "シェル "、
 run:" always "、
インライン:" route -A inet6 add default gw fc00 :: 1 eth1 "
#.default default gw on eth0 
 config.vm.provision "シェル"、
 run: "always"、
インライン: "eval` route -n | awk '{if($ 8 ==\" eth0\"&& $ 2!= \" 0.0.0.0\")デフォルトのルートを印刷しますgw \" $ 2;} '`" 

上記はかなり複雑でゲストOS固有のものかもしれませんが、一般的な質問であるため、その方法の大まかなアイデアを文書化しています。

21
ostrokach

(すみません、vagrant/virtualboxについてはかなり素朴なので、適切なネットワーキング用語の欠如を許してください)

bridge:en4)Thunderboltの選択が問題である可能性が最も高いです。

これが私があなたが求めたものではなく、欲しい/必要としているものです:

  • あなたの開発者ボックス(ホスト)からあなたのvmを制御するためのvagrantのためのSSHログイン機能。それが、ポート転送を伴うNATの動作です。それは他に何かを台無しにしないので、それがなくなっていることを要求することはそれほど役に立ちません。そしてそれはVirtualBoxのアダプタ1に現れます。

  • あなたのホストだけでなくあなたのLANからの接続性。 192.168.1.xxxの範囲の何かを言ってみましょう。アダプタ2では、これが重要です。

  • あなたはただあなたの通常のネットワークカード/ NICを気にしていてThunderboltポート上でイーサネットを動かす特別な理由はありません。

すなわち、あなたがVirtualBox vmからBridgedを持っていてVagrantを見ないようにすることで得られるもののほとんど。

これは私のLAN上にあるVirtualBox専用のマシンのうちの1つからのSSH ifconfigです。それは私が接続できるウェブサーバーを走らせます、そして私のMacはそれにSSH接続しそしてその上のデータベースに接続することができます。これを参照と呼びます。

[root@fdm ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:9A:85:1A
          inet addr:192.168.1.143  Bcast:192.168.1.255  Mask:255.255.255.0

VirtualBoxでは、その参照vmのNetworkパネルに、Adapter1がBridgedと表示されます。他のすべてのアダプタは無効になっています。

それで、私はVagrantと同じLAN接続の結果を試してみるつもりですが、アダプター1にNATがあることに同意します。それがvagrant-VB ssh通信メカニズムです。

#1を試してください - それは失敗します。

出発点はvagrant initです。

それからVagrantfileで、私は2つのことだけを変えました:

config.vm.box = "opscode-ubuntu-14.04"
config.vm.network "public_network"

私がこれを気にするならば、どのインタフェースを使うべきかを尋ねるダイアログが表示されます。

==> default: Available bridged network interfaces:
1) en1: Wi-Fi (AirPort)
2) en0: Ethernet
3) en3: Thunderbolt 1
4) p2p0
5) bbptp0
6) bridge0

さて、それを見て、私は最初に2)を選びました2)私は私がイーサネットとよくしたいと思ったので1)は「リンゴが多すぎる」ようでした。

これはうまくいきますが、私のISPがpingをブロックしている不適切なIP 10.0.xx.xxエントリで、以下を見てください。それが公共のネットワークを言うとき、私は彼らが本当に公共を意味すると思います。

vagrant ssh

vagrant@vagrant:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:0c:41:3e
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe0c:413e/64 Scope:Link

eth1      Link encap:Ethernet  HWaddr 08:00:27:ca:f4:64
          inet6 addr: fe80::a00:27ff:feca:f464/64 Scope:Link

試して#2 - 正しいバージョン

vagrantを停止してからディレクトリを削除し、再度作成してvagrant init 。 (ネットワークを使いすぎると、vagrantやvirtualboxを混乱させ、完全に削除して再起動すると解決できることがわかりました)

config.vm.box = "opscode-ubuntu-14.04"
config.vm.network "public_network"

しかし、今回は1)en1:Wi-Fi(AirMac)を選びます。

vagrant ssh

192.168.1.123のeth1は、もっときれいに見えますね。

vagrant@vagrant:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:0c:41:3e
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

eth1      Link encap:Ethernet  HWaddr 08:00:27:53:6e:1d
          inet addr:192.168.1.123  Bcast:192.168.1.255  Mask:255.255.255.0

そして、確かに、私は自分のリファレンスVMから、または私のLAN上の別の物理マシンから192.168.1.123をpingすることができます。

[root@fdm ~]# ping 192.168.1.123
PING 192.168.1.123 (192.168.1.123) 56(84) bytes of data.
64 bytes from 192.168.1.123: icmp_seq=1 ttl=64 time=1039 ms
64 bytes from 192.168.1.123: icmp_seq=2 ttl=64 time=40.4 ms

FWIW、VirtualBoxはアダプタ1にNAT、アダプタ2にブリッジを表示します。

最終セットアップ -

インターフェースの自動選択と静的IPを追加しました(これは必要ありません)。少なくとも私にとっては、問題は解決しました。

  config.vm.network "public_network", bridge: 'en1: Wi-Fi (AirPort)', ip: "192.168.1.201"

編集201902:私の最新のビルドで、vagrant/virtualboxがWifi(空港)が見つからないことについて文句を言っていました:

==> default: Specific bridge 'en1: Wi-Fi (AirPort)' not found. You may be asked to specify
==> default: which network to bridge to.
==> default: Available bridged network interfaces:
1) en0: Ethernet
2) en2: Thunderbolt 1
3) bridge0

に変更しました

config.vm.network "public_network", bridge: "bridge0"

何か問題が発生した場合は後で更新しますが、アダプタ名について少し更新したいと思いました。

9
JL Peyret

簡単な答えはしないようです。

アダプター1をオーバーライドすることはできますが、少なくともvagrant sshで問題が生じることが予想されます。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.network "public_network", :adapter=>1 , type: "dhcp", :bridge => 'en4: Thunderbolt Ethernet'
  config.vm.hostname = "mddirector"

  # In case you get the Host wrong...
  config.vm.boot_timeout = 30
  config.vm.provider "virtualbox" do |vb, override|
       vb.gui = true
  end

  config.ssh.Host = '192.168.148.24'

end

を生成します。

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: bridged
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
    default: VirtualBox adapter #1 not configured as "NAT". Skipping port
    default: forwards on this adapter.
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...

残念ながら、ネットワークアダプタの設定はロックされているように見えますが、多分あなたは私より運が良いでしょう。

そうした場合、あなたはいつでも強制的に停止し、修正されたssh.Hostでリロードすることができます。あるいは私はvagrant dnsのことを聞いたことがありますが、それを試したことはありません。

4
KCD

私はStackOverflowで このディスカッション を見つけました。

私にとっては、関連するVagrantfileを開いて次の行をコメント解除するだけで十分です。

config.vm.network "public_network"

そしてvagrant reloadを実行します

3
Tyler