오리뎅이의 네떡세상

[오리뎅이의 라우팅 이야기 - 4] Static Routing의 시작은 PC와 서버

오리뎅이의 라우팅 테이블 훔쳐보기

안녕하세요? 오리뎅이입니다.

 

터기 이스탄불 피에르로티 언덕에서 내려다 본 도시 풍경

위 사진은 2014년에 터키 이스탄불에 출장을 갔을 때, 찍은 사진이에요. 터키 보다폰 통신 사업자 사무실에서 회의를 마치고, 저희 법원 사무실로 돌아가기 위해서 택시를 탔는데요. 택시 기사가 길을 헤매이다가 내려 놓은 곳이 바로 이 언덕 뒷편이었어요. 저희 법원 사무실은 사진 오른쪽 언덕 중간 즈음에 있거든요. ^^. 저는 이전에 사우디에 주재원으로 있을 때, 가족 여행으로 이곳에 와봤던 적이 있어서 택시가 피에르로티 언덕 뒷편 즈음에 와 있는 것을 알겠더라구요. 그래서 마침 같이 출장 갔었던 동료도 있고 해서 좀 둘러 봐야겠다는 심정으로 기사님께 거기에 그냥 내려 달라고 했어요. 느낌으로 언덕 정상만 넘어가면 나올것 같아서 느낌만 믿고 이 피에르로티 언덕 앞쪽으로 걸어 왔어요. 택시 기사님이 헤매신 덕분에 출장 중에 이 아름다운 피에르로티 언덕을 관광 하게 되었던 것이지요. 사진으로 봐도 넘 멋진 풍경이네요. 코로나로 집콕을 너무 오래동안 해서 그런지 정말 너무 너무 다시 가보고 싶으네요. ^^ 

Static Routing 프롤로그

Connected에 이은 두번째 오리뎅이의 라우팅 이야기 주제는 Static Routing입니다. Connected는 PC나 서버, 그리고, 라우터와 같은 IP를 사용하는 장비에서 인터페이스에 IP와 Subnet을 설정하면 라우팅 테이블에 자동으로 Connected 엔트리가 생성 됩니다. 같은 subnet에 있는 다른 장비들과의 통신은 별도로 다른 라우팅 설정을 하지 않더라도 라우팅 테이블에 생성된 Connected로 통신이 됩니다. Static Routing 프로토콜 또는 Dynamic Routing 프로토콜을 이용해서 라우팅 설정을 해야 하는 경우는 라우팅 장비를 통해서 다른 네트워크에 떨어져 있는 장비와 통신을 하고자 하는 경우에 필요합니다. Static Routing은 PC와 서버는 물론이고, 라우터, Firewall, L4-L7 switch 등에서 매우 광범위하게 사용되고 있습니다. Dynamic Routing 프로토콜 이야기를 시작하기에 앞서 Static Routing의 BoB(Basic of Basic)를 하나씩 하나씩 찬찬히 살펴 보겠습니다.

 

    - Linux, Windows 10, 라우터 각각에서 Static Route 설정 방법 

       . 기본 Static Route 설정 방법

       . 4가지 파라미터 사용 방법

       . 설정 영구(Permanent) 적용 방법

    - Redundancy

       . Static Route 장애 감지

       . Link Redundancy vs L2 Device Redundancy vs L3 Device Redundancy 

       . L2 Redundancy

         → Bonding/Teaming

         → LACP

       . FHRP : VRRP, HSRP

       . Floating Static Route

       . ECMP

    - 빠른 장애 감지 및 절체 - BFD

       . Static Route + ECMP + BFD

    - Default Route 설계

    - Router On a Stick

    - Control Plane vs Data(Forwarding) Plane : 평면이 대체 모라구?

       . L2 SW, L3 SW, Router, L4-L7 Switch, Firwall등 각 장비의 CPU는 어디에 있나?

 

해야 할 이야기들이 정말 많아 보이네요. 그래도 하나씩 하나씩 풀어 가다보면, 곧 끝이 보이겠지요. 시작이 반이라고 했으니, 이미 절반은 끝낸 샘입니다요. ^^

 

Static Routing 설정 방법 1, 2, 3

