Azure

Azure - 멀티 NIC V통신

rygus 2025. 12. 7. 03:32
728x90

안녕하세요. 

최근 Azure 환경에서 운영 중인 VM 한 대가 VPN을 맺고 있는 AWS 네트워크와 IP 대역이 충돌하여 통신이 불가능한 문제가 발생했습니다.
이를 해결하기 위해 VM에 AWS와 겹치지 않는 새로운 NIC를 추가했지만, 여전히 정상적인 통신이 이루어지지 않는 현상이 확인되었습니다.

이번 글에서는 해당 문제의 근본 원인과 실제로 적용했던 해결 방안을 정리해보려고 합니다.

# 이슈

위와 같이 AWS 대역과 겹치지 않는 Subnet2를 Azure에 만들고 통신을 했으나 통신이 되지 않던 이슈입니다.

Azure VM에서 tcpdump를 뜨니 정상적으로 SYN 패킷을 받고 SYN + ACK 패킷을 던지고 있는 것까지는 확인이 되었으나 마지막 ACK가 확인되고 있지 않았습니다. 

 

원인 파악을 위해 테스트 환경을 구축 후 테스트하였더니 머리가 더 복잡해졌습니다. 

위와 같이 서브넷 C에 배포된 VM은 멀티 NIC를 갖고 있는 VM과 Subnet B의 NIC랑은 통신이 되지 않았고 Subnet A의 NIC와는 통신이 되었습니다.

저는 여기까지만 보고 당연히 subnet B NIC가 뭔가 막혀있구나 저거랑 아무것도 통신이 되지 않고 있는 상황이구나 라고 생각하였습니다. 

그러나 같은 서브넷 B에 배포한 VM은 잘만 통신이 되는 것이였습니다. 

아니 안될거면 다 안되야지 왜 서브넷 B에 있는 VM은 통신이 되고 서브넷 C에 있는 VM은 통신이 안 되는 거지??

# 원인

원인은 OS 내부의 라우팅 테이블 문제였습니다. 

Ethernet 4가 새로 추가된 NIC인데 Default Gateway가 없는 것을 볼 수 있습니다. 

 

그리고 라우팅 테이블을 보면 0.0.0.0/0 대역에 대해서는 서브넷 A의 게이트웨이로 잡혀있었습니다.

 

즉, 사건의 전말은 이러했습니다.
VM 입장에서는 “이 IP는 내가 속한 서브넷이 아니네? 그럼 기본 게이트웨이로 보내야겠다.”라고 판단해 트래픽을 기본 게이트웨이로 전달하려고 합니다.
하지만 실제 문제는 Azure 및 Windows 환경에서 NIC 간 IP Forwarding이 기본적으로 차단되어 있어, 해당 트래픽이 정상적으로 전달되지 못하고 막혀 있었던 것입니다.

 

반면 같은 서브넷 B에 있던 VM이 통신이 가능했던 것은 서브넷 B 대역의 경우 라우팅 테이블에 이미 같은 서브넷 B 대역에 대한 라우팅 정보를 갖고 있었기 때문에 통신이 가능했던 것입니다.

# 해결 방법

윈도우 환경에는 Strong Mode와 Weak Mode가 있습니다. 

`Strong Host Mode` : 아웃바운드 트래픽은 그 IP가 속한 NIC에서만 송신 가능함

`Weak Host Mode`  : IP에 상관없이 어떤 NIC로든 송신이 가능함

 

윈도우는 기본 모드가 `Strong Host Mode` 입니다.

그래서 Subnet B NIC 로 들어온 요청을 Subnet A NIC로 응답을 보내는 것이 불가능했던 것입니다.

이것을 `Weak Host Mode`로 변경해주어야 합니다. 

Host Mode는 NIC 별로 지정이 가능한데 Subnet B NIC에 Weak Host Mode 설정이 필요합니다.

즉, 신규로 추가된 NIC에 설정을 해주어야 합니다. 

 

# weakhost 설정
Set-NetIPInterface -InterfaceAlias "Ethernet 4" -WeakHostReceive Enabled
Set-NetIPInterface -InterfaceAlias "Ethernet 4" -WeakHostSend Enabled

# 설정 확인
Get-NetIPInterface -InterfaceAlias "Ethernet 4" | Select InterfaceAlias, WeakHostSend, WeakHostReceive

위 명령어로 진행합니다.

 

위와 같이 나오면 `weak host mode` 가 정상적으로 켜진 것입니다. 

이제 Azure에서 NIC의 IP Forwarding 기능을 켜야 합니다. 

설정하고 싶은 VM의 네트워크 설정에 들어갑니다. 

그 후 Default Gateway 대역의 NIC를 클릭합니다.

(여기서는 Subnet A의 NIC를 클릭하면 됩니다.)

 

여기를 체크하고 저장합니다.

 

이제 설정은 모두 끝났고 테스트해보겠습니다.

이제 3-way-handshake가 정상적으로 되는 것을 확인 가능합니다.

 

감사합니다.