Share via


Azure CLI를 사용하여 경로 테이블이 포함된 네트워크 트래픽 라우팅

기본적으로 Azure에서는 가상 네트워크 내의 모든 서브넷 간에 트래픽을 자동으로 라우팅합니다. 고유의 라우팅을 만들어 Azure의 기본 라우팅을 재정의할 수 있습니다. 사용자 지정 경로를 만드는 기능은 예를 들어 NVA(네트워크 가상 어플라이언스)를 통해 서브넷 간 트래픽을 라우팅하려는 경우에 유용합니다. 이 문서에서는 다음 방법을 설명합니다.

  • 경로 테이블 만들기
  • 경로 만들기
  • 여러 서브넷이 있는 가상 네트워크 만들기
  • 서브넷에 경로 테이블 연결
  • Ubuntu VM에서 트래픽을 라우팅하는 기본 NVA 만들기
  • 다른 서브넷에 VM(가상 머신) 배포
  • NVA를 통해 한 서브넷에서 다른 서브넷으로 트래픽 라우팅

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

사전 요구 사항

  • 이 문서에는 Azure CLI 버전 2.0.28 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

경로 테이블 만들기

이 문서에서 생성된 모든 리소스에 대해 az group create를 사용하여 리소스 그룹을 만들어야 경로 테이블을 만들 수 있습니다.

# Create a resource group.
az group create \
  --name myResourceGroup \
  --location eastus

az network route-table create를 사용하여 경로 테이블을 만듭니다. 다음 예제에서는 myRouteTablePublic이라는 경로 테이블을 만듭니다.

# Create a route table
az network route-table create \
  --resource-group myResourceGroup \
  --name myRouteTablePublic

경로 만들기

az network route-table route create를 사용하여 경로 테이블에 경로를 만듭니다.

az network route-table route create \
  --name ToPrivateSubnet \
  --resource-group myResourceGroup \
  --route-table-name myRouteTablePublic \
  --address-prefix 10.0.1.0/24 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address 10.0.2.4

서브넷에 경로 테이블 연결

서브넷에 경로 테이블을 연결하려면 먼저 가상 네트워크 및 서브넷을 만들어야 합니다. az network vnet create를 사용하여 하나의 서브넷이 있는 가상 네트워크를 만듭니다.

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefix 10.0.0.0/16 \
  --subnet-name Public \
  --subnet-prefix 10.0.0.0/24

az network vnet subnet create를 사용하여 2개의 추가 서브넷을 만듭니다.

# Create a private subnet.
az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --address-prefix 10.0.1.0/24

# Create a DMZ subnet.
az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name DMZ \
  --address-prefix 10.0.2.0/24

az network vnet subnet update를 사용하여 myRouteTablePublic 경로 테이블을 공용 서브넷에 연결합니다.

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --name Public \
  --resource-group myResourceGroup \
  --route-table myRouteTablePublic

NVA 만들기

NVA는 라우팅, 방화벽 또는 WAN 최적화와 같은 네트워크 기능을 수행하는 VM입니다. 데모를 위해 범용 Ubuntu VM에서 기본 NVA를 만듭니다.

az vm create를 사용하여 DMZ 서브넷에서 NVA로 사용할 VM을 만듭니다. VM을 만들 때 Azure는 기본적으로 VM에 네트워크 인터페이스 myVmNvaVMNic 및 공용 IP 주소를 만들고 할당합니다. VM이 인터넷에서 연결될 필요가 없으므로 --public-ip-address "" 매개 변수는 Azure에서 VM에 공용 IP 주소를 만들고 할당하지 못하도록 지시합니다. 또한 기본 키 위치에 SSH 키가 없는 경우 해당 명령이 이 키를 만듭니다. 특정 키 집합을 사용하려면 --ssh-key-value 옵션을 사용합니다.

az vm create \
  --resource-group myResourceGroup \
  --name myVmNva \
  --image Ubuntu2204 \
  --public-ip-address "" \
  --subnet DMZ \
  --vnet-name myVirtualNetwork \
  --generate-ssh-keys

VM을 만드는 데 몇 분이 걸립니다. Azure가 VM 만들기를 완료하고 VM에 대한 출력을 반환할 때까지 다음 단계로 이동하지 마십시오.

네트워크 인터페이스 myVmNvaVMNic가 자체 IP 주소를 향하지 않고 수신된 네트워크 트래픽을 전달할 수 있으려면 네트워크 인터페이스에 대해 IP 전달을 사용 가능으로 설정해야 합니다. az network nic update를 사용하여 네트워크 인터페이스에 대한 IP 전달을 사용하도록 설정합니다.

az network nic update \
  --name myVmNvaVMNic \
  --resource-group myResourceGroup \
  --ip-forwarding true

VM 내 운영 체제 또는 VM 내에서 실행 중인 애플리케이션도 네트워크 트래픽을 전달할 수 있어야 합니다. sysctl 명령을 사용하여 Linux 커널이 패킷을 전달할 수 있도록 합니다. VM에 로그온하지 않고 이 명령을 실행하려면 사용자 지정 스크립트 확장az vm extension set를 사용합니다.

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVmNva \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"commandToExecute":"sudo sysctl -w net.ipv4.ip_forward=1"}'

명령은 실행되기까지 최대 1분이 걸릴 수 있습니다. 이 변경 내용은 VM을 다시 부팅한 후에도 유지되지 않으므로 어떤 이유로든 NVA VM을 다시 부팅하는 경우 스크립트를 반복해야 합니다.

가상 머신 만들기