[오리뎅이의 라우팅 이야기 - 3] Connected - IP 네트워킹, 라우팅의 시작 - 3/3 편에서는 Windows 10, Linux, 그리고 Cisco 라우터에서 Static Route를 설정하는 아래의 3가지 설정 방법에 대해서 살짝 맛보기로 알아 보았었습니다.

 

  방안 1) Gateway(PC or 서버) 또는 nexthop(라우터) 만 설정하는 경우 (이후 [gateway|nexthop]로 표시)

  방안 2) Interface만 설정하는 경우

  방안 3) [gateway|nexthop] Interface 둘 모두 설정하는 경우

 

* PC 또는 server와 같은 End host 장비에서는 다른 네트워크와 통신하기 위해서 설정하는 라우팅 디바이스의 IP를
   gateway라고 부르고, router에서는 다른 routing 장비를 통해서 간접 전달을 해야 하는 경우, 설정해야 하는 다른
   라우팅 장비의 IP를 nexthop이라고 부릅니다.

 

각 방안을 사용하는 경우의 특징으로는 다음과 같은 것들이 있었습니다.

 

  방안 1)을 사용하는 경우는 recursive lookup이 발생한다. Interface down 되어도 엔트리가 삭제되지 않는다

  방안 2)를 사용하는 경우는 대상과 직접 통신을 시도한다. 모든 대상 IP로 직접 ARP resolution 시도한다

  방안 3)을 사용하는 경우는 Recursive lookup 발생하지 않고, Interface가 down 되면 엔트리가 자동으로 삭제되고, ARP resolution은 [gateway|nexhop] 1개에 대해서만 생성된다.  

 

방안 3)으로 하는 것이 가장 이상적인 방법이란 것을 딱봐도 쉽게 알 수 있습니다. 특별한 이유가 있어 방안 1)이나 방안 2)를 사용 해야하는 경우가 아니라면, 방안 3) 으로 설정하는 것이 좋습니다.

 

* 방안 1)을 사용해야만 하는 특별한 이유 : 장비가 2가지 모두 설정하는 것을 지원하지 않는데, 방안 2)를 사용할 경우, 너무 많은 ARP table 엔트리가 생성될 수 있는 상황인 경우
* 방안 2)를 사용해야만 하는 특별한 이유 : 서로 다른 subnet 대역에 있는 peer간 통신이 되도록 해야 하는 경우

 

Static Routing의 시작은 - PC or 서버

그림1. PC와 서버간 Static Routing 설정 설명을 위한 네트워크

그림1에는 점선 타원으로 표시한 5개의 서로 다른 LAN(Local Area Network)이 있습니다. 좌측에 있는 PC0과 PC1은 SW0를 통해서 R0에 연결되어 하나의 LAN을 구성합니다. 오른쪽의 Server0과 Server1도 SW1을 통해서 R2에 연결되어 또 다른 하나의 LAN을 구성합니다. 라우터와 라우터 사이는 직접 direct로 연결 되더라도 독립적인 하나의 LAN입니다.  PC와 서버는 서로 다른 네트워크에 있기 때문에 직접 통신이 불가능하고, 라우터를 통해서 간접 통신만 가능합니다. Static Routing 설정을 통해서 PC와 서버가 서로 통신이 되도록  해 보겠습니다.

 

PC와 서버가 서로 통신을 하기 위해서는 PC에서 서버로 가는 길(route), 서버에서 PC로 돌아 오는 길(route)의 양방향 route가 모든 라우팅 홉에 설정이 되어야 합니다. 라우팅 설정의 시작은 양쪽 end host인 PC와 서버에서 시작됩니다. 네트워크를 처음 배우는 분들은 패킷 트레이서나 GNS3와 같은 시뮬레이터로 실습을 할 때, 종종 PC나 서버의 라우팅 설정을 하지 않는 경우가 있습니다. 좀 더 심한 경우는 라우팅 테이블은 라우터에만 있다고 생각하는 경우도 있습니다. 이는 아마도 집이나 회사의 PC를 사용할 때에 라우팅 테이블 설정을 별도로 할 일이 없기때문에 PC에는 라우팅 테이블이 없다고 생각하게 되었을 수도 있을 것 같습니다.  PC에도 라우팅 테이블 있습니다. ^^

 

Windows 10 Static Routing 설정

