NAT없이 Vagrant에서만 브리지 어댑터를 수행해야 함


36

따라서 MAC 책에 'hashicorp / precise64'의 Vagrant 설정에 문제가 있습니다.

먼저 내 구성 :

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"
종료

이것은 '방랑자'의 배상

==> 기본값 : VM의 정상적인 종료 시도 중 ...
==> 기본값 : 'hashicorp / precise64'상자가 최신인지 확인 중 ...
==> 기본값 : 이전에 설정 한 전달 포트를 지우는 중 ...
==> 기본값 : 이전에 설정 한 네트워크 인터페이스 지우기 ...
==> 기본값 : 구성을 기반으로 네트워크 인터페이스 준비 중 ...
    기본값 : 어댑터 1 : nat
    기본값 : 어댑터 2 : 브리지
==> 기본값 : 전달 포트 ...
    기본값 : 22 => 2222 (어댑터 1)
==> 기본값 : VM 부팅 중 ...
==> 기본값 : 머신 부팅 대기 중. 이 작업은 몇 분 정도 걸릴 수 있습니다...
    기본값 : SSH 주소 : 127.0.0.1:2222
    기본 : SSH 사용자 이름 : 방랑자
    기본값 : SSH 인증 방법 : 개인 키
    기본값 : 경고 : 연결 시간이 초과되었습니다. 다시 시도하는 중 ...
==> 기본값 : 머신 부팅 및 준비 완료!
GuestAdditions 4.3.10 실행 중 --- 확인.
==> 기본값 : VM에서 게스트 추가 확인 중 ...
==> 기본값 : 호스트 이름 설정 중 ...
==> 기본값 : 네트워크 인터페이스 구성 및 활성화 ...
==> 기본값 : 공유 폴더 마운트 중 ...
    기본값 : / vagrant => / Users / garthm / Projects / vagrant
==> 기본값 : 머신이 이미 프로비저닝되었습니다. `vagrant provision`을 실행하거나`--provision`을 사용하십시오
==> 기본값 : 프로비저닝을 강제합니다. 실행 표시가 된 프로 비져는 항상 실행됩니다.

'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 주소 : fe80 :: a00 : 27ff : fe88 : ca6 / 64 범위 : 링크
          브로드 캐스트 실행 MULTICAST MTU : 1500 미터법 : 1
          RX 패킷 : 725 오류 : 0 삭제 : 0 오버런 : 0 프레임 : 0
          TX 패킷 : 544 오류 : 0 삭제 : 0 오버런 : 0 캐리어 : 0
          충돌 : 0 txqueuelen : 1000
          수신 바이트 : 90824 (90.8KB) TX 바이트 : 63375 (63.3KB)

eth1 링크 캡슐화 : 이더넷 HWaddr 08 : 00 : 27 : 2f : bb : 6a
          inet addr : 10.0.24.118 Bcast : 10.0.31.255 마스크 : 255.255.248.0
          브로드 캐스트 실행 MULTICAST MTU : 1500 미터법 : 1
          RX 패킷 : 3490 오류 : 0 삭제 : 0 오버런 : 0 프레임 : 0
          TX 패킷 : 7 오류 : 0 삭제 : 0 오버런 : 0 캐리어 : 0
          충돌 : 0 txqueuelen : 1000
          수신 바이트 : 345981 (345.9KB) TX 바이트 : 1102 (1.1KB)

lo 링크 encap : 로컬 루프백
          inet addr : 127.0.0.1 마스크 : 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
          수신 바이트 : 0 (0.0B) TX 바이트 : 0 (0.0B)

내 문제는 내 호스트 컴퓨터 ( IP: 10.0.24.112)에서 VM을 ping 할 수 있고 다른 사람들도 10.0.24.XXX내 VM을 ping 할 수 있고 ( ), 내 VM은 내 devbox IP: 10.10.116.254를 ping 할 수 있으며, 다른 개발자에게 내 devbox에서 가상 머신 설정을 핑 할 수 있다는 것입니다 ( Vagrant가 아닌 IP: 10.10.116.254), 내 devbox에서 내 VM을 ping 할 수 없으며 다른 개발자는 자신의 devbox에서 내 VM을 ping 할 수 없습니다.

그들이 가지고있는 가상 머신 설정은 브리지 NIC에서만 가능하지만, 어떤 이유로 든 방랑자는 NAT와 브리지가 있습니다.하지만 구성에서 브리지를 지정했습니다. 보시다시피 Vagrant VM에 대한 두 개의 IP 주소가 있습니다. 또한 부팅 할 때 NAT 어댑터 인 어댑터 1에서 포트 포워드를 수행 할 수 있습니다. 즉, 기본적으로 NAT 어댑터를 사용하는 것처럼 들립니다.

NAT 어댑터를 제거하고 브리지 전용 만 사용하려면 어떻게합니까?

VirtualBox 설정을 편집하고 NAT 어댑터를 비활성화하면 브리지 된 어댑터 만 있고 VirtualBox를 통해 상자를 부팅 할 수 있습니다 (예 : vagrant up 사용 안 함). devbox에서 핑할 수있는 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 (), 프로토, Bstr (strHostIp) .raw (), RTStrToUInt16 (strHostPort), Bstr (strGuestIp) .raw (), RTStrToUInt16 (strGuestPort))") VBoxManageModifyVM.cpp 파일의 1655 행

