진단 로그를 사용하여 Azure VPN Gateway 문제 해결
이 문서는 VPN Gateway 진단에 사용할 수 있는 여러 로그와 이러한 로그를 사용하여 VPN Gateway 문제를 효과적으로 해결하는 방법을 이해하는 데 도움이 됩니다.
Azure 문제와 관련된 정보가 이 문서에 없을 경우 Microsoft Q&A 및 Stack Overflow에서 Azure 포럼을 방문합니다. 이러한 포럼이나 Twitter의 @AzureSupport에 문제를 게시할 수 있습니다. 또한 Azure 지원 요청을 제출할 수 있습니다. 지원 요청을 제출하려면 Azure 지원 페이지에서 지원 받기를 선택합니다.
Azure에서 사용할 수 있는 로그는 다음과 같습니다.
- GatewayDiagnosticLog
- TunnelDiagnosticLog
- RouteDiagnosticLog
- IKEDiagnosticLog
- P2SDiagnosticLog
*정책 기반 게이트웨이의 경우 GatewayDiagnosticLog 및 RouteDiagnosticLog만 사용할 수 있습니다.
모든 VPN Gateway 로그는 Azure VPN Gateway 모니터링 데이터 참조를 참조하세요.
Azure Log Analytics를 사용하여 Azure VPN Gateway에서 진단 로그 이벤트를 설정하려면 Azure Monitor에서 진단 설정 만들기를 참조하세요.
GatewayDiagnosticLog
구성 변경 내용은 GatewayDiagnosticLog 테이블에서 감사됩니다. 실행한 변경 내용이 로그에 반영되기까지 몇 분 정도 걸릴 수 있습니다.
다음 샘플 쿼리를 참조로 사용할 수 있습니다.
AzureDiagnostics
| where Category == "GatewayDiagnosticLog"
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup
| sort by TimeGenerated asc
GatewayDiagnosticLog에 대한 이 쿼리는 여러 열을 표시합니다.
이름 | 설명 |
---|---|
TimeGenerated | 각 이벤트의 타임스탬프(UTC 표준 시간대)입니다. |
OperationName | 발생한 이벤트입니다. SetGatewayConfiguration, SetConnectionConfiguration, HostMaintenanceEvent, GatewayTenantPrimaryChanged, MigrateCustomerSubscription, GatewayResourceMove, ValidateGatewayConfiguration 중 하나일 수 있습니다. |
Message | 작업의 세부 정보를 표시하고 성공/실패 결과를 나열합니다. |
다음 예제는 새 구성이 적용될 때 로그된 활동을 보여 줍니다.
VPN Gateway 또는 로컬 네트워크 게이트웨이에서 일부 구성이 수정될 때마다 SetGatewayConfiguration이 로그됩니다.
GatewayDiagnosticLog 테이블의 결과를 TunnelDiagnosticLog 테이블의 결과와 비교하면 구성 변경 또는 유지 관리 작업 중에 터널 연결 오류가 발생했는지 확인하는 데 도움이 될 수 있습니다. 이러한 오류가 발생했다면 잠재적인 근본 원인에 대한 중요한 정보를 얻을 수 있습니다.
TunnelDiagnosticLog
TunnelDiagnosticLog 테이블은 터널의 과거 연결 상태를 검사하는 데 유용합니다.
다음 샘플 쿼리를 참조로 사용할 수 있습니다.
AzureDiagnostics
| where Category == "TunnelDiagnosticLog"
//| where remoteIP_s == "<REMOTE IP OF TUNNEL>"
| project TimeGenerated, OperationName, remoteIP_s, instance_s, Resource, ResourceGroup
| sort by TimeGenerated asc
TunnelDiagnosticLog에 대한 이 쿼리는 여러 열을 표시합니다.
이름 | 설명 |
---|---|
TimeGenerated | 각 이벤트의 타임스탬프(UTC 표준 시간대)입니다. |
OperationName | 발생한 이벤트입니다. TunnelConnected 또는 TunnelDisconnected일 수 있습니다. |
remoteIP_s | 온-프레미스 VPN 디바이스의 IP 주소 실제 시나리오에서는 관련 온-프레미스 디바이스가 둘 이상인 경우 해당 디바이스의 IP 주소로 필터링하는 것이 유용합니다. |
Instance_s | 이벤트를 트리거한 게이트웨이 역할 인스턴스입니다. 게이트웨이의 두 인스턴스 이름인 GatewayTenantWorker_IN_0 또는 GatewayTenantWorker_IN_1일 수 있습니다. |
리소스 | VPN 게이트웨이의 이름을 나타냅니다. |
ResourceGroup | 게이트웨이가 있는 리소스 그룹을 나타냅니다. |
예제 출력:
TunnelDiagnosticLog는 예기치 않은 VPN 연결 끊김에 관한 이전 이벤트 문제 해결에 유용합니다. 경량이기 때문에 적은 노력으로 여러 날에 걸친 큰 시간 범위를 분석할 수 있습니다. 연결 끊김 타임스탬프를 확인한 후에만 IKEdiagnosticLog 테이블에 대한 자세한 분석으로 전환하여 연결 끊김의 이유가 IPsec과 관련이 있는지 자세히 살펴볼 수 있습니다.
몇 가지 문제 해결 팁:
- 한 게이트웨이 인스턴스에서 연결 끊김 이벤트가 발생하고 몇 초 후에 다른 게이트웨이 인스턴스에서 연결 이벤트가 발생한다면 게이트웨이 장애 조치(failover)를 나타냅니다. 이러한 이벤트는 일반적으로 게이트웨이 인스턴스의 유지 관리로 인해 발생합니다. 이 동작에 대해 자세히 알아보려면 Azure VPN gateway 중복도 정보를 참조하세요.
- Azure 쪽에서 의도적으로 게이트웨이 재설정을 실행하여 활성 게이트웨이 인스턴스를 다시 부팅하는 경우에도 동일한 동작이 관찰됩니다. 이 동작에 대해 자세히 알아보려면 VPN Gateway 다시 설정을 참조하세요.
- 한 게이트웨이 인스턴스에서 연결 끊김 이벤트가 발생하고 몇 초 후에 동일한 게이트웨이 인스턴스에서 연결 이벤트가 발생한다면 DPD 시간 초과를 유발하는 네트워크 결함이거나 온-프레미스 디바이스가 잘못 전송한 연결 끊김입니다.
RouteDiagnosticLog
RouteDiagnosticLog 테이블은 BGP를 통해 수신되는 정적으로 수정된 경로 또는 경로에 대한 활동을 추적합니다.
다음 샘플 쿼리를 참조로 사용할 수 있습니다.
AzureDiagnostics
| where Category == "RouteDiagnosticLog"
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup
RouteDiagnosticLog에 대한 이 쿼리는 여러 열을 표시합니다.
이름 | 설명 |
---|---|
TimeGenerated | 각 이벤트의 타임스탬프(UTC 표준 시간대)입니다. |
OperationName | 발생한 이벤트입니다. StaticRouteUpdate, BgpRouteUpdate, BgpConnectedEvent, BgpDisconnectedEvent 중 하나일 수 있습니다. |
Message | 실행 중인 작업의 세부 정보입니다. |
출력에는 연결/연결 해제된 BGP 피어 및 교환된 경로에 대한 유용한 정보가 표시됩니다.
예시:
IKEDiagnosticLog
IKEDiagnosticLog 테이블은 IKE/IPsec에 대한 자세한 디버그 로깅을 제공합니다. 연결 끊김 또는 VPN 연결 실패 시나리오 문제를 해결할 때 이 로깅을 검토하면 유용합니다.
다음 샘플 쿼리를 참조로 사용할 수 있습니다.
AzureDiagnostics
| where Category == "IKEDiagnosticLog"
| extend Message1=Message
| parse Message with * "Remote " RemoteIP ":" * "500: Local " LocalIP ":" * "500: " Message2
| extend Event = iif(Message has "SESSION_ID",Message2,Message1)
| project TimeGenerated, RemoteIP, LocalIP, Event, Level
| sort by TimeGenerated asc
IKEDiagnosticLog에 대한 이 쿼리는 여러 열을 표시합니다.
이름 | 설명 |
---|---|
TimeGenerated | 각 이벤트의 타임스탬프(UTC 표준 시간대)입니다. |
RemoteIP | 온-프레미스 VPN 디바이스의 IP 주소 실제 시나리오에서는 관련 온-프레미스 디바이스가 둘 이상인 경우 해당 디바이스의 IP 주소로 필터링하는 것이 유용합니다. |
LocalIP | 문제를 해결할 VPN Gateway의 IP 주소입니다. 실제 시나리오에서는 구독에 관련 VPN 게이트웨이가 둘 이상 있는 경우 해당 VPN 게이트웨이의 IP 주소로 필터링하는 것이 유용합니다. |
이벤트 | 문제 해결에 유용한 진단 메시지를 포함합니다. 일반적으로 키워드로 시작하며 Azure 게이트웨이에서 수행되는 작업을 참조합니다. [SEND]는 Azure 게이트웨이에서 보낸 IPSec 패킷으로 인한 이벤트를 나타냅니다. [RECEIVED]는 온-프레미스 디바이스에서 수신한 패킷으로 인한 이벤트를 나타냅니다. [LOCAL]은 Azure 게이트웨이에서 로컬로 수행하는 작업을 나타냅니다. |
RemoteIP, LocalIP, Event 열은 AzureDiagnostics 데이터베이스의 원래 열 목록에는 없지만 ‘Message’ 열의 출력을 구문 분석하여 쿼리에 추가하면 분석이 간소화됩니다.
문제 해결 팁:
IPSec 협상의 시작을 식별하려면 초기 SA_INIT 메시지를 찾아야 합니다. 이러한 메시지는 터널의 어느 쪽에서도 전송될 수 있습니다. 첫 번째 패킷을 전송하는 쪽을 IPsec 용어로 ‘개시자’라고 하며, 반대쪽은 ‘응답자’가 됩니다. 첫 번째 SA_INIT 메시지는 항상 rCookie = 0인 메시지입니다.
IPsec 터널을 설정하지 못하면 Azure는 몇 초마다 재시도를 계속합니다. 따라서 IKEdiagnosticLog에서 ‘VPN 다운’ 문제를 해결하는 것이 매우 편리합니다. 문제를 재현하기 위해 특정 시간 동안 기다릴 필요가 없기 때문입니다. 또한 시도할 때마다 실패는 이론적으로 항상 동일하기 때문에 언제든지 하나의 ‘샘플’ 협상 실패만 살펴보면 됩니다.
SA_INIT에는 피어가 이 IPsec 협상에 사용하려는 IPsec 매개 변수가 포함됩니다. 공식 문서
기본 IPsec/IKE 매개 변수는 기본 설정으로 Azure 게이트웨이에서 지원하는 IPsec 매개 변수를 나열합니다.
P2SDiagnosticLog
VPN 진단에 사용할 수 있는 마지막 테이블은 P2SDiagnosticLog입니다. 이 테이블은 지점 및 사이트 간 활동(IKEv2 및 OpenVPN 프로토콜만)을 추적합니다.
다음 샘플 쿼리를 참조로 사용할 수 있습니다.
AzureDiagnostics
| where Category == "P2SDiagnosticLog"
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup
P2SDiagnosticLog에 대한 이 쿼리는 여러 열을 표시합니다.
이름 | 설명 |
---|---|
TimeGenerated | 각 이벤트의 타임스탬프(UTC 표준 시간대)입니다. |
OperationName | 발생한 이벤트입니다. P2SLogEvent가 됩니다. |
Message | 실행 중인 작업의 세부 정보입니다. |
출력에는 게이트웨이가 적용한 모든 지점-사이트 간 설정과 적용되는 IPsec 정책이 표시됩니다.
또한 클라이언트가 지점 및 사이트 간에 대해 OpenVPN 및 Microsoft Entra ID 인증을 사용하여 연결을 설정하는 경우 테이블에는 다음과 같이 패킷 활동이 기록됩니다.
[MSG] [default] [OVPN_XXXXXXXXXXXXXXXXXXXXXXXXXXX] Connect request received. IP=0.X.X.X:XXX
[MSG] [default] [OVPN_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] AAD authentication succeeded. Username=***tosouser@contoso.com
[MSG] [default] [OVPN_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx] Connection successful. Username=***tosouser@contoso.com IP=10.0.0.1
참고 항목
지점 및 사이트 간 로그에서 사용자 이름은 부분적으로 가려집니다. 클라이언트 사용자 IP의 첫 번째 8진수는 0
으로 대체됩니다.
다음 단계
터널 리소스 로그에 대한 경고를 구성하려면 VPN Gateway 리소스 로그에 대한 경고 설정을 참조하세요.