이후 단계에서 공용 서브넷의 해당 트래픽이 NVA를 통해 프라이빗 서브넷에 라우팅되는지 유효성을 검사할 수 있도록 가상 네트워크에 두 개의 VM을 만듭니다.

az vm create를 사용하여 공용 서브넷에 VM을 만듭니다. --no-wait 매개 변수를 사용하면 Azure가 백그라운드에서 명령을 실행할 수 있으므로 다음 명령을 계속 진행할 수 있습니다. 이 문서를 간소화하기 위해 암호가 사용됩니다. 일반적으로 키는 프로덕션 배포에 사용됩니다. 키를 사용하는 경우 SSH 에이전트 전달도 구성해야 합니다. 자세한 내용은 SSH 클라이언트를 위한 설명서를 참조하세요. 다음 명령에서 <replace-with-your-password>를 원하는 암호로 바꿉니다.

adminPassword="<replace-with-your-password>"

az vm create \
  --resource-group myResourceGroup \
  --name myVmPublic \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Public \
  --admin-username azureuser \
  --admin-password $adminPassword \
  --no-wait

프라이빗 서브넷에 VM을 만듭니다.

az vm create \
  --resource-group myResourceGroup \
  --name myVmPrivate \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Private \
  --admin-username azureuser \
  --admin-password $adminPassword

VM을 만드는 데 몇 분이 걸립니다. VM을 만든 후 Azure CLI는 다음 예제와 비슷한 정보를 표시합니다.

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmPrivate",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.1.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

publicIpAddress를 기록해 둡니다. 이 주소는 이후 단계에서 인터넷을 통해 VM에 액세스하는 데 사용됩니다.

NVA를 통한 트래픽 라우팅

원하는 SSH 클라이언트를 사용하여 위에서 만든 VM에 연결합니다. 예를 들어 WSL과 같은 명령줄 인터페이스에서 다음 명령을 사용하여 myVmPrivate VM으로 SSH 세션을 만들 수 있습니다. <publicIpAddress>를 VM의 공용 IP 주소로 바꿉니다. 위의 예제에서 IP 주소는 13.90.242.231입니다.

ssh azureuser@<publicIpAddress>

암호를 입력하라는 메시지가 표시되면 가상 머신 만들기에서 선택한 암호를 입력합니다.

다음 명령을 사용하여 myVmPrivate VM에 경로 추적을 설치합니다.

sudo apt update
sudo apt install traceroute

myVmPrivate VM에서 myVmPublic VM으로의 네트워크 트래픽 라우팅을 테스트하려면 다음 명령을 사용합니다.

traceroute myVmPublic

응답은 다음 예제와 유사합니다.

traceroute to myVmPublic (10.0.0.4), 30 hops max, 60 byte packets
1  10.0.0.4 (10.0.0.4)  1.404 ms  1.403 ms  1.398 ms

트래픽이 myVmPrivate VM에서 myVmPublic VM으로 직접 라우팅되는지 볼 수 있습니다. Azure의 기본 경로는 트래픽을 서브넷 간에 직접 라우팅합니다.

myVmPrivate VM에서 myVmPublic VM으로 SSH하려면 다음 명령을 사용합니다.

ssh azureuser@myVmPublic

다음 명령을 사용하여 myVmPublic VM에 경로 추적을 설치합니다.

sudo apt-get install traceroute

myVmPublic VM에서 myVmPrivate VM으로의 네트워크 트래픽 라우팅을 테스트하려면 다음 명령을 사용합니다.

traceroute myVmPrivate

응답은 다음 예제와 유사합니다.

traceroute to myVmPrivate (10.0.1.4), 30 hops max, 60 byte packets
1  10.0.2.4 (10.0.2.4)  0.781 ms  0.780 ms  0.775 ms
2  10.0.1.4 (10.0.0.4)  1.404 ms  1.403 ms  1.398 ms

첫 번째 홉이 NVA의 개인 IP 주소인 10.0.2.4인 것을 확인할 수 있습니다. 두 번째 홉은 myVmPrivate VM의 개인 IP 주소인 10.0.1.4입니다. 경로가 myRouteTablePublic 경로 테이블에 추가되고 공용 서브넷에 연결되었으므로 Azure는 트래픽을 직접 프라이빗 서브넷에 라우팅하는 대신 NVA를 통해 트래픽을 라우팅합니다.

myVmPublicmyVmPrivate VM 모두에 대한 SSH 세션을 닫습니다.

리소스 정리

더 이상 필요하지 않은 경우 az group delete를 사용하여 리소스 그룹 및 그룹에 포함된 모든 리소스를 제거합니다.

az group delete --name myResourceGroup --yes

다음 단계

이 문서에서는 경로 테이블을 만들고 서브넷에 연결했습니다. 공용 서브넷에서 프라이빗 서브넷으로 트래픽을 라우팅하는 간단한 NVA를 만들었습니다. 이제 Azure Marketplace에서 방화벽 및 WAN 최적화 같은 네트워크 기능을 수행하는 다양한 미리 구성된 NVA를 배포합니다. 라우팅에 대한 자세한 내용은 라우팅 개요경로 테이블 관리를 참조하세요.

가상 네트워크 내에서 여러 Azure 리소스를 배포할 수 있는 반면, 일부 Azure PaaS 서비스에 대한 리소스는 가상 네트워크에 배포할 수 없습니다. 하지만 일부 Azure PaaS 서비스의 리소스에 대한 액세스를 가상 네트워크 서브넷의 트래픽만으로 제한할 수 있습니다. 방법을 알아보려면 PaaS 리소스에 대한 네트워크 액세스 제한을 참조하세요.