내가 즉시 다시 vagrant up을하면 NAT 어댑터를 다시 활성화했으며 동일한 문제가 다시 발생합니다.

답변:


21

eth0NAT는 현재 상태에서 Vagrant기본 요구 사항입니다 . 그러나의 기본 라우터 구성을 재정의 할 수 있습니다 eth1.

로부터 방랑 워드 프로세서 :

기본 라우터

설정에 따라 기본 라우터 구성을 수동으로 무시할 수 있습니다. 공용 네트워크를 통해 다른 네트워크에서 Vagrant 상자에 액세스해야하는 경우에 필요합니다 . 이를 위해 쉘 프로비저닝 스크립트를 사용할 수 있습니다.

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

# 기본 라우터
config.vm.provision "쉘",
  실행 : "항상",
  인라인 : "route add default gw 192.168.0.1"

# 기본 라우터 ipv6
config.vm.provision "쉘",
  실행 : "항상",
  인라인 : "route -A inet6 기본 gw fc00 :: 1 eth1 추가"

# eth0의 기본 gw 삭제
config.vm.provision "쉘",
  실행 : "항상",
  인라인 : "eval`route -n | awk '{if ($ 8 == \"eth0 \ "&& $ 2! = \"0.0.0.0 \ ") print \"경로 델 기본값 gw \ "$ 2;}'`"

위의 내용은 상당히 복잡하고 게스트 OS마다 다를 수 있지만 일반적인 질문이므로이를 수행하는 방법에 대한 대략적인 아이디어를 문서화했습니다.


9

(죄송합니다. 방랑자 / 가상 박스에 대해 순진하므로 적절한 네트워킹 용어가 부족하다는 것을 용서하십시오)

다리 의 선택 : en4) Thunderbolt 가 문제 일 가능성이 높습니다.

다음은 내가 요청한 것이 아니라 원하는 것 / 필요한 것입니다.

  • 개발자 박스 (호스트)에서 VM을 제어하기위한 방랑자 SSH 로그인 기능. 이것이 포트 포워딩을 가진 NAT가하는 일입니다. 그것은 다른 것을 엉망으로 만들지 않으므로 사라지도록 요청하는 것이 그다지 유용한 것은 아닙니다. 그리고 VirtualBox의 어댑터 1에 나타납니다.

  • 호스트가 아닌 LAN에서 연결 192.168.1.xxx 범위에서 무언가를 말해 봅시다. 이것이 어댑터 2에서 중요한 것입니다.

  • 일반적인 네트워크 카드 / NIC 만 신경 쓰고 Thunderbolt 포트를 통해 이더넷을 실행할 특별한 이유가 없습니다.

즉, 브리지가 있고 Vagrant가없는 VirtualBox vm에서 얻을 수있는 것과 거의 같습니다.

내 LAN에있는 VirtualBox 전용 시스템 중 하나의 SSH ifconfig가 있습니다. 그것은 내가 연결할 수있는 웹 서버를 실행하고 내 Mac은 그것에 연결할 수 있고 데이터베이스에 연결할 수 있습니다. 나는 그것을 참조 라고 부를 것이다 .

[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을 브리지로 표시합니다. 다른 모든 어댑터는 비활성화되어 있습니다.

이제 Vagrant의 동일한 LAN 연결 결과를 시도해 볼 것입니다. 그러나 어댑터 1에 NAT가 있음을 동의합니다. 이것이 vagrant-VB ssh 통신 메커니즘입니다.

실패한 # 1을 시도하십시오.

출발점은 방랑자 입니다.

그런 다음 Vagrantfile에서 두 가지만 변경했습니다.

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) '너무 애플'인 것 같습니다.

이것은 작동하지만 ISP가 핑을 차단하는 부적절한 IP 10.0.xx.xx 항목으로 아래를 참조하십시오. 공개 네트워크라고 할 때 실제로 공개를 의미한다고 생각합니다.

유랑 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을 작성하십시오 . (네트워크를 너무 많이 엉망으로 만들면 전체 제거 및 다시 시작으로 해결할 수있는 방랑자 및 가상 상자가 혼동 될 수 있음을 발견했습니다)

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"

편집 201902 : 최신 빌드에서 방랑자 / 가상 상자가 Wi-Fi (공항) 를 찾을 수 없다고 불평했습니다 .

==> 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 개의 활성 카드 만 있음).
Glenn Plas

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

아 죄송합니다! 나는 그것을 놓쳤다.
Tyler

3
나는 그것이 ssh 또는 프로비저닝을 할 때 항상 127.0.0.1:2222 또는 게스트 박스의 22로 전달되는 포트를 통해 액세스 할 것이기 때문에 항상 NAT 연결을 가질 것이라고 생각합니다.
헤이든

이것은 나를 위해 정답입니다. 그것은 단지 nic를 추가합니다
Glenn Plas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.