Windows 10 PC에서의 Static Route 설정은 아래 참조1과 같이 4가지 파라미터들이 사용될 수 있습니다. MASK 까지 별도로 한다면 파라미터가 5가지 이지만, 의미상 Destination과 Mask(또는 Prefix)가 함께 목적지 네트워크를 나타내므로 하나의 파라미터라고 간주하고 이야기 하겠습니다. 

 


Windows 10 Static Route 
설정
   
route add 10.10.13.0 MASK 255.255.255.0  10.10.10.1 METRIC 3 IF 2
             destination^                           ^gateway    metric^    ^interface

route -p add10.10.13.0/24 10.10.10.1 METRIC 3 IF 2    // -p (permanent) 옵션 : 재시동 되더라도 테이블 유지

참조1. Windows 10 Static Routing 설정 예

 

Destination은 MASK (또는 Prefix)와 함께 목적지 네트워크를 나타냅니다. MASK 대신에 10.10.13.0/24 와 같이 Prefix를 이용해서 목적지 네트워크를 나타낼 수도 있습니다.  Destination은 Static Routing 설정에 필수 파라미터입니다. MetricInterface는 필수 파라미터가 아닙니다. 생략할 수 있습니다. 

 

그림2. Windows PC의 Interface와 Gateway

 

Gateway 없이 Interface만 이용해서 설정하는 방법은 Linux와 라우터에서는 가능하지만, Windows 10에서는 설정 방법이 다릅니다. Gateway를 생략하는 대신에 0.0.0.0 으로 설정하거나 Local IP로 설정을 합니다.  특별한 경우가 아니라면면, Gateway Interface 둘 모두를 설정하는 것이 좋습니다.  Windows 10에서 IF 2, IF 9 와 같이 IF 옆의 숫자는 Interface를 나타내는 Index 번호입니다. Interface Index 번호는 windows cmd 창에서 route print 명령을 입력했을 때, 가장 윗부분에 아래 참조2와 같이 이더넷 어답터 별로 가장 앞에 Index 번호가 출력됩니다.

 

1
2
3
4
5
6
7
C:\Users\user>route print
===========================================================================
인터페이스 목록
  9...b8 ac 6f 1d 1e 36 ......Intel(R) 82567LM-3 Gigabit Network Connection
 10...0a 00 27 00 00 0a ......VirtualBox Host-Only Ethernet Adapter
  1...........................Software Loopback Interface 1
===========================================================================
cs

참조2. Windows 10 라우팅 테이블의 IF 번호

 

Windows 10에서 Static Route의 Metric은 자동 매트릭 기능으로 Interface별로 Bandwidth에 따라서 자동으로 할당 되는 Interface Metric과 Routing Metric의 합계 값이 route print 명령의 결과로  routing table 출력에 매트릭 필드에 표시 됩니다.  Interface 별 자동 매트릭 기능은 Interface의 Bandwidth 별로 다음의 그림3과 같이 기본 값이 정해져 있습니다. 

 

그림3. Windows 10 Interface Bandwidth별 Meric

그림3 출처 : https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/automatic-metric-for-ipv4-routes

 

 

그림3에서 Link Speed는 Tx/Rx Speed를 합산한 값입니다. 따라서 1G Ethenret Interface인 경우 Greater than or equal to 2GB에 해당되어 Meric이 25입니다. Static Routing 설정에 대한 Routing Metric은 값을 지정하지 않으면 기본값이 1입니다. 따라서 기본값을 주지 않고,  1G Ethernet Interface에 static route를 추가한 경우는 참조 3과 같이 Interface Metric 25와 Routing Metic 1을 합산한 값 26이 매트릭으로 표시 됩니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
C:\WINDOWS\system32>route add 172.11.11.1/24 192.168.35.1 IF 9
 확인!
 
C:\WINDOWS\system32>route print
===========================================================================
인터페이스 목록
  9...b8 ac 6f 1d 1e 36 ......Intel(R) 82567LM-3 Gigabit Network Connection
 10...0a 00 27 00 00 0a ......VirtualBox Host-Only Ethernet Adapter
  1...........................Software Loopback Interface 1
===========================================================================
 
