OpenVPN 서버에 연결하기 위해 새 장치를 설정하려고 합니다. 새 장치는 GUI가 없는 Linux 시스템입니다. 데스크탑 Linux 시스템에서 구성 파일을 내보내고 필요한 사항을 변경했습니다.
데스크탑 시스템은 VPN에 연결할 수 있습니다. 하지만 새로운 시스템은 연결할 수 없습니다. 로그는 TLS 핸드셰이크 시간 초과를 보고합니다. 서버에는 다음 항목이 표시됩니다.
TLS Error: cannot locate HMAC in incoming packet from ...
이는 클라이언트가 HMAC 인증에 대해 구성되지 않았지만 서버에서는 HMAC 인증을 요구함을 나타냅니다. 그러나 이 구성은 실행 중이고 HMAC 키가 구성된 클라이언트에서 내보내집니다. 클라이언트 구성은 다음과 같습니다.
client
remote 'vpn.example.org'
ca 'ca.pem'
cert 'cert.pem'
key 'key.pem'
cipher AES-128-CBC
dev tun
proto udp
verify-x509-name 'vpn.example.org'
tls-auth 'hmackey.pem' 1
nobind
auth-nocache
script-security 2
persist-key
persist-tun
HMAC 키는 모든 시스템에서 동일합니다. 뭐가 문제 야?
답변1
배경 정보: HMAC 인증은 추가 보안 기능입니다. 핸드셰이크가 발생하기 전에도 클라이언트는 사전 공유 키를 사용하여 요청에 서명해야 합니다. 요청에 유효한 HMAC 서명이 없으면 서버는 요청을 무시합니다. UDP의 경우 이는 해당 클라이언트의 트래픽을 차단하는 방화벽과 동일합니다.
제 경우에는 다른 클라이언트와 비교해본 결과 새 시스템의 구성 파일에 해당 줄이 누락된 것 같습니다.
auth SHA256
이는 Linux 데스크탑 상자에서 내보낸 파일에는 없지만 Android 클라이언트 구성에는 표시됩니다. 이 옵션을 추가한 후 핸드셰이크가 작동했습니다(관련 없는 다른 오류가 발생할 때까지).
결론: 그렇지 않은 경우 auth
OpenVPN은 HMAC 인증을 사용하지 않거나 기본 해싱 알고리즘으로 대체됩니다(아직 어떤 경우인지 파악하지 못했습니다). 어느 쪽이든 HMAC 불일치가 발생하여 서버가 클라이언트 요청을 삭제하게 될 가능성이 높습니다.
나는기능 요구 사항tls-auth
프로젝트는 지정되었지만 지정되지 않은 경우 경고를 표시합니다 auth
.