OpenVPN 클라이언트가 OpenVPN 클라이언트를 사용하지 않고 원격 포트에서 수신 대기 중인지 확인하는 방법은 무엇입니까?


39

주어진 호스트에서 OpenVPN (UDP) 서버가 작동하고 액세스 가능한지 확인해야합니다.

OpenVPN 클라이언트가없고 (설치할 기회가없는) 일반 Windows XP 컴퓨터 만 있고 서버에 연결하는 데 키가 필요하지 않습니다. 일반적인 WinXP 명령 줄 도구, 브라우저 및 PuTTY가 처리됩니다.

SMTP 또는 POP3 서버와 같은 것을 테스트하고 있다면 telnet을 사용하고 응답하는지 확인하지만 OpenVPN (UDP)으로 어떻게 수행합니까?


openvpn이 tcp를 통해 실행 중이라면 telnet도 가능합니다
rvs

OpenVPN은 UDP를 통해 실행
Ivan

2
실제 모니터링 시스템이 아닌 구식 Windows 시스템에서이 문제를 해결하려는 이유를 자세히 설명 할 수 있습니까?
Alex Holst

2
UDP openvpn 서버가 (권장) tls-auth구성 옵션을 사용하는 경우 불가능합니다 (최소한 외부 래퍼 키가없는 경우)! HMAC 서명이 잘못된 패킷은 서버의 응답없이 폐기됩니다.
Alex Stragies

답변:


50

쉘 원 라이너는 다음과 같습니다.

echo -e "\x38\x01\x00\x00\x00\x00\x00\x00\x00" | 
   timeout 10 nc -u openvpnserver.com 1194 | cat -v

다른 쪽 끝에 openvpn이 있으면 출력은

@$M-^HM--LdM-t|M-^X^@^@^@^@^@@$M-^HM--LdM-t|M-^X^@^@^@^@^@@$M-^HM--LdM-t|M-^X...

그렇지 않으면 10 초 후에 음소거 및 시간 초과되거나 다른 것을 표시합니다.

참고 :이 tls-auth옵션은 구성 옵션이 활성화되어 있지 않은 경우에만 작동합니다 . 그렇지 않으면 서버가 잘못된 HMAC를 가진 메시지를 거부합니다.


1
나는 조금 다른 것을 얻지 만 뭔가를 얻습니다. 감사.
artfulrobot 2013

7
명백하게 말하면, 이것은 Windows가 아닌 Linux / Unix 용입니다. 그리고 netcat이 필요합니다 (일부 배포판에서는 기본적으로 설치되지 않음). 또한 Linux 배포판에 "timeout"명령이없는 경우 "nc -w 10 -u openvpnserver.com 1194"와 같은 netcat "-w"매개 변수를 사용하십시오.
MV.

1
이것은 굉장합니다.
dmourati 2016 년

2
서버가 tls-auth구성 옵션을 사용하여 잘못된 HMAC 시그를 가진 패킷을 삭제 하는 경우 OP 시나리오에서는 작동하지 않습니다 .
Alex Stragies

2
나는에 배관 찾을 od -x -N 14것이 아니라 cat -v당신이) 즉시) 대신 ASCII 쓰레기와 b보다 실제 바이너리 컨텐츠를 볼 수있는 서버는 핸드 쉐이크 패킷을 전송로 출력의 각 행을 받고 바로 최초의 후 그것을 막을 수 있기 때문에 훨씬 더 유용하다. -N 14핸드 셰이크 패킷의 길이는 14 바이트이므로 반복됩니다.
BaseZen

5

내 답변에 약간 늦었다면 죄송합니다.;)
다음 내용의 udp 패킷을 보내십시오.
$ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
서버가 무언가 응답해야합니다.
다음과 같이 파이썬으로 udp 패킷을 위조 할 수 있습니다.

import socket
senddata= "\x38\x01\x00\x00\x00\x00\x00\x00\x00"

def checkserver(ip,port):
   print('Checking %s:%s' %(ip,port)) 
   sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
   sock.settimeout(5) # in seconds
   sock.connect((ip, port))
   print("Sending request...")
   sock.send(senddata)
   try:
      dta=sock.recv(100)
      print("Server reply: %s" %(dta))
   except:
      print("Server not responding")
   sock.close()
   print("###########################################################")

def main():
   checkserver("addr.of.server1",1194)
   checkserver("addr.of.server2",1195)

if __name__ == "__main__":
   main()

1
loic의 답변에서 알 수 있듯이 이것은 작동하지 않습니다 tls-auth.
tedder42

1
Python 3의 경우 10 행에서 문제가 발생합니다. "sock.send (senddata)"를 "sock.send (senddata.encode ())"로 바꾸면 작동합니다.
NDB

2

CLI에서 다음을 실행할 수 있습니다.

#netstat -ltnup

서버 / 시스템에서 수신 대기중인 모든 프로세스가 나열되어야합니다. 원하는 포트 번호를 확인하십시오

#netstat -ltnup | grep 1194

OP에는 Windows XP 도구 만 있습니다.
user9517은 GoFundMonica를 지원합니다.

1
@Iain : OP에 PuTTY가 있었으므로 서버에 SSH로 연결할 수 있습니다. 이 경우이 매우 간단한 검사는 유용한 첫 단계입니다.
mivk

2

tls-auth기능을 사용하여 활성화 된 서버를 모니터링하려는 사람은 여기에서 python 스크립트를 사용할 수 있습니다 : https://github.com/liquidat/nagios-icinga-openvpn

출력은 Nagios 또는 Icinga에서 사용하도록 형식화되어 있지만 파이썬 및 tls 키 파일을 사용할 수있는 경우 모든 사람이 실행할 수 있습니다.

예를 들어, SHA256다이제스트로 사용하는 경우 다음과 같은 것을 사용합니다.

python check-openvpn.py -p 1194 --tls-auth ta.key --digest SHA256 vpn-server.example.com

참고 : --tls-auth-inverse서버 key-direction값 에 따라 추가해야 할 수도 있습니다 .


0

유효한 OpenVPN 클라이언트와 OpenVPN 서버 상호 작용의 pcap을 얻을 수 있다면 TiZon이 제안한대로 netcat과 같은 초기 패킷 세트를 모델링 할 수 있습니다.

기본적으로 서버가 최소한 오류 메시지로 응답 할 수 있도록 유효한 첫 번째 패킷을 충분히 원하므로 완벽하지 않아도됩니다.

http://pcapr.net을 시도했지만 OpenVPN 예제가 보이지 않았습니다. 아마도 다른 사람이 서비스가 있다고 주장하면 다른 사람이 거래의 한도를 잡을 수 있습니다.


-5

tcp에서 openvpn을 설정하면 다음과 같이 간단합니다.

telnet vpnserver 1194

1194가 수신 대기중인 포트라고 가정

이것은 당신에게 openvpn 서버가 듣고 있음을 보여주는 일종의 응답을 제공해야합니다


100 % 확실합니까? 이렇게하면 약간의 대기 후 "포트 1194에서 호스트에 대한 연결을 열 수 없습니다 : 연결에 실패했습니다"라는 메시지가 나타납니다. OpenVPN 서버가 응답하기 전에 클라이언트가 무엇인가 먼저 말하려고하지 않습니까?
Ivan

6
기본적으로 OpenVPN은 UDP 전용이며 텔넷은 TCP를 사용합니다.
Ivan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.