IPv4 경로 테이블
===========================================================================
활성 경로:
네트워크 대상      네트워크 마스크     게이트웨이      인터페이스    메트릭
          0.0.0.0          0.0.0.0     192.168.35.1   192.168.35.120     25
        127.0.0.0        255.0.0.0           연결됨         127.0.0.1    331
        127.0.0.1  255.255.255.255           연결됨         127.0.0.1    331
  127.255.255.255  255.255.255.255           연결됨         127.0.0.1    331
      172.11.11.0    255.255.255.0     192.168.35.1   192.168.35.120     26
 
cs

참조3. Windows 10 매트릭 = Interface Meric + Routing Metric 

 

Windows 10 cmd 창에서 PowerShell을 실행하고, get-netroute 명령을 이용하면, 아래 그림4와 같이 RouteMetric과 ifMetric이 각각 구분되어 표시되는 것을 확인할 수 있습니다. 

 

그림4. PowerShell 에서 get-netroute 로 라우팅 테이블 확인하기

 

PC가 재시동 되더라도 Static Routing으로 추가한 엔트리가 유지되도록 하려면 참조1의 아래 부분 예와 같이 -p 옵션을 사용하면 됩니다. 

 

 

Linux 서버 Static Routing 설정

Linux는 Ubuntu, Debian, Centos, Fedora, RHEL 등 많이 버전들이 있습니다. 어느 버전에서나 "ip route add" 명령과 "route add" 명령을 모두 사용해서 Static Route 설정을 할 수 있습니다. 모든 최신 리눅스 배포판에서는 "ip route add" 명령을 사용할 것을 권고합니다.

 


Linux Static Route 설정
예) ip route add 10.10.10.0/24 via 10.10.13.1 dev eth0  metric 1
                      destination^      ^gateway          ^interface ^metric

예) route add 10.10.10.0/24 gw 10.10.13.1 dev eth0 metric 1

참조4. Linux Static Route 설정 예

 

Windows 10에서와 마찬가지로 Destination은 Static Routing 설정에 필수 파라미터입니다.  gateway와 interface는 둘중에 하나만 사용할 수 있습니다. 둘 다 생략할 수는 없습니다. 

 

그림5. Linux server의 Interface와 Gateway

 

Linux의 경우에도 특별한 경우가 아니라면, Gateway와 Interface 둘 모두를 설정하는 것이 좋습니다. Gateway만 설정하고 Interface를 설정하지 않으면, recursive lookup을 통해서 적절한 Interface를 찾습니다. 반대로 Interface만 설정하고, Gateway를 설정하지 않는 경우는 모든 목적지 IP에 대해서 직접 통신이 가능한 것으로 판단하고 직접 ARP Resolution을 시도할 것입니다. 같은 LAN에 목적지 장비가 있을 경우에는 통신에 문제가 없지만, 다른 network에 존재하는 목적지인 경우에는 라우터에 Proxy ARP 기능이 Enable 되어 있는 경우에만 라우터 인터페이스의 MAC address로 ARP Resolution이 됩니다. 목적지가 많아지면, ARP table entry가 늘어나서 ARP table lookup에 시간이 오래 소요되거나 table이 부족한 상황이 초래될 수도 있습니다. 그러니, 특별한 사유가 없는 한 Gateway Interface 둘 모두를 설정하는 것이 좋습니다.

 

Static Route 설정 시 Metric을 설정하지 않으면, 기본 값으로 1로 설정됩니다. Windows 10과는 달리 Interface Metric과 Route Metric이 별도로 있지 않고 그냥 Metric 만 있습니다.  동일 네트워크에 대해서 Metric이 낮은 엔트리가 우선하므로 Metric이 0인 Connected가 우선 순위가 가장 높고, Metric이 1인 Static Routing은 그 다음으로 우선 순위가 높습니다.  

 

Comand Line Interface 명령어로 추가한 Route 엔트리(Entry)는 서버가 재시동 되면 사라집니다. Static Route  설정을 서버가 재시동 되어도 라우팅 테이블에 그대로 유지되도록 하는 것은 각 Linux 배포판 별로 조금씩 상이합니다.

