LAN 외부에서 OpenVPN에 연결할 수 없습니다

LAN 외부에서 OpenVPN에 연결할 수 없습니다

라우터 뒤에 OpenVPN을 설정하고 포트를 전달했습니다 1194. VPN은 서브넷을 사용하고 10.3.15.0/24있으며 192.168.1.14LAN에 있습니다.

로컬로 연결하거나 홈 네트워크에서 공용 IP에 연결할 때 작동합니다. 하지만 내가 시도한 다른 네트워크에서는 그렇지 않았습니다.

VPN에 대한 연결을 설정할 수 없으며 클라이언트에 다음과 같은 메시지가 표시됩니다.

Mon Apr 20 13:50:42 2015 UDPv4 link local: [undef]
Mon Apr 20 13:50:42 2015 UDPv4 link remote: [AF_INET]83.***.***.***:1194
Mon Apr 20 13:51:42 2015 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Mon Apr 20 13:51:42 2015 TLS Error: TLS handshake failed
Mon Apr 20 13:51:42 2015 SIGUSR1[soft,tls-error] received, process restarting
Mon Apr 20 13:51:42 2015 Restart pause, 2 second(s)

방화벽 문제일 수 있다고 생각했는데, 이것은 내 iptables에서 가져온 것입니다.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.3.15.0/24         anywhere             ctstate NEW

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

그러나 나는 테이블을 플러시하려고 시도했지만 작동하지 않았습니다. 그리고 실행 시 tcpdump -qni any port 1194약간의 통신이 이루어집니다(두 경우 모두).

13:44:35.936684 IP 194.***.***.****.53929 > 192.168.1.14.1194: UDP, length 14
13:44:41.043704 IP 194.***.***.****.22955 > 192.168.1.14.1194: UDP, length 14
13:44:43.063426 IP 194.***.***.****.22955 > 192.168.1.14.1194: UDP, length 14
13:44:43.544690 IP 194.***.***.****.53929 > 192.168.1.14.1194: UDP, length 14

또한 에 대해 뭔가를 발견했지만 destination port unreachable해당 오류는 사라졌습니다.

이것은 내 서버 구성입니다.

port 1194
proto udp
dev tun

ca openvpn_certs/host-ca.pem
cert openvpn_certs/host-cert.pem
key openvpn_certs/host-key.pem
dh openvpn_certs/dh1024.pem

server 10.3.15.0 255.255.255.0
route 10.3.15.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "redirect-gateway def1 bypass-dhcp"
push "remote-gateway 10.3.15.1"

client-to-client
max-clients 20

keepalive 10 120
comp-lzo

user nobody
group nobody

persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log

verb 11

내 클라이언트 구성은 다음과 같습니다.

client
dev vpn
dev-type tun
proto udp
remote server.remote 1194
resolv-retry infinite
nobind
ns-cert-type server
persist-key
persist-tun
pull
ca certs/ca-host.pem
cert certs/cert-local.pem
key certs/key-local.pem
comp-lzo
verb 11

서버는 Alpine Linux를 실행하고 클라이언트는 Gentoo를 실행합니다.

막혔는데 어디를 봐야 할지 모르겠거나 어떤 아이디어나 지침이 있습니까?

감사해요!

답변1

우선, 어떤 버전의 OpenVPN을 사용하고 있는지 잘 모르겠지만 v2.3.2에서는 'remote-gateway'가 유효한 옵션이 아닙니다. 이전 버전을 사용하는 경우 로컬 매뉴얼 페이지를 확인하고 필요한 경우 해당 지시문을 제거하십시오.


에 따르면OpenVPN 위키, "TLS 키 협상 실패..." 오류는 거의 항상 다음과 같은 결과로 발생합니다.

  1. 서버 네트워크의 경계 방화벽은 들어오는 OpenVPN 패킷을 필터링합니다. 기본적으로 OpenVPN은 UDP 또는 TCP 포트 번호 1194를 사용합니다.

    • 귀하의 경우에는 그럴 가능성이 거의 없지만 확실하게 라우터의 방화벽을 확인하십시오.
  2. OpenVPN 서버 시스템 자체에서 실행되는 소프트웨어 방화벽은 포트 1194에서 들어오는 연결을 필터링합니다.

    • 일반적으로 기본 INPUT 정책이 허용으로 설정되어 있다고 가정하면 제공한 필터 테이블은 괜찮아 보입니다. 그렇지 않으면 UDP 포트 1194를 허용해야 합니다.

      iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
      
  3. 서버 네트워크의 NAT 게이트웨이에는 OpenVPN 서버 시스템의 내부 주소에 대한 TCP/UDP 1194에 대한 포트 전달 규칙이 없습니다.

  4. OpenVPN 클라이언트 구성의 구성 파일에 올바른 서버 주소가 없습니다. 클라이언트 구성 파일의 원격 지시어는 서버 자체 또는 서버 네트워크 게이트웨이의 공용 IP 주소를 가리켜야 합니다.

  5. Windows 방화벽이 openvpn.exe 바이너리에 대한 액세스를 차단하고 있습니다. OpenVPN이 작동하려면 허용 목록에 추가("예외" 목록에 추가)해야 할 수도 있습니다.


여전히 문제가 있는 경우 공개 키 인프라에 문제가 있을 가능성이 높습니다. 저는 Alpine Linux와 OpenVPN 패키지에 easy-rsa가 포함되어 있는지 여부에 대해 잘 모릅니다.최신 릴리스를 다운로드하세요서버와 네트워크에 연결되지 않은 컴퓨터(인증 기관) 모두의 적절한 위치에 압축을 풉니다. 단순화를 위해 서버가 클라이언트에 대한 요청을 생성한다고 가정하겠습니다. 두 시스템 모두에서 EasyRSA를 추출한 디렉토리로 변경하고...

cp vars.example vars
editor ./vars

CA 시스템에서 조직 필드(EASYRSA_REQ_COUNTRY 등)의 주석 처리를 제거하고 편집합니다. 서버에서 선택적으로 "set_var EASYRSA_PKI"를 변경하여 적절한 위치(예: /etc/openvpn/pki)를 가리키도록 합니다.

서버에서 인증서 요청을 생성합니다.

./easyrsa init-pki
./easyrsa gen-req <your_server_name> nopass
./easyrsa gen-req <some_client_name> nopass

비서버에서 새 CA를 만듭니다.

./easyrsa init-pki
./easyrsa build-ca

.req 파일을 CA 시스템에 복사한 후 가져와서 서명합니다.

./easyrsa import-req server /tmp/<your_server_name>.req
./easyrsa import-req client /tmp/<some_client_name>.req
./easyrsa sign-req server <your_server_name>
./easyrsa sign-req client <some_client_name>

새로 서명된 인증서와 CA 인증서를 서버와 클라이언트의 적절한 위치에 복사합니다. 그런 다음 서버에서 dh 매개변수를 생성합니다.

 ./easyrsa gen-dh

마지막으로 클라이언트 키를 클라이언트 컴퓨터에 복사하고(아직 없는 경우) 새 키와 인증서 위치로 구성을 업데이트합니다.


답변2

서버의 인증서가 nsCertType=server 지정으로 서명되었는지 확인하세요(easyrsa3를 사용한 경우 이는 가치가 떨어지며 기본값이 아님). 그렇지 않은 경우 클라이언트 구성의 'ns-cert-type server' 지시문으로 인해 TLS 핸드셰이크가 실패하게 됩니다. 대신 'remote-cert-tls server'를 사용하세요.

관련 정보