본문으로 바로가기

GRE Tunnel (Generic Routing Encapsulation)

category 네트워크/VPN 2020. 3. 12. 16:47
GRE Tunnel (Generic Routing Encapsulation)

GRE(Generic Routing Encapsulation)는 라우팅이 불가능한 패킷을 우팅 가능한 패킷의 내부에 넣어서 전송할 때 사용하는 터널링 프로토콜이다. 인터넷을 사용하여 본사와 지사를 사이의 네트워크를 구축할 수 있는데, 보통 본사와 지사 내부에서 네트워크를 구축할 때는 사설 네트워크 주소를 사용한다. 그러나 인터넷 라우터들은 이와 같은 사설 네트워크 주소를 가지고 라우팅을 할 수 없기 때문에 GRE 터널을 이용한다. 

장비 기본 설정 & 기본 설정 파일
Router>en
Router#conf t
Router(config)#hostname R1
R1(config)#enable secret cisco
R1(config)#no ip domain-lookup

R1(config)#line console 0
R1(config-li)#logging sync
R1(config-li)#exec-time 0
R1(config-li)#exit

ISP(config)#line vty 0 4
ISP(config-li)#password cisco
ISP(config-li)#exit


GRE 동작 방식

GRE는 원래의 패킷에 GRE를 위한 20byte + 4byte헤더를 추가한다.


IP 헤더 for GRE (20byte)

GRE 헤더 (4byte)

Source IP

Destination IP

GRE 내부 Packet 정보 (16bit) 

(16bit)

위의 토플로지처럼 출발지 주소와 목적지 주소가 각각 사설 IP 주소인 장비 R2가 장비 R1에게 패킷을 전송한다. GRE Tunnel의 출발지인 R2는 원래의 패킷에 GRE를 위한 20Byte 길이의 IP 헤더와 GRE 관련 정보를 표시하는 4Byte 길이의 GRE 헤더를 추가한다. 추가된 20Byte 길이의 IP 헤더에는 터널의 출발지 주소인 공인 IP 주소와 터널의 목적지 주소인 공인 IP 주소가 들어간다. 패킷을 전송하는 과정에서 라우터들은 20Byte의 IP 헤더를 참조하여 해당 패킷을 라우팅시킨다. 결론적으로 라우팅 시킬 수 없는 사설 IP 주소를 사용하더라도 GRE를 위하여 추가된 라우팅 가능한 터널 목적지 주소만을 참조하므로 인터넷을 통하여 전송이 가능하다.


4Byte의 길이의 GRE 헤더에는 GRE 내부의 패킷 정보가 표시된다. 16Bit 길이의 프로토콜 타입 필드에 GRE가 실어나르는 패킷의 종류가 표시되며 프로토콜 타입 필드에서 사용하는 프로토콜의 종류는 이더넷에서 사용하는 것과 동일한 종류를 사용한다.


GRE Tunnel 구성

R1과 R3, R1과 R2 사이에 GRE Tunnel을 구성한다. 먼저 R1~R3 라우터에 각각 R4로 디폴트 루트를 설정 후 GRE 설정모드로 접속하여 터널 인터페이스를 구성한다.

R1(config)#ip route 0.0.0.0 0.0.0.0 1.1.14.4
R2(config)#ip route 0.0.0.0 0.0.0.0 1.1.24.4
R3(config)#ip route 0.0.0.0 0.0.0.0 1.1.34.4
R1(config)#interface tunnel 12
R1(config-if)#ip address 10.10.12.1 255.255.255.0
R1(config-if)#tunnel mode gre ip
R1(config-if)#tunnel source e0/0
R1(config-if)#tunnel destination 1.1.24.2
R1(config-if)#exit
R1(config)#
R1(config)#interface tunnel 13
R1(config-if)#ip address 10.10.13.1 255.255.255.0
R1(config-if)#tunnel mode gre ip
R1(config-if)#tunnel source e0/0
R1(config-if)#tunnel destination 1.1.34.3
R1(config-if)#exit