Ubuntu는 Version 17.10 부터는 /etc/netplan/ 디렉토리에 있는  yaml 화일에 static route를 아래 참조 4와 같이 추가합니다. Interface별로 default gateway는 gateway4: 에 gateway IP를 적고, static route의 경우는 routes: 에 to: Destination/Prefix, via: Gateway IP, metric: metric value  를 적습니다. metric은 생략할 수 있습니다. 생략할 경우 default value로 0 이 설정됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# This is the network config written by 'subiquity' 
network: 
  version: 2 
  ethernets: 
    eno0: 
      addresses: 
      - 10.10.10.2/24 
      gateway4: 10.10.10.1      // default gateway
        addresses: [8.8.8.8]
    eno1: 
      addresses: 
      - 172.16.21.6/24 
      routes: 
      - to: 172.16.23.0/24      // static route
        via: 172.16.21.1 
        metric: 100
cs

참조5. Ubuntu /etc/netplan/01-netcfg.yaml 화일에 static route를 추가

 

참조4와 같이 파일에 추가 한 후에 "sudo netplan ap+ply" 명령으로 적용합니다. 적용이 잘 되었는지 "ip route show" 또는 "route -rn" 명령으로 확인합니다. 적용이 잘 되었다면, 어떠한 이유로 서버가 재시동 되더라도 추가된 Route 엔트리는 계속 유지 됩니다.

 

RHEL 및 Centos 7.x 버전에서는 /etc/sysconfig/network-scripts/ 디렉토리에 있는 interface별 화일에 default gateway 및 static route를 추가합니다. Interface eno0에 default route와 static route 를 설정하는 경우는 참조5와 같이  ifcfg-eno0 화일에 설정 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@DUCK]# cat ifcfg-eno0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes                 // 이 인터페이스를 default gateway로 설정
IPV4_FAILURE_FATAL=no
NAME=eno0
DEVICE=eno0
ONBOOT=yes
IPADDR=10.10.10.3           // static route 목적지 network or host IP 
PREFIX=24                   // static route 목적지 네트워크 prefix length
GATEWAY=10.10.10.1          // static route Gateway IP
DNS1=8.8.8.8
cs

참조6. RHEL 및 Centos 7.x 버전에서 static route를 영구 설정하는 방법

 

Default route를 영구 저장하기 위해서 참조4(Ubuntu - gateway4)나 참조5(RHEL - DEFROUT)와 같이 설정을 하는데요. Linux 시스템이 multiple interface를 가지는 경우, default gateway를 모든 interface에 copy 해서 적용하는 경우가 종종 있습니다. 그럴 경우 의도치 않은 인터페이스로 패킷이 라우팅 되어 인터넷 접속이 안되거나 원하는 목적지로 패킷이 라우팅 되지 않아 접속이 안되는 사태가 벌어집니다. ECMP (Equal cost Multiple Path)를 적용하기 위해서 복수의 Interface에 default gateway를 설정하는 경우가 아니라면 default gateway는 1개의 interface에만 추가해야 합니다.  Redudnancy 및 link 용량 증설을 위해서 ECMP를 사용하는 방법에 대해서는 추후 글에서 자세히 알아 보겠습니다.

Router의 Static Route 설정 방법

PC나 서버 같은 end host 장비에서 다른 네트워크로 보내기 위해서 패킷을 전달해야 할 라우팅 장비의 IP를 gateway라고 부릅니다. 반면에 라우팅 장비에서는 목적지로 보내기 위해서 패킷을 내 보내야 할 다른 라우팅 장비의 IP를 nexthop이라고 부릅니다. Host 장비(PC or 서버 등), 라우팅 장비 불문하고, 자기 자신의 인터페이스에 직접 연결된 상대방으로 보내는 경우는 Connected로 보내면 되기 때문에 라우팅 테이블에 gatewaynexthop이 필요하지 않습니다. 오직 자기 자신의 Interface에 속하지 않은 network로 패킷을 간접 전달해야 하는 경우에 gateway 또는 nexthop이 필요합니다.

 

 

그림6. PC에서 Server로 가는 길 설정

 

Static Routing 설정 명령어와 방법은 각 네트워크 장비 벤더별로 조금씩 다릅니다. 

 

Cisco Router에서는 static route 설정 시 interface와 nexthop 둘 중에 하나만 사용하거나 둘 모두를 사용할 수 있습니다. Linux 경우와 마찬가지로 interface만을 사용할 경우에는 모든 목적지에 프레임을 직접 전달할 하기 위해서 ARP resolution을 시도합니다. 반면에 nexthop만을 사용할 경우에는 출구 interface를 찾기 위해서  라우팅 테이블 recursive lookup이 발생 합니다. 

 

