원격 가상 머신의 소켓에 연결

원격 가상 머신의 소켓에 연결

이것은 아마도 매우 기본적인 것이지만 지금은 이 문제에 갇혀 있습니다. KVM에 소켓 서버가 있는 가상 머신이 있습니다. localhost를 통해, 즉 호스트의 클라이언트를 사용하여 이 컴퓨터에 연결할 수 있지만 내가 원하는 것은 원격으로 연결하는 것입니다. 원격이란 다른 컴퓨터를 의미합니다.

이제는 이 컴퓨터에 ping을 보낼 수도 없습니다. 이 컴퓨터에 기본적으로 할당된 IP는 입니다 192.168.122.122. 내 호스트가 대학 네트워크에 연결되면 해당 IP는 다음과 같습니다 10.5.135.*. 내 애플리케이션에 원격으로 연결할 수 있는 방법이 있나요? 구성을 많이 변경해야 하므로 VM의 IP를 변경할 필요가 없으면 좋을 것 같습니다. 필요한 경우 고정 IP를 사용하여 핫스팟을 만들 의향이 있습니다.

이 문제를 해결하는 데 도움을 주셔서 감사합니다.

답변1

특정 TCP 및 UDP 포트에 대해 호스트에서 포트 전달을 구성할 수 있습니다. 그러나 ICMP를 이용한 DNAT는 불가능해 보인다.

대안은 원격 시스템에서 호스트까지 암호화된(SSH, OpenVPN, IPsec) 터널 또는 일반 터널을 설정하고 원격 시스템에서 이 터널을 통해 VM 주소에 대한 경로를 설정하는 것입니다.

SSH 포트 포워딩

host_ip='10.5.135.42'
vm_ip='192.168.122.122'
vm_port=42
# on the remote system
ssh -L "127.0.0.1:1234:${vm_ip}:${vm_port}" user@$host_ip

이 SSH 연결이 활성화되어 있는 동안 원격 시스템의 포트 1234에 연결하고 가상 머신에서 원하는 포트에 연결할 수 있습니다.

telnet localhost 1234

DNAT 및 iptables

호스트 머신에서:

vm_ip='192.168.122.122'
vm_port=42
iptables -t nat -A PREROUTING -p tcp --dport "$vm_port" -j DNAT --to-destination "$vm_ip"
iptables -t nat -A POSTROUTING -p tcp -d "$vm_ip" --dport "$vm_port" -j MASQUERADE

그런 다음 호스트의 포트에 연결할 수 있으며 패킷은 가상 머신으로 리디렉션됩니다. 이는 가상 머신이 호스트에서 오는 패킷을 보기 때문에 작동합니다(매스커레이딩으로 인해 원격 시스템에서 오는 패킷이 아님).

관련 정보