TCP를 통해 UDP 데이터그램을 터널링하기 위한 명령줄 도구입니다.
SSH를 통한 UDP 터널링에 특히 유용합니다.
이 도구는 명확한 클라이언트-서버 관계 없이 UDP를 통해 서로 통신해야 하는 두 개의 애플리케이션이 있는 사용 사례를 위해 주로 설계되었습니다. 즉, 두 애플리케이션 중 하나가 패킷을 시작할 수 있으며 시작 시 다른 애플리케이션의 주소로 구성되어야 합니다(즉, 포트는 무작위일 수 없습니다).
두 애플리케이션의 호스트 모두에서 udp-over-tcp
실행합니다. 각 인스턴스는 다른 인스턴스에서 실행되는 애플리케이션에서 일종의 로컬 복제본 역할을 합니다. 한 호스트의 애플리케이션이 UDP 포트 P를 수신하는 경우 udp-over-tcp
다른 호스트의 UDP 포트 P를 수신하고 복제본 P에 대한 트래픽이 실제 애플리케이션의 포트 P로 이동하는지 확인합니다. 결정적으로 udp-over-tcp
두 애플리케이션의 포트에 대해 동시에 이 작업을 수행하고 포트를 연결합니다. 이는 각 응용 프로그램이 다른 응용 프로그램에 대해 로컬로 실행되는 것처럼 효과적으로 "가장"합니다.
구체적으로, 한 호스트의 애플리케이션이 포트 P에서 (로컬 복제본) 포트 Q로 데이터그램을 보내는 경우 데이터그램은 소스 포트 P를 사용하여 실제(원격) 애플리케이션의 포트 Q에 도착합니다. 이는 애플리케이션이 항상 동일한 단일 주소(localhost)와 포트(다른 애플리케이션의 포트)를 확인하고 해당 애플리케이션의 피어 구성에서도 동일한 주소-호스트 쌍을 사용할 수 있음을 의미합니다.
다음 다이어그램이 udp-over-tcp
구성 설정을 이해하는 데 도움이 되기를 바랍니다.
이 프로그램은 다양한 플랫폼에 대해 사전 컴파일되어 제공되며(cargo-dist에게 감사드립니다!) 종속성 없이 즉시 실행 가능해야 합니다.
또는 Cargo를 통해 다음과 같이 설치할 수 있습니다.
$ cargo install udp-over-tcp
포트 A의 호스트 X에서 실행되는 UDP 애플리케이션이 있습니다. 포트 B의 호스트 Y에서 실행되는 UDP 애플리케이션과 통신하기를 원합니다. 또한 Y의 애플리케이션이 X의 A와 통신하도록 허용하려고 합니다. 좋습니다. 다음과 같이:
두 호스트 중 하나(여기서는 X)에서 먼저 다른 호스트에 대한 TCP 터널을 만듭니다.
ssh -L 7878:127.0.0.1:7878 $Y
다음으로, --tcp-listen
있는 호스트와 --tcp-connect
있는 호스트 모두에서 udp-over-tcp를 실행합니다. --tcp-listen
전달을 통해 연결이 허용되는 호스트( 여기서는 Y)에서 사용해야 합니다. 어느 순서로든 실행할 수 있지만 가장 좋은 방법은 먼저 듣는 것입니다.
Y $ udp-over-tcp --tcp-listen 7878 --udp-bind $A --udp-sendto $B
X $ udp-over-tcp --tcp-connect 7878 --udp-bind $B --udp-sendto $A
Y에서는 UDP 포트 $A에서 수신 대기하고 TCP를 통해 X로 전달한 다음 그곳의 UDP 포트 $A로 전달합니다. X에서는 UDP 포트 $B에서 수신 대기하고 TCP를 통해 Y로 전달한 다음 그곳의 UDP 포트 $B로 전달합니다.
이제 X의 응용 프로그램을 127.0.0.1:$B로 보내도록 구성하고 Y의 응용 프로그램을 127.0.0.1:$A로 보내도록 구성합니다. 즉, 동일한 포트, 로컬 IP 주소입니다.
각 인수는 주소를 지정하기 위해 포트 번호(위와 같이) 또는 addr:port를 사용합니다. (주소 기본값은 수신/바인드의 경우 0.0.0.0이고 연결/전송의 경우 127.0.0.1입니다)
이 문제를 해결하는 데 도움이 될 수 있는 다른 도구가 있지만 이 도구는 이 도구와는 다른 속성을 가지고 있습니다.
nc
또는 socat
에 의존하는 솔루션은 UDP 데이터그램 경계를 유지하지 않습니다. 즉, 두 개의 UDP sendmsg
로 인해 단일(결합) 메시지만 recvfrom
통해 도착할 수 있습니다. 많은 UDP 애플리케이션은 메시지 프레이밍을 제공하기 위해 UDP에 의존하기 때문에 이에 대한 탄력성이 없습니다.
mullvad의 udp-over-tcp는 단방향 전달만 제공합니다. 도구의 추가 인스턴스를 실행하여 다른 방향으로 전달할 수 있지만 그렇게 하면 들어오는 데이터그램의 소스 포트가 나가는 데이터그램의 대상 포트와 일치하지 않게 됩니다. 그러나 이는 클라이언트 포트가 중요하지 않은 클라이언트-서버 스타일 애플리케이션에는 괜찮을 것 같습니다.
다음 중 하나에 따라 라이선스가 부여됨
귀하의 선택에 따라.
귀하가 명시적으로 달리 명시하지 않는 한, Apache-2.0 라이선스에 정의된 대로 귀하가 저작물에 포함하기 위해 의도적으로 제출한 기여는 추가 이용약관 없이 위와 같이 이중 라이선스가 부여됩니다.