UDP 포트 포워딩: 채널 2: 열기 실패: 연결 실패: 연결이 거부되었습니다.

UDP 포트 포워딩: 채널 2: 열기 실패: 연결 실패: 연결이 거부되었습니다.

내 상황은 다음과 같습니다.

현재 SSH 터널을 통해 UDP 패킷을 보내기 위해 두 호스트 사이에 프로그램을 얻으려고 합니다. 두 호스트 사이에는 중간 호스트도 있습니다. Server01은 두 개의 서브넷을 분리합니다.

서브넷: //// 10.11.XX ///////// 192.168.XX
호스트: 클라이언트 <-------> Server01 <------> Server02

여기에 이미지 설명을 입력하세요.

SSH 연결을 성공적으로 설정하고 RSA 키를 사용했기 때문에 비밀번호가 필요하지 않습니다.

그런 다음 이 튜토리얼을 따랐습니다.

UDP용 SSH 포트 전달

요약하면 다음을 입력하여 socat을 사용하여 server01에서 TCP-UDP 릴레이를 구성하라는 메시지가 표시됩니다.

server01$ socat tcp4-listen:8000,reuseaddr,fork udp:server02:53

그리고 클라이언트에서 socat을 사용하는 UDP-TCP 릴레이:

client$ socat -T15 udp4-recvfrom:53000,reuseaddr,fork tcp:localhost:8000

이제 문제가 발생합니다. 내 프로그램에서 localhost UDP 포트 53000에 소켓을 만들고 데이터를 보내려고 하면,

channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused

나는 server02를 클라이언트와 동일한 서브넷에 배치하면 내 프로그램이 UDP 패킷을 완벽하게 교환하기 때문에 내 프로그램이 괜찮다고 생각합니다.

내 프로그램이 UDP 포트 53000 소켓에 액세스할 수 있도록 활성화해야 하는 설정이 있습니까? 아니면 socat이 UDP 포트를 사용하기 때문에 UDP 포트에 소켓을 생성할 수 없는 걸까요? 나는 한동안 이 문제에 갇혀 있었습니다... 어떤 도움이라도 좋을 것입니다.

미리 감사드립니다.

답변1

포트에 액세스할 수 있도록 프로그램을 sudo로 실행해야 한다는 것을 알고 있습니다. 이것이 미래에 누군가에게 도움이 되기를 바랍니다.

편집: 내 C 프로그램에는 소켓을 UDP 포트 53000에 연결하고 해당 포트를 통해 패킷을 보내려면 sudo 권한이 필요합니다.

답변2

socatTCP를 UDP로 변환하는 방법은 다음과 같습니다.

하지만 설명에서는 ssh에 대해 이야기하지 않았습니다.

으로 -L전달 하려면 ssh를 실행해야 합니다 .client TCP 8000server01 tcp 8000

ssh -L 8000:localhost:8000 server01클라이언트에서 이와 같은 것을 실행 해야합니다

관련 정보