특별한 사유가 없는 한 interface nexthop 둘 모두를 사용하는 것이 좋습니다. 

 

                         
Cisco Router Static Route 설정

예) ip route 10.10.13.0 255.255.255.0 10.10.11.2  25                 // Old IOS 방식은 nexthop 또는 interface 중 1개만 가능
        destination^               nexthop^           ^AD

    ip route 10.10.13.0 255.255.255.0 Gi0/1  25                        // Old IOS 방식은 nexthop 또는 interface 중 1개만 가능
        destination^             interface^      ^AD                           
    ip route 10.10.13.0 255.255.255.0 Gi0/1 10.10.11.2 25          // New IOS 방식은 nexthop, interface 동시 사용 가능  
        destination^             interface^  nexthop^     ^AD 

참조 7. Cisco Router Static Route 설정 예

 

PC와 Linux에서는 GatewayInterface 이외에 Metric 값을 옵션으로 설정할 수 있었습니다. 그런데, Cisco Router에서는 Metric 값은 설정할 수 없습니다. Static Route의 Metric 값이 설정은 안되지만, 라우팅 테이블 출력 시에는 그림7과 같이 Metric 값이 0으로 표시는 됩니다.

 

그림7. Cisco Static Route [1/0] = [AD/Metric]

그러나 Cisco 장비에서 Static Route의 Metric 0은 의미가 없는 dummy 값입니다. Metric 값은 설정할 수 없지만, Cisco Router에서는 옵션으로 AD(Administrative Distance) 값을 설정할 수 있습니다. AD 값은 라우팅 프로토콜들 별로 우선 순위에 차등을 주는 값입니다. Cisco에서는 AD라고 부르고, 주니퍼에서는 Preference라고 부릅니다. 프로토콜 별로 기본값들도 다릅니다. 어떤 값들을 사용하는지는 구글에서 찾아 보면 그림 8과 같은 잘 정리해 놓은 그림들이 뚝딱 나옵니다. ^^

 

 

그림8. AD or Preference

그림8 출처 : https://www.routexp.com/2020/03/check-out-value-administrative-distance.html

 

 

Cisco만 AD라고 부르고 나머지 벤더에서는 Preference 라고 부르는 군요. Cisco, Juniper, HP는 모두 Static Route의 우선 순위가 Connected 다음으로 높은 우선 순위를 보여 주고 있는데요. Huawei 는 특이하군요. Huawei는 안쓸거니까 그러거나 말거나 패쑤!! ^^

 

그림9. Server에서 PC로 돌아 오는 길 설정

 

주니퍼 라우터의 Static Route 설정은 시스코와 다른 점이 몇가지 보입니다. 우선 위의 그림8과 같이 Preference라는 값으로 각 프로토콜들이 생성한 route의 우선 순위를 부여합니다. 그리고 동일 프로토콜이 생성한 route에 대해서 주니퍼 라우터에서는 metric 값으로 우선 순위를 부여할 수 있습니다.

 

                         
Juniper Router Static Route 설정

예)  set routing-options static route 10.10.13.0/24 next-hop 10.10.11.2  preference 30 metric 15            // nexthop 
                                            destination^            nexthop^          prefernece^
  metric^            
               
    set routing-options static route 10.10.13.0/24 next-hop Gi0/1                      //  interface 가능  
                                         destination^          interface^

참조8. Juniper Router Static Route 설정 예

 

주니퍼 라우터에서는 next-hop 뒤에 기본적으로  nexthop IP만 사용합니다. 그리고 기본적으로 nexthop IP는 directly connected IP만 사용합니다. 즉, 직접 연결된 라우터의 IP만 nexthop IP로 사용할 수 있습니다. 지금까지 설명으로 사용한 예에서 nexthop은 모두 direct conencted 인 IP만 사용했었는데요. 밑에서 자세히 설명 드릴 내용이지만 nexthop IP를 direct connected IP가 아닌 원격의 라우터 인터페이스 IP를 사용할 수도 있습니다.  주니퍼 라우터에서는 이렇게 direct connected IP를 nexthop으로 사용하는 경우에는 별도로 interface를 옵션으로 추가해 주지 않더라도 그림9와 같이 라우팅 테이블에 interface가 자동으로 추가되어 패킷 라우팅 시에 recursive lookup이 일어 나지 않습니다. 이것은 매우 바람직한 기능 같습니다.

 

