SSH 터널을 통한 UDP 트래픽 패킷을 보내고 서버가 다른

제목은 거의 요약합니다. SSH 터널을 통해 UDP 트래픽을 보내려고합니다. 특히 터널을 통해 UDP 패킷을 보내고 서버가 다른 쪽에서 나에게 다시 보낼 수 있어야합니다. TCP 연결을 수행하는 방법을 알고 있습니다. UDP로 가능합니까?



답변

이 작은 안내서 는 대부분의 UNIX 유사 운영 체제에서 표준 (ssh, nc, mkfifo)으로 제공되는 도구를 사용하여 SSH를 통해 UDP 트래픽을 보내는 방법을 알려줍니다.

SSH 연결을 통한 UDP 터널링 수행

단계적으로 SSH 연결로 TCP 전달 포트를여십시오.

로컬 시스템 (로컬)에서 추가 -L 옵션을 사용하여 SSH를 사용하여 원격 시스템 (서버)에 연결하여 TCP 포트가있는 SSH를 전달하십시오.

local# ssh -L 6667:localhost:6667 server.foo.com

그러면 로컬 컴퓨터의 포트 번호 6667에서 TCP 연결이 보안 채널을 통해 server.foo.com의 포트 번호 6667으로 전달 될 수 있습니다. 서버에서 TCP를 UDP로 전달 설정

서버에서 TCP 포트 6667에서 리스너를 열어 데이터를 지정된 IP의 UDP 포트 53으로 전달합니다. 나와 같은 DNS 전달을 원한다면 /etc/resolv.conf에있는 첫 번째 네임 서버의 IP를 사용할 수 있습니다. 그러나 먼저, 우리는 fifo를 만들어야합니다. fifo는 두 채널 사이에 양방향 통신이 필요합니다. 간단한 쉘 파이프는 왼쪽 프로세스의 표준 출력과 오른쪽 프로세스의 표준 입력 만 통신합니다.

server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo

그러면 서버 포트 6667의 TCP 트래픽이 192.168.1.1의 포트 53에서 UDP 트래픽으로 전달되고 응답이 다시 올 수 있습니다. 머신에서 UDP를 TCP로 전달하도록 설정

이제 로컬 컴퓨터에서 수행 한 작업과 반대로 수행해야합니다. UDP 포트 53을 바인딩하려면 우선 액세스 권한이 필요합니다.

local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo

로컬 컴퓨터 포트 53의 UDP 트래픽을 로컬 컴퓨터 포트 6667의 TCP 트래픽으로 전달할 수 있습니다. 로컬 DNS 서버를 즐기십시오 🙂

예상 한대로 로컬 UDP 포트 53과 같은 로컬 컴퓨터에서 DNS 쿼리를 수행하면 로컬 TCP 포트 6667, 서버의 TCP 포트 6667, 서버의 DNS 서버로 전달됩니다. , UDP 포트 53 (192.168.1.1). 로컬 컴퓨터에서 DNS 서비스를 즐기려면 /etc/resolv.conf에서 다음 행을 이름 서버로 지정하십시오.

nameserver 127.0.0.1

답변

(John의 대답이 다른 곳에서 같은 것을 가리킨다 고 생각합니다)는 TCP / SSH 연결을 통해 다른 컴퓨터의 UDP / DNS 서비스에 액세스하는 방법을 설명합니다.

로컬 UDP / 53 트래픽을 TCP로 전달한 다음 SSH의 포트 전달 메커니즘을 사용하여 TCP 트래픽을 다른 시스템으로 전달한 다음 TCP를 UDP / 53에서 다른 시스템으로 전달합니다.
일반적으로 openvpn으로 수행 할 수 있습니다.
그러나 여기서는 더 간단한 도구로 openssh와 netcat 만 사용합니다.

해당 페이지의 끝에 ‘ socat‘를 참조하는 다른 주석
이 있습니다. 동일한 UDP / DNS 액세스는

서버 측 : socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
클라이언트 측 :socat udp4-listen:53,reuseaddr,fork tcp:localhost:5353

자세한 내용은 socat 예제 를 참조하십시오 .


답변

SSH (적어도 OpenSSH)는 간단한 VPN을 지원합니다. 클라이언트 에서 -w또는 Tunnel옵션을 사용하여 양쪽 끝에 장치를 ssh만들 tun수 있으며,이를 사용하여 모든 종류의 IP 트래픽을 전달할 수 있습니다. ( Tunnel의 매뉴얼 페이지를 참조하십시오 ssh_config(5).) 양쪽 끝에 OpenSSH (및 아마도 루트 권한)가 필요합니다.


답변

또는 간단한 명령으로 ssf (이 사용 사례를 처리하도록 설계된)를 간단히 사용할 수 있습니다 .


고객 입장에서:

#>./ssfc -U 53:192.168.1.1:53 server.foo.com

이 명령은 localhost와 server.foo.com 사이의 보안 터널을 통해 로컬 포트 ​​53 (dns)을 192.168.1.1 포트 53으로 리디렉션합니다.


ssf 서버 대신 또는 ssf 서버 옆에 ssf 서버가 필요합니다 .

#>./ssfs

그건 그렇고, ssf의 클라이언트와 서버 측 모두 Windows / Linux / Mac에서 작동합니다. 이것은 사용자 응용 프로그램이므로 tun / tap 또는 VPN이 필요하지 않습니다.

포트 53을 리디렉션하려면 사용중인 도구에 관계없이 관리자 권한이 필요합니다.

자세한 정보, 세부 사항, 유스 케이스 또는 다운로드 : https://securesocketfunneling.github.io/ssf/


답변

ncSNMP 클라이언트는 계속 새 소스 UDP 포트를 선택하고 여러 개는 한 번에 활성화 될 수 있기 때문에 SNMP를 사용할 수 없었습니다 .

대신, socat블로그 게시물 에서 SNMP를 예로 사용하여 작업을 수행하는 방법을 설명하는 게시물을 작성했습니다 . 기본적으로 개요부터 시작하여 두 개의 터미널을 사용합니다.

터미널 1 :

client$ ssh -L 10000:localhost:10000 server
server$ socat -T10 TCP4-LISTEN:10000,fork UDP4:switch:161

이것은 TCP 포트 10000의 SSH 전달을 생성하고 서버에서 socat을 실행합니다. socat 명령 행에서 스위치의 IP 주소가 “switch”라고 언급 된 것을 주목하십시오.

터미널 2 :

client$ sudo socat UDP4-LISTEN:161,fork TCP4:localhost:10000

클라이언트에서 socat을 설정합니다. 그렇게해야합니다.


답변

UDP 포트에 액세스 할 수 있으면 VPN이 더 나은 솔루션입니다.

TCP SSH 포트에만 액세스 할 수있는 경우 SSH 터널은 VPN과 마찬가지로 핑 및 패킷 역 추적에 적합합니다.