Doctor Pepper

GNS3에서 Ansible Playbook 사용하기(2) 본문

Network 심화/GNS3-Ansible

GNS3에서 Ansible Playbook 사용하기(2)

Doctor Pepper 2024. 11. 3. 20:38
728x90

 

1. OSPF 및 EIGRP 개념

- OSPF(Open Shortest Path First)

 OSPF(Open Shortest Path First)는 링크 상태 라우팅 프로토콜로, 내부 게이트웨이 프로토콜(IGP) 중 하나로 사용되며, 인터넷 표준으로 채택된 라우팅 프로토콜이다. OSPF는 네트워크의 모든 라우터가 링크 상태 정보를 교환하여 최적의 경로를 계산한다. 이 프로토콜은 각 라우터가 자신의 링크 상태 정보를 지역적으로만 전파하고, 전체 네트워크의 상태를 유지하면서 최적 경로를 계산하는 링크 상태 프로토콜이다. 또한, OSPF는 큰 네트워크를 효과적으로 관리하기 위해 영역(Area)으로 나누어 계층적으로 구성할 수 있어, 라우팅 정보를 효율적으로 관리하고 전파할 수 있도록 지원한다.

 OSPF는 Dijkstra의 최단 경로 우선 알고리즘(SPF)을 사용하여 최적 경로를 계산한다. 이 과정을 통해 각 라우터는 최단 경로 트리를 생성하고, 이를 기반으로 패킷을 전달한다. OSPF는 빠른 수렴 속도를 제공하며, 링크 상태 변화 시 즉시 업데이트를 전파하여 네트워크의 안정성을 높이는 신뢰성 있는 특성을 가지고 있다. 이러한 이유로 OSPF는 대규모 기업 네트워크와 ISP 네트워크 등에서 널리 사용되며, 링크 상태의 특성 덕분에 복잡한 네트워크 환경에서도 유연하게 적용할 수 있다.

 

- EIGRP(Enhanced Interior Gateway Routing Protocol)

 EIGRP(Enhanced Interior Gateway Routing Protocol)는 Cisco에서 개발한 경량 하이브리드 라우팅 프로토콜로, 내부 게이트웨이 프로토콜(IGP)의 한 종류이다. EIGRP는 거리 벡터와 링크 상태의 특성을 결합하여 빠른 수렴성과 효율적인 라우팅을 제공한다. 이 프로토콜의 주요 특징 중 하나는 하이브리드 프로토콜이라는 점으로, 거리 벡터 방식과 링크 상태 방식의 장점을 통합하여 경로 선택과 수렴 속도를 향상시킨다.

 EIGRP는 DUAL(Diffusing Update Algorithm) 알고리즘을 사용하여 경로의 안정성과 최적 경로를 동적으로 계산하며, 이를 통해 불필요한 라우팅 루프를 방지하고 빠른 수렴을 달성한다. 또한, 네트워크 효율성을 높이기 위해 변경 사항이 발생할 때만 업데이트를 전송하여 네트워크 대역폭을 절약하며, 여러 경로를 동시에 학습하여 로드 밸런싱을 지원한다.

 EIGRP는 대역폭, 지연, 신뢰성, 부하 및 MTU 등을 기준으로 메트릭을 계산하여 최적 경로를 선택한다. 이러한 특성 덕분에 EIGRP는 중소규모 네트워크에서 널리 사용되며, Cisco 장비에서 주로 활용된다. 특히 빠른 수렴과 높은 효율성 덕분에 데이터 센터, 캠퍼스 네트워크 등 다양한 환경에서 적합한 선택이다.

 

2. 토폴로지 구성

GNS3를 실행하고 다음과 같이 네트워크 토폴로지를 구성한다.

 

- NetworkAutomation 장치 설정

nano /etc/network/interfaces

 

- 라우터 설정

각 라우터에 따라 다음 명령어를 실행한다.

R1 conf t
hostname R1
int gi0/0
  desc To R2
  no sh
  ip add 10.0.0.1 255.255.255.252
int gi0/1
  desc To R3
  no sh
  ip add 10.0.0.5 255.255.255.252
int l0
  no sh
  ip add 10.1.1.1 255.255.255.255

router ei 1
  net 10.0.0.0
R2 conf t
hostname R2
int gi0/0
  desc To R5
  no sh
  ip add 10.0.0.9 255.255.255.252
int gi0/1
  desc To R1
  no sh
  ip add 10.0.0.2 255.255.255.252
int gi0/2
  desc To R8
  ip add 10.0.0.13 255.255.255.252
int l0
  no sh
  ip add 10.2.2.2 255.255.255.255

router ei 1
  net 10.0.0.0
R3 conf t
hostname R3
int gi0/0
  desc To R6
  no sh
  ip add 10.0.0.17 255.255.255.252
int gi0/1
  desc To R1
  no sh
  ip add 10.0.0.6 255.255.255.252
