특정 포트를 사용하여 PC1에서 PC2로 데이터를 전송해야 하는데 PC2에서 열린 소켓은 localhost만 수신하고 있습니다. PC1의 연결을 수락하도록 소켓을 "속이는" 방법이 있습니까?
답변1
ssh
포트포워딩과 함께 사용할 수 있습니다 .
예를 들어
ssh <remotehost> -L 1234:<target>:5678
이 명령은 원격 호스트에 연결하고 로컬 포트 1234를 서버의 원격 포트 5678에 연결합니다 <target>
.
귀하의 경우에는 대상 호스트에 직접 연결 <target>
됩니다 .localhost
답변2
애플리케이션이 localhost에 바인딩된 경우 포트를 전달하는 유일한 방법은 요청을 루프백 인터페이스에 NAT하는 것입니다. 따라서 다음을 수행하여 이를 달성할 수 있습니다.
iptables 규칙을 추가합니다.
iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to 127.0.0.1:5678
이제 대상 컴퓨터의 포트 1234에서 보내는 모든 요청은 127.0.0.1:5678로 전달됩니다.
그런 다음 다음을 수행하는 것을 잊지 마십시오.
IP 전달 활성화:
echo 1 /proc/sys/net/ipv4/ip_forward
라우팅 로컬 네트워크 활성화:
echo 1 /proc/sys/net/ipv4/conf/eth0/route_localnet