답변:
이 작은 안내서 는 대부분의 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 orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
SSH (적어도 OpenSSH)는 간단한 VPN을 지원합니다. 클라이언트 에서 -w
또는 Tunnel
옵션을 사용하여 양쪽 끝에 장치를 ssh
만들 tun
수 있으며,이를 사용하여 모든 종류의 IP 트래픽을 전달할 수 있습니다. ( Tunnel
의 매뉴얼 페이지를 참조하십시오 ssh_config(5)
.) 양쪽 끝에 OpenSSH (및 아마도 루트 권한)가 필요합니다.
ip tuntap add
.
tun
다음과 같이 장치를 sudo ip tuntap add mode tun
사용할 때 이제까지하지만 -w
이 같은 옵션을 ssh $Server -w $port
내가 할 Tunnel device open failed. Could not request tunnel forwarding.
내가 잘못 뭐하는 거지?
또는 간단한 명령으로 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/
nc
SNMP 클라이언트는 계속 새 소스 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을 설정합니다. 그렇게해야합니다.