int gi0/2
  desc To R4
  ip add 10.0.0.21 255.255.255.252
int l0
  no sh
  ip add 10.3.3.3 255.255.255.255

router ei 1
  net 10.0.0.0
R4 conf t
hostname R4
int gi0/0
  desc To R5
  no sh
  ip add 10.0.0.25 255.255.255.252
int gi0/1
  desc To R3
  no sh
  ip add 10.0.0.22 255.255.255.252
int l0
  no sh
  ip add 10.4.4.4 255.255.255.255

router ei 1
  net 10.0.0.0
R5 conf t
hostname R5
int gi0/0
  desc To R4
  no sh
  ip add 10.0.0.26 255.255.255.252
int gi0/1
  desc To R2
  no sh
  ip add 10.0.0.10 255.255.255.252
int l0
  no sh
  ip add 10.5.5.5 255.255.255.255

router ei 1
  net 10.0.0.0
R6 conf t
hostname R6
int gi0/0
  desc To R8
  no sh
  ip add 10.0.0.29 255.255.255.252
int gi0/1
  desc To R3
  no sh
  ip add 10.0.0.18 255.255.255.252
int l0
  no sh
  ip add 10.6.6.6 255.255.255.255
int gi0/2
  desc TO NET AUTO
  no sh
 ip add 192.168.0.1 255.255.255.0

router ei 1
  net 10.0.0.0
R7 conf t
hostname R7
int gi0/0
  desc To R6
  no sh
  ip add 10.0.0.30 255.255.255.252
int gi0/1
  desc To R2
  no sh
  ip add 10.0.0.14 255.255.255.252
int l0
  no sh
  ip add 10.7.7.7 255.255.255.255

router ei 1
  net 10.0.0.0
R1~7
공통
usern cisco pas cisco
usern cisco priv 15
lin vty 0 4
  tr i a
  logi loc
  exi
ip domain-n netautomation.com

cry key gen rsa
1024

do wr

do sh ip ei nei
do sh ip ro ei

 

- 설정 테스트

R6 do sh ip int b
do sh run int gi0/2

router ei 1
net 192.168.0.1 255.255.255.255
no net 192.0.0.0
do sh run | s eig
do sh ip ei int
Network
Automation
ping 10.0.0.1
route

 

3. Ansible 설정

- ansible.cfg 설정

nano ansible.cfg
[defaults]
inventory = ./myhosts
host_key_checking = false
timeout = 15
deprecation_warnings = False

 

-  /etc/hosts 설정

nano /etc/hosts
10.1.1.1 R1
10.2.2.2 R2
10.3.3.3 R3
10.4.4.4 R4
10.5.5.5 R5
10.6.6.6 R6
10.7.7.7 R7

 

- myhosts 설정

nano myhosts
[routers]
R1
R2
R3
R4
R5
R6
R7

 

4. Ansible Playbook

- ospfproc.yml : OSPF 라우팅 프로토콜을 각 라우터에 설정한다.

---
- name: Configure OSPF on ALL
  hosts: routers
  gather_facts: false
  connection: local

  vars:
    cli:
      username: cisco
      password: cisco

  tasks:
    - name: enable ospf
      ios_config:
        provider: "{{ cli }}"
        authorize: yes
        parents: router ospf 1
        lines :
          - network 0.0.0.0 255.255.255.255 area 0
      
      register: print_output

    - debug: var=print_output
ansible-playbook ospfproc.yml -u cisco -k

 

- iproutes.yml : 라우터에 연결하여 IP 라우팅 정보를 출력한다.

---
- name: Get IP Routes
  hosts: routers
  gather_facts: false

  tasks:
    - name: show ip route
      raw: "show ip route"

      register: print_output

    - debug: var=print_output.stdout_lines
ansible-playbook iproutes.yml -u cisco -k | grep 'ok:\|D'

 

ansible-playbook iproutes.yml -u cisco -k | grep 'ok:\|O'

 

- ospfdatabase.yml : OSPF 데이터베이스 정보를 출력한다.

---
- name: Get OSPF Database
  hosts: routers
  gather_facts: false

  tasks:
    - name: show ip ospf database
      raw: "show ip ospf database"

      register: print_output

    - debug: var=print_output.stdout_lines
ansible-playbook ospfdatabase.yml -u cisco -k

 

- remeigrp.yml : EIGRP를 제거하기 위해 설정한다.

---
- name: Remove EIGRP from ALL
  hosts: routers
  gather_facts: false
  connection: local

  vars:
    cli:
      username: cisco
      password: cisco

  tasks:
    - name: remove eigrp
      ios_config:
        provider: "{{ cli }}"
        authorize: yes
        lines:
          - no router eigrp 1

      register: print_output

    - debug: var=print_output
ansible-playbook remeigrp.yml -u cisco -k

 

728x90