아래와 같이 PC A와 PC B가 서로 다른 네트워크에 위치했다고 가정하자. A가 B로 패킷을 보내려고 한다면, 어떤 것을 알고 있어야 할까. 복잡하게 생각할 것 없이 나와 직접 연결된 컴퓨터 중 B로 패킷을 전달해 줄 수 있는 Next Hop만 기억하면 된다. 중간 전달자 역할을 해줄 Next Hop 역시 다음 전달자에 대해서만 알면 궁극적으로 B까지 패킷을 전달할 수 있을 것이다.
이렇게 특정 IP 주소나 대역에 대해 Next Hop을 지정한 것을 Route라고 하며, Route를 한데 모아서 테이블로 구성한 것을 Route Table이라고 한다(사실 이렇게 단순한 원리로 동작하진 않지만, 이해를 돕기 위해 기본 개념만 설명하였다).
Azure에서 VM을 생성하면 별다른 설정을 하지 않아도 기본 Route Table이 적용되는 것을 알 수 있다. 이를 System Routes이라고 하며, 다음과 같은 특성을 갖는다.
System Routes
- 사용자의 개입없이 자동으로 생성되며, 각 Subnet마다 할당된다.
- 사용자가 직접 생성하거나, 삭제할 수 없다.
- 사용자가 직접 정의한 Routes(User Defined Routing)를 통해 Override 가능
Default Route Table
Source | CIDR | Next Hop Type |
Default | 현재 Virtual Network와 동일 | Virtual network |
Default | 0.0.0.0/0 | Internet |
Default | 10.0.0.0/8 | None |
Default | 192.168.0.0/16 | None |
Default | 100.64.0.0/10 | None |
참고로 Route의 우선순위는 가장 범위가 작은 CIDR부터 그렇지 않은 순으로 설정되며, 암묵적으로 이루어지는 것에 유의해야 한다.
Virtual Network
Target IP가 현재 Virtual Network의 CIDR(IP Address Prefix)에 속한다면, 트래픽은 현재 Virtual Network에 속한 Subnet으로 바로 전달된다. 예를 들어 현재 Virtual Network의 CIDR이 10.0.0.0/16, 그리고 Target IP가 10.0.1.5라고 가정하면
Subnet 사이에 별도의 Gateway를 정의하지 않아도 되며,
Internet
Virtual Network나 다른 Azure 소속 Network가 아닌 Internet으로 패킷이 전송되는 경우이다. 일반적으로 Virtual Network에 속하지 않은 Target IP에 대해 Next Hop이 Internet으로 지정된다고 할 수 있다. 단 한가지 예외가 있다면 Target IP가 Azure 서비스에 해당할 경우, Region과 상관없이 Azure 백본망을 사용한다는 점이다.
None
Next Hop을 None으로 지정할 경우, 해당 패킷은 전송되지 않고 드롭된다. RFC1918에 해당하는 10.0.0.0/8, 192.168.0.0/16 그리고 RFC6598에 해당하는 100.64.0.0/10이 이 경우에 속한다.
Optional Default Route
Source | CIDR | Next Hop Type | 해당 VNet 내 Subnet 포함 여부 |
Default | 특정 Virtual Network | VNet Peering | 전부 포함 |
Virtual Network Gateway | BGP를 통해 전달받거나 Local Network Gateway에서 설정된 CIDR | Virtual Network Gateway |
전부 포함 |
Default | Multiple | VirtualNetworkServiceEndpoint | Service Endpoint가 활성화된 Subnet만 포함 |
VNet Peering
다른 VNet을 Peering으로 연결할 경우 적용되는 Route이다.
Virtual Network Gateway
VNet에 Virtual Network Gateway를 생성할 경우 추가되는 Route이며, BGP를 통해 On-premise의 Gateway로부터 전달받은 Route도 같이 포함된다.
VirtualNetworkServiceEndpoint
Azure Storage Account나 SQL Database와 같은 서비스를 Public IP가 아닌 Private IP로 접근(Service Endpoint)할 경우, Subnet 단위로 추가되는 Route이다.
Custom Routes
사용자가 직접 정의한 Route(User Defined Route)나 On-premise Network Gateway와 Azure Virtual Network Gateway 간 BGP를 통한 Route 교환으로 생성되는 Route에 대해 알아본다.
User Defined Route(UDR)
Route Table을 생성하고 여기에 사용자가 직접 Route를 정의하는 방식이다. Route 추가시, IP Address 범위(CIDR)과 이에 대한 Next hop을 지정할 수 있다.
UDR에서 Next hop으로 선택할 수 있는 유형은 다음과 같다.
None
해당 IP주소대역으로 향하는 트래픽을 Drop시킬 때 사용한다. Virtual network appliance나 Virtual network gateway가 실행 중이지 않을 때에도 Azure에 의해 None으로 바뀔 수 있다.
Internet
System Route의 경우와 동일하게 인터넷으로 패킷이 전송되며 Azure Service에 한해 전용 Backbone network를 사용한다.
Virtual network
System Route의 경우와 동일하게 현재 Virtual Network에 속한 Subnet으로 패킷이 전송된다.
Virtual network gateway
VPN(Site to Site VPN, Point to Site VPN) 타입으로 생성된 Virtual network gateway로 패킷을 전달한다(ExpressRoute의 경우 BGP를 통해서 Route 된다).
Virtual Appliance
Virtual Appliance는 네트워크 관련 Application(Firewall, Loadbalancer, NAT 등)을 수행하는 VM을 의미하며, 해당 VM에 장착된 NIC의 Private IP를 지정하여 패킷을 전달할 수 있다. 이 때 NIC의 IP forwarding 기능을 활성화한 상태여야 한다. Azure Firewall이 대표적인 Virtual Appliance에 해당하며, 0.0.0.0/0과 같이 인터넷으로 향하는 Outbound 트래픽에 대해 Next hop으로 지정하는 것을 예로 들 수 있다.
실습
동일한 Virtual Network에 Azure Firewall과 VM을 생성한 뒤, VM에서 발생하는 인터넷 Outbound 트래픽(0.0.0.0/0)을 Azure Firewall로 보내도록 UDR을 설정하는 테스트를 해보자. 아래 그림은 대략적인 리소스 구성을 다이어그램으로 표현한 것이다.
1. 아래와 같이 테스트를 위한 리소스를 준비한다.
- Resource Group: demo-rg
- Virtual Network
- name: demo-vnet
- CIDR: 10.0.0.0/16
- Subnets:
- default(10.0.0.0/24)
- AzureFirewallSubnet(10.0.1.0/26)
- Azure Firewall
- name: demo-fw
- 나머지 속성은 아래와 같이 정의하였다.
Azure Firewall 생성 후 Public IP와 Private IP를 확인한다.
- VM Instance
- Subnet 'default'에 아래와 같은 VM을 생성하였다.
VM의 Private IP를 확인한다.
현재 상태로는 VM에 Public IP가 없기 때문에 외부에서의 접근이 불가능하다. 이제 Route Table을 추가하고, Route를 지정하여 VM과 Firewall을 연결해보자.
2. Route Table 생성 및 UDR 추가
아래와 같은 Route Table을 생성한다.
인터넷으로 가야하는 Outbound 트래픽 0.0.0.0/0 을 Azure Firewall로 갈 수 있게 오버라이딩하는 Route를 아래와 같이 정의한다. Next hop type은 Virtual appliance, Next hop address는 Azure Firewall의 Private IP이다.
3. Route Table 적용
'default' Subnet에 위에서 추가한 Route Table을 적용한다.
4. DNAT Rule 추가
Azure Firewall의 Public IP로 들어오는 Inbound Traffic에 대해서 Destination Port에 따라 어디로 보내야할지 선택하는 DNAT Rule을 아래와 같이 정의한다.
- name: demo-dnat-rule
- Rule
- name: ssh
- protocol: TCP
- Source type: IP address
- Source IP: *
- Destination Address: <Azure Firewall Public IP>
- Destination Port: 22
- Transtlated Address: <VM Private IP>
- Translated Port: 22
- Rule
5. SSH 연결
VM 인스턴스 생성시 다운로드했던 SSH Key(.pem)를 통해 연결을 시도해보자.
Azure Firewall을 통해서 VM에 연결하는데 성공하였다.
6. Route 경로
우선 'apt update' 명령어를 실행해보았다. UDR을 통해서 인터넷에 대한 모든 Oubound 트래픽을 Azure Firewall로 가도록 설정하였는데, 기본적으로 인터넷을 향한 모든 Outbound 트래픽이 차단되므로 아래와 같이 실패한다.
한시적으로 Azure Firewall에 다음과 같은 Network Rule을 추가하였다. 모든 Outbound 트래픽을 허용하도록 설정하였다.
다시 'apt update'를 시도하면 이번엔 정상적으로 실행되는 것을 알 수 있다.
더 확실하게 Next Hop을 확인할 수 있는건 Network Watcher의 'Next hop'을 사용하는 방법이다. 'google.com'의 IP인 '172.217.25.174'로 패킷을 보낼 때, Next hop이 이전에 생성한 Azure Firewall의 Private IP인 10.0.1.4임을 알 수 있다.
6. 리소스 정리
Azure Firewall은 매우 비싼 서비스로 확인이 끝났으면 빨리 삭제하는 것이 좋다. 지금까지 생성한 리소스 모두 실습을 위한 목적이었기 때문에 demo-rg를 통째로 삭제한다.
참고
'Cloud' 카테고리의 다른 글
Azure - Role Based Access Control (0) | 2022.03.06 |
---|---|
Azure - Virtual Network Peering (0) | 2022.03.04 |
Container 101 - (1) Introduction (0) | 2022.01.10 |
Amazon RDS - Read Replica와 Multi AZ 비교 (0) | 2021.11.07 |
Amazon RDS - 개요 (0) | 2021.11.05 |