그림10. 주니퍼 라우터는 Interface를 지정하지 않아도 자동빵 추가

 

PC, 서버, 시스코 라우터에서 Static Route 설정 시에 Interface만 줄 수 있었던 것처럼 주니퍼 라우터에서도 next-hop 뒤에 IP가 아닌 Interface를 줄 수 있습니다.  Interface만 주는 경우는 역시나 모든 목적지를 직접 연결된 것으로 간주하여 모든 IP에 대해서 직접 ARP Resolution을 시도합니다.

 

Cisco Route에서는 metric을 옵션으로 지정할 수 없었으나 주니퍼 라우터에서는 metric도 설정할 수 있습니다.  Metric을 생략할 경우 기본 값으로 그림8과 같이 5가 사용됩니다.

 

원격 [gateway|nexthop] 지정하기

앞에서 언급했던 바와 같이 지금까지의 Static Route 설정 예에서는 gateway 혹은 nexthop을 direct connected 상태인 인접 라우터의 interface IP를 사용했습니다. gateway|nexthop 으로 다른 네트워크에 있는 IP를 사용할 수 있습니다. 단, gateway|nexthop으로 사용 될 원격지 IP로 가기 위해서 어느 Interface를 통해서 나가야 하는지가 라우팅 테이블에 등록이 되어 있어야만 원격지 IP를 gateway|nexthop 으로 사용할 수 있습니다. 즉, Recursive lookup으로 원격지 nexthop IP로 연결되는 출구 interface를 찾을 수 있어야 합니다.

 

Windows 10 원격 gateway 지정하기 - 가능

그림11. Window 10에서도 원격지 IP를 Gateway로 설정할 수 있답니다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:\WINDOWS\system32>route add 10.10.13.0/24 10.10.12.2 IF 9
 확인!
 
C:\WINDOWS\system32>route print
===========================================================================
인터페이스 목록
  9...b8 ac 6f 1d 1e 36 ......Intel(R) 82567LM-3 Gigabit Network Connection
 10...0a 00 27 00 00 0a ......VirtualBox Host-Only Ethernet Adapter
  1...........................Software Loopback Interface 1
===========================================================================
 
IPv4 경로 테이블
===========================================================================
활성 경로:
네트워크 대상      네트워크 마스크     게이트웨이      인터페이스    메트릭
          0.0.0.0          0.0.0.0     192.168.35.1   192.168.35.120     25
       10.10.13.0    255.255.255.0       10.10.12.2   192.168.35.120     26
cs

참조9. Windows 10에서 원격지 IP를 Gateway로 설정하기

 

 

참조9를 보면 Windows 10에서 IP 10.10.12.2를 Gateway로 하여 Static Route 설정이 성공적으로 라우팅 테이블에 엔트리가 생성된 것을 볼 수 있습니다. 이는 recursive lookup에 의해서 10.10.12.2는 바로 위에 있는 default gateway를 통해서 도달 가능한 것이 확인 되기때문에 성공적으로 라우팅 엔트리가 추가 된 것입니다.

 

Linux 원격 gateway 지정하기 - 불가능(?)

Linux는 Static Route 설정 시 indrect nexthop IP를 Gateway로 허용하지 않는 것으로 보입니다. 지금까지 찾아 본 바로는 원격지 IP를 gateway로 주어서 설정을 성공시키지 못했습니다. 구글링으로도 방법을 찾지 못했습니다. 지원하지 않는다는 내용도 찾지를 못했기때문에 미확인입니다. 심적으로 판단하기에는 지원하지 않는 것 같습니다.

 

그림12. Router에서 Static Route의 nexthop을 원격지 IP로 설정하기 

 

Cisco Router 원격 nexthop 지정하기

