저는 웹 서비스 아키텍처를 연구하고 있습니다. Vagrant가 아닌 기본 호스트 컴퓨터에서 실행해야하는 소프트웨어가 있습니다. 하지만 게스트에서 일부 클라이언트 서비스를 실행하고 싶습니다.
Vagrant의 config.vm.forwarded_port
매개 변수는 호스트의 포트를 열고 게스트에게 데이터를 보냅니다. 하지만 게스트에서 포트를 열고 데이터를 호스트로 보내려면 어떻게해야합니까? (여전히 포트 포워딩이지만 반대 방향입니다.)
답변
을 실행하면 vagrant ssh
실제로 다음 기본 명령을 사용합니다.
ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1
SSH는 -R guestport:host:hostport
옵션을 사용하여 원하는 방향으로 포트 전달을 지원합니다 . 따라서 12345
게스트의 포트 에 연결 하고으로 전달 localhost:80
하려면 다음 명령을 사용합니다.
ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key vagrant@127.0.0.1
Eero가 올바르게 설명했듯이 vagrant ssh -- -R 12345:localhost:80
훨씬 더 간결한 명령에서 동일한 효과를 갖는 명령을 사용할 수도 있습니다 .
답변
Vagrant: Up and Running
Vagrant의 작성자가 쓴 책 (Pub. date : 2013 년 6 월 12 일)에서 그는 게스트 컴퓨터가 호스트 컴퓨터에서 실행되는 서비스에 액세스 할 수 없다고 언급했습니다.
을 사용 Forwarded Ports
하는 대신를 사용하여 개인 네트워크를 설정할 수 Host-Only Networks
있습니다.
-
Host-Only Networks
오버 사용의 장점Forwarded Ports
-
게스트 컴퓨터는 호스트 컴퓨터에서 실행되는 서비스에 액세스 할 수 있습니다.
이 기능은 문제를 해결할 것입니다.
-
게스트 컴퓨터는 다른 게스트 컴퓨터에서 실행되는 서비스에 액세스 할 수 있습니다.
이 기능은 프로덕션 환경을보다 정확하게 모방하기 위해 서비스를 여러 시스템으로 분리하는 데 매우 유용합니다.
-
안전한
외부 시스템은 게스트 시스템에서 실행되는 서비스에 액세스 할 수있는 방법이 없습니다.
-
적은 일
매번 구성 할 필요가 없습니다.
Forwarded Port
-
-
구성 방법
Host-Only Networks
config.vm.network :"hostonly", "192.168.0.0"
# 방랑자 버전 # 1config.vm.network :private_network, ip: "192.168.0.0"
# 방랑 버전 # 2이 줄이 있으면
Vagrantfile
방랑자가 고정 IP 주소를 가진 사설 네트워크를 만들도록 지시합니다.192.168.0.0
호스트의 IP 주소는 항상 동일한 IP 주소이지만 마지막 옥텟은 1입니다. 앞의 예에서 호스트 시스템은 IP 주소를 갖습니다
192.168.0.1
.
답변
게스트 OS 내부의 기본 게이트웨이를 통해 호스트 시스템의 포트에 액세스 할 수 있습니다. (일반적으로 IP는 10.0.2.2
.)
예를 들어, 호스트 컴퓨터의 포트 8000에서 실행중인 웹 서버가있는 경우 …
echo 'Hello, guest!' > hello
python -m SimpleHTTPServer 8000
Vagrant VM 내부에서 액세스 할 수 있습니다 10.0.2.2:8000
( 10.0.2.2
게스트 기본 게이트웨이의 IP가 제공됨 ).
vagrant ssh
curl http://10.0.2.2:8000/hello # Outputs: Hello, guest!
게스트 OS 내에서 기본 게이트웨이의 IP를 찾으려면 다음을 실행 netstat -rn
(또는 ipconfig
Windows 게스트에서)하고 대상 IP가있는 행 0.0.0.0
(또는 Windows에서 “기본 게이트웨이”레이블이 지정된 필드 )을 찾습니다 .
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.33.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
를 사용하여 프로그래밍 방식으로이 IP를 추출 할 수 있습니다 netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
.
출처 : vagrant virtualbox 머신에서 호스트 PostgreSQL에 연결하는 방법 ; VirtualBox 게스트 OS에서 호스트 시스템에 연결 하시겠습니까?
답변
~/.ssh/config
호스트 시스템에서 다음을 추가하십시오 .
Host 127.0.0.1
RemoteForward 52698 127.0.0.1:52698
을 통해 로그인 한 경우 Vagrant에서 호스트 컴퓨터 포트 52698의 서비스에 액세스 할 수 있습니다 vagrant ssh
.
netstat -lt
vagrant VM에서 실행 하고 다음 줄에 메모하여 작동하는지 확인할 수 있습니다 .
tcp 0 0 localhost:52698 *:* LISTEN
tcp6 0 0 ip6-localhost:52698 [::]:* LISTEN
답변
루프백 주소가 아닌 로컬 IP 주소를 통해 호스트 컴퓨터에서 실행중인 서비스에 액세스 할 수 있습니다. 포트 80 (다음 포트 987)에 http 서버를 만들고 curl
197.45.0.10:80 및 197.45.0.10:987 (무고한 사람을 보호하기 위해 실제 IP 주소가 변경됨)을 테스트했습니다. 두 번 모두 작동했으며 특별한 방랑 구성 (public_network 없음, forwarded_port 없음)이 없으며 PuTTY를 통해 전달 된 일부 포트가 있지만 포트 80과 987이 전달되지 않았습니다. 따라서 호스트 컴퓨터의 로컬 또는 공용 IP 주소를 사용해보십시오.
그리고 다른 게스트 방랑자 인스턴스에 액세스 (ssh)하려는 경우 다음 과 같이 public_network
포트 22에서 전달하는 것은 물론 활성화 할 수 있습니다 Vagrantfile
.
config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 22, host: 2200
그런 다음 해당 포트가 열려있는 한 (예 : 라우터 구성에서 더 많은 포트 포워딩을 수행) 어디에서나 외부 세계에서도 해당 컴퓨터에 액세스 할 수 있습니다.