터널 인터페이스는 적당한 터널 번호를 사용하면 되고, 터널 인터페이스에 사설 IP 주소를 부여 후 터널 방식을 GRE IP로 구성 후 출발지 인터페이스, 또는 출발지 IP 주소를 설정한 후 목적지 IP 주소를 지정한다. R2와 R3도 R1과 같이 터널 인터페이스를 구성해준다.

R2(config)#interface tunnel 12
R2(config-if)#ip address 10.10.12.2 255.255.255.0
R2(config-if)#tunnel mode gre ip
R2(config-if)#tunnel source e0/0
R2(config-if)#tunnel destination 1.1.14.1
R3(config)#interface tunnel 13
R3(config-if)#ip address 10.10.13.3 255.255.255.0
R3(config-if)#tunnel mode gre ip
R3(config-if)#tunnel source e0/0
R3(config-if)#tunnel destination 1.1.14.1

터널 인터페이스 구성 후 터널 망의 통신을 위하여 적절한 라우팅 설정을 해준다. 적절한 라우팅 프로토콜(EIGRP, OSPF 등)을 이용하여 라우팅을 설정한다.

R1(config)#router ospf 1
R1(config-router)#router-id 1.1.1.1
R1(config-router)#network 10.10.10.1 0.0.0.0 area 0
R1(config-router)#network 10.10.12.1 0.0.0.0 area 0
R1(config-router)#network 10.10.13.1 0.0.0.0 area 0

R2(config)#router ospf 1
R2(config-router)#router-id 1.1.2.2
R2(config-router)#network 10.10.20.2 0.0.0.0 area 0
R2(config-router)#network 10.10.12.2 0.0.0.0 area 0

R3(config)#router ospf 1
R3(config-router)#router-id 1.1.3.3
R3(config-router)#network 10.10.30.3 0.0.0.0 area 0
R3(config-router)#network 10.10.13.3 0.0.0.0 area 0

설정 후 R1의 라우팅 테이블을 확인해보면 터널 인터페이스가 OSPF 라우팅 프로토콜(O)로 라우팅 테이블에 생성되어있는 것을 확인할 수 있다.

R1#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override

Gateway of last resort is 1.1.14.4 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 1.1.14.4
      1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        1.1.14.0/24 is directly connected, Ethernet0/0
L        1.1.14.1/32 is directly connected, Ethernet0/0
      10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
C        10.10.10.0/24 is directly connected, Ethernet0/1
L        10.10.10.1/32 is directly connected, Ethernet0/1
C        10.10.12.0/24 is directly connected, Tunnel12
L        10.10.12.1/32 is directly connected, Tunnel12
C        10.10.13.0/24 is directly connected, Tunnel13
L        10.10.13.1/32 is directly connected, Tunnel13
O        10.10.20.0/24 [110/1010] via 10.10.12.2, 00:00:29, Tunnel12
O        10.10.30.0/24 [110/1010] via 10.10.13.3, 00:00:06, Tunnel13

R1에서 R2로, R2에서 R3로 Traceroute 명령어를 통해 확인해보면 본사인 R1의 터널을 통해서 연결되는 것을 확인할 수 있다.

R1#traceroute 10.10.30.3 source 10.10.10.1
Type escape sequence to abort.
Tracing the route to 10.10.30.3
VRF info: (vrf in name/id, vrf out name/id)
  1 10.10.13.3 1 msec *  1 msec

R2#traceroute 10.10.30.3 source 10.10.20.2
Type escape sequence to abort.
Tracing the route to 10.10.30.3
VRF info: (vrf in name/id, vrf out name/id)
  1 10.10.12.1 6 msec 1 msec 1 msec
  2 10.10.13.3 1 msec *  2 msec


  1. ROUTER, SWITCH는 각각 L3 IOU, L2 IOU 이미지를 사용하였다. [본문으로]
  2. 복사하여 터미널 프로그램에 붙여넣기 하면 편하게 사용할 수 있다. [본문으로]

댓글을 달아 주세요