VagrantでのみBridged Adapterを実行する必要があり、NATは不要


36

そのため、MACブックのVagrantの「hashicorp / precise64」の設定に問題があります。

まず、私の設定:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION)do | config |
  config.vm.box = "hashicorp / precise64"
  config.vm.network "public_network"、タイプ: "dhcp"、:bridge => 'en4:Thunderbolt Ethernet'
  config.vm.hostname = "mddirector"
終わり

これは「浮浪者」の出力です

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

'ifconfig'は次を示します。

vagrant @ mddirector:〜$ ifconfig
eth0リンクencap:Ethernet HWaddr 08:00:27:88:0c:a6
          inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
          inet6 addr:fe80 :: a00:27ff:fe88:ca6 / 64 Scope:Link
          放送実行中のマルチキャストMTU:1500メトリック:1
          RXパケット:725エラー:0ドロップ:0オーバーラン:0フレーム:0
          TXパケット:544エラー:0ドロップ:0オーバーラン:0キャリア:0
          collisions:0 txqueuelen:1000
          RXバイト:90824(90.8 KB)TXバイト:63375(63.3 KB)

eth1リンクencap:Ethernet 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
          collisions:0 txqueuelen:1000
          RXバイト:345981(345.9 KB)TXバイト:1102(1.1 KB)

lo Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr::: 1/128 Scope:Host
          UPLOOPBACK RUNNING MTU:16436メトリック:1
          RXパケット:0エラー:0ドロップ:0オーバーラン:0フレーム:0
          TXパケット:0エラー:0ドロップ:0オーバーラン:0キャリア:0
          collisions:0 txqueuelen:0
          RXバイト:0(0.0 B)TXバイト:0(0.0 B)

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

彼らが持っている仮想マシンのセットアップは、ブリッジされたNICのみを使用していますが、何らかの理由で迷走者はNATとブリッジの両方を持っていますが、設定でbridgedを指定しました。ご覧のとおり、Vagrant VMには2つのIPアドレスがありますが、これは正しくないようです。また、NATアダプタであるアダプタ1でポートフォワードを実行することもできます。つまり、すべてに対してデフォルトでNATアダプタを使用しているように聞こえます。

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

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

Vagrantが使用するCLIである `VBoxManage`の実行中にエラーが発生しました
VirtualBoxを制御します。コマンドとstderrを以下に示します。

コマンド:["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
VBoxManage:エラー:コンテキスト:「AddRedirect(Bstr(strName).raw()、proto、Bstr(strHostIp).raw()、RTStrToUInt16(strHostPort)、Bstr(strGuestIp).raw()、RTStrToUInt16(strGuestPort))」 VBoxManageModifyVM.cppファイルの1655行目

すぐに再び浮浪者を実行すると、NATアダプタが再び有効になり、同じ問題が再び発生します。

回答:


21

eth0NATが現在の状態のVagrantの基本的な要件であるとき。ただし、のデフォルトのルーター設定を上書きできますeth1

Vagrant docsから:

デフォルトルーター

設定によっては、デフォルトのルーター構成を手動でオーバーライドすることもできます。これは、パブリックネットワークを介して他のネットワークからVagrantボックスにアクセスする必要がある場合に必要です。これを行うには、シェルプロビジョニングスクリプトを使用できます。

config.vm.network "public_network"、ip: "192.168.0.17"

#デフォルトルーター
config.vm.provision "shell"、
  実行:「常に」、
  インライン:「ルートはデフォルトgw 192.168.0.1を追加します」

#デフォルトルーターipv6
config.vm.provision "shell"、
  実行:「常に」、
  インライン:「ルート-inet6はデフォルトgw fc00 :: 1 eth1を追加します」

#eth0のデフォルトgwを削除
config.vm.provision "shell"、
  実行:「常に」、
  インライン: "eval` route -n | awk '{if($ 8 == \ "eth0 \" && $ 2!= \ "0.0.0.0 \")print \ "route del default gw \" $ 2;}' `"

上記はかなり複雑で、ゲストOS固有のものである可能性がありますが、よくある質問なので、その方法の大まかなアイデアを文書化します。


9

(ごめんなさい、vagrant / virtualboxについては非常に素朴なので、適切なネットワーキング用語の欠如を許してください)

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

以下は、あなたが求めたものではなく、あなたが望む/必要とするものです:

  • devボックス(ホスト)からvagrantがvmを制御するためのSSHログイン機能。これが、ポート転送を使用したNATの機能です。それは他のものを台無しにしないので、消えることを求めることはそれほど有用ではありません。そして、それはVirtualBoxのアダプタ1に表示されます。

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

  • 通常のネットワークカード/ NICを気にするだけで、Thunderboltポートでイーサネットを実行する特別な理由はありません。

すなわち、Bridgedを使用し、Vagrantを表示しないVirtualBox vmから得られるものとほぼ同じです。

LANにあるVirtualBox専用マシンの1つからのSSH ifconfigを次に示します。接続可能なWebサーバーを実行し、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のネットワークパネルに、Adapter1がBridgedとして表示されます。他のすべてのアダプターは無効になります。

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

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

出発点は、浮浪者の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を、私はよく、イーサネットと、望んでいたと思ったので1)は「あまりにもAppleのように見えました。

これは機能しますが、不適切なIP 10.0.xx.xxエントリがあり、ISPがpingをブロックします。以下を参照してください。パブリックネットワークと言うと、本当にパブリックを意味していると思います。

浮浪者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 halt、次にディレクトリを削除し、再度作成してvagrant initを作成します。(ネットワークをいじりすぎると、完全に削除して再起動すると解決するvagrantやvirtualboxを混乱させる可能性があることがわかりました)

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

ただし、今回は1)en1:Wi-Fi(AirPort)を選択します。

浮浪者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"

EDIT 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"

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


彼の答えはより多くのクレジットに値するので、追加のアダプターを追加するのは簡単なので、メニューさえも入手できませんでした(1枚のアクティブなカードしかありません)。
グレンプラス

4

短い答えはいけないようです。

アダプター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たことはありますが、試したことはありません。


3

StackOverflowでこの議論を見つけました。

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

config.vm.network "public_network"

そして、実行します vagrant reload


2
Vagrantfileの設定を見ると、設定が既にあることがわかります。
SynackSA

あ、ごめんなさい!私は逃しました。
タイラー

3
迷惑なsshやプロビジョニングを行うと、常に127.0.0.1:2222またはゲストボックスで22に転送されるポートを介してアクセスするため、NAT接続は常に行われると考えています。
ヘイデン

これは私にとって答えのスポットです。それはちょうどnicを追加します
グレンプラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.