Cisco Router는 원격지 IP를 nexthop으로 설정하는 것이 가능합니다. Interface 없이 nexthop만 설정한 경우에 recursive lookup을 통해서 출구 interface를 찾는다고 했던것처럼 원격지 IP를 nexthop으로 설정한 경우에도 해당 원격지 IP에 도달 가능한 route가 라우팅 테이블에 있다면 정상적으로 recursive lookup으로 출구 interface를 찾아서 패킷을 forwarding 합니다.  만일 recursive lookup으로 출구 interface를 찾을 수 없는 경우에는 라우팅 테이블에 엔트리가 올라오지 않기 때문에 라우팅 lookup 실패로 패킷을 라우팅 하지 못하고 드롭합니다. 아래 그림13을 보면, 1에서 원격지 IP를 nexthop으로 static route 설정을 하지만, 2에서 확인 시 라우팅 테이블에 엔트리가 올라오지 않습니다. 3에서 1에서 설정한 nexthop IP에 대한 static route를 추가하니 4에서 원격지 IP를 nexthop으로 설정한 Static Routing 엔트리도 라우팅 테이블에 올라 온 것이 보입니다.

 

그림13. Cisco Router에서 원격지 IP를 nexthop으로 설정하기

"Recursive lookup으로 출구 interface를 찾는다"는 의미는 원격지 IP를 nexthop으로 설정한 경우에도 Ethernet Frame은 직접 연결된 인접 라우터를 통해서 간접 전달이 되어야 하므로, directly connected 관계인 인접 라우터의 IP와 해당 네트워크 Interface가 recursive lookup에 의해서 검색되어야 한다는 의미입니다. 그림12의 R0 라우터에서 10.10.13.0/24 네트워크에 대한 nexthop을 직접 연결된 라우터 R1이 아니라, R1을 통해서 연결된 원격지 라우터 R2의 10.10.12.2를 nexthop으로 설정하는 경우에 recursive lookup에 의해서 10.10.12.2/24 네트워크에 대한 nexthop이 그림12의 4와 같이 직접 연결된 인접 라우터 R1의 10.10.11.2가 nexthop으로 검색 되어야 합니다.   

 

Juniper Router 원격 nexthop 지정하기 - resolve

Juniper Router에서도 원격지 IP를 nexthop으로 설정할 수 있습니다. Cisco Router나 Windows 10에서는 별도의 설정을 하지 않더라도 recursive lookup으로 라우팅 테이블에서 출구 interface를 찾습니다. 그리고, recursive lookup에 의해서 출구 interface가 찾아지면 패킷을 해당 출구 interface로 forwarding 하고, 출구 interface를 찾지 못하는 경우에는 패킷을 드롭 합니다.  Juniper Router는 이와는 다르게 원격지 IP를 nexthop IP로 설정하는 경우에는 resolve 옵션을 함께 사용해야지만, recursive lookup을 수행합니다.

 

그림14. Juniper Router는 resove 옵션을 명시적으로 사용해야 원격지 IP nexthop IP recursive lookup 수행

 

그림14의 1번에서 Destination network 10.10.13.0/24 에 대한 next-hop IP를 원격지 IP인 10.10.12.2로 설정하고, 2번에서 10.10.12.0/24 network에 대한 static route까지 추가를 하더라도 라우팅 테이블에는 10.10.13.0/24에 대한 엔트리가 올라오지 않습니다. 4에서 10.10.13.0/24 에 대해 resolve 옵션을 추가로 설정하자마자 5번과 같이 10.10.13.0/24 network에 대한 엔트리가 라우팅 테이블에 생성되었습니다. Nexthop과 Interface가 recursive lookup을 통해서 인접 라우터의 nexthop IP인 10.10.11.2로 되어 있는 것을 볼 수 있습니다.

 

 

Windows 10, Linux, 라우터 등에서 Static Routing의 BoB에 대해서 알아 보았습니다. 오늘 알아본 BoB 내용을 바탕으로 다음 시간에는 Straic Routing의 장애 감지, Redudancy, High Availability, ECMP 등의 한 단계 차원 높은 주제들에 대해 알아 보겠습니다.

 

좀 이상하다 싶은 내용이 있으시면, 가차없이 태클을 날려 주세요. 오타를 보시면 콕콕 찝어 주세요. 추가적으로 궁금하신 내용이 있으시면 댓글에 질문을 달아 주세요. 태클과 질문을 통해서 쑥쑥 자라는 블로그가 되기를 희망해 봅니다.

 

2021년에 새로운 글로 찾아 뵙겠습니다. 구독해 주신 여러분!!! 새해 복 많이 받으세요!! 

 

2020년 12월 31일에 수원에서 뒤뚱뒤뚱 ~~~~ [오리]