Programing

방랑자 역 포트 포워딩?

crosscheck 2020. 7. 21. 07:52
반응형

방랑자 역 포트 포워딩?


웹 서비스 아키텍처를 개발 중입니다. 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 RunningVagrant의 작성자가 쓴 이 책 (Pub. 날짜 : 2013 년 6 월 12 일)에서 그는 게스트 컴퓨터가 호스트 컴퓨터에서 실행되는 서비스에 액세스 할 수 없다고 언급했습니다.

을 사용하는 대신을 사용하여 Forwarded Ports개인 네트워크를 설정할 수 Host-Only Networks있습니다.

  • Host-Only Networks이상 사용의 장점Forwarded Ports

    1. 게스트 컴퓨터는 호스트 컴퓨터에서 실행되는 서비스에 액세스 할 수 있습니다

      이 기능은 문제를 해결합니다.

    2. 게스트 컴퓨터는 다른 게스트 컴퓨터에서 실행되는 서비스에 액세스 할 수 있습니다

      이 기능은 서비스를 여러 시스템으로 분리하여 프로덕션 환경을보다 정확하게 모방하는 데 매우 유용합니다.

    3. 안전한

      외부 시스템은 게스트 시스템에서 실행되는 서비스에 액세스 할 수있는 방법이 없습니다.

    4. 적은 일

      모든 구성 할 필요가 없습니다 Forwarded Port


  • 구성하는 방법 Host-Only Networks

    config.vm.network :"hostonly", "192.168.0.0" # 방랑자 버전 # 1

    config.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(또는 ipconfigWindows 게스트에서) 실행 하고 대상 IP가있는 행 0.0.0.0(또는 Windows의 "Default Gateway"필드 )을 찾으십시오 .

$ 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 machine에서 호스트 PostgreSQL과 연결하는 방법 ; VirtualBox 게스트 OS에서 호스트 시스템에 연결 하시겠습니까?


~/.ssh/config호스트 컴퓨터에서 다음을 추가하십시오 .

Host 127.0.0.1
RemoteForward 52698 127.0.0.1:52698

를 통해 로그인 한 경우 Vagrant에서 호스트 시스템 포트 52698의 서비스에 액세스 할 수 있습니다 vagrant ssh.

netstat -ltvagrant VM에서 실행 하고 다음 줄에 메모하여 작동하는지 확인할 수 있습니다 .

tcp      0    0 localhost:52698         *:*                 LISTEN
tcp6     0    0 ip6-localhost:52698     [::]:*              LISTEN

I can access services running on my host machine via its local IP address (not its loopback address). I tested by creating an http server on port 80 (and then on port 987) and curling 197.45.0.10:80 and 197.45.0.10:987 (actual ip address changed to protect the innocent). It worked both times, and I don't have any special vagrant configuration (no public_network, no forwarded_port) and while I do have some ports forwarded via PuTTY, I don't have ports 80 and 987 forwarded. So maybe try using the host machine's local or public IP address.

And if you want to access (ssh into) one guest vagrant instance from another, you can enable public_network as well as forwarding from port 22 in the Vagrantfile like this:

config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 22, host: 2200

Then as long as that port is open (ie do some more port forwarding in your router config) you can access that machine from anywhere, even the outside world.

참고URL : https://stackoverflow.com/questions/16244601/vagrant-reverse-port-forwarding

반응형