구동 환경 : Ryzen 5700x3d / 64GB RAM / nvme SSD / 1Gbps LAN / Win11 24H2 26100.3775
1. GNS3는 무엇인가?
Graphical Network Simulator 3 2008년 프랑스 개발자 Jeremy Grossmann가 개발.
시뮬레이터가 아닌 에뮬레이터이다. 눈속임이 아닌 진짜로 작동한다! 다만 가상환경에서 구동일 뿐이다.
사용하는 이유 : 실제 장비 없이 실습이 가능하다! 무료이다!! (단, 시스코 IOU 라이센스는 구입해야 하지만, 무료인 Dynampis 이미지만으로도 학습용으로는 충분하다.)
위와 이와 같은 이유로 네트워크 공부시 필수적인 존재이다.
버전 정보
2008년~2014년: GNS3 v0.2 ~ 0.8
2014~2016년 : GNS3 v1.x버전
2017년 이후~ : GNS3 v2.x버전
v2.2.49(2024년 10월 21일) ~ 2.2.53(2025년 2월 25일)
다른 네트워크 학습용 프로그램으로는 CISCO Packet Tracer(패킷 트레이서), EVE-NG, Boson Netsim 등이 존재. ※ 참고로 패킷 트레이서는 시간을 멈추는 기능이 있는데, 이 것은 에뮬레이터가 아닌 시뮬레이터라서 가능한 것이다.
GNS3 안에서 여러 가상 환경을 동시에 구동할 수 있다. (Dynamips, IOU, Virtual BOX, VMware, Docker)
물론 단점도 있다.
에뮬레이터라서 네트워크 구성을 잘못하면 루핑으로 GNS3가 꺼지거나 멈출 수 있다.
GNS3가 실제 장비와 연결된 상태라면 실제 장비까지 데미지를 먹거나,네트워크 장애가 발생 할 수 있다.(주의!)
복잡한 네트워크 구성시 시스템 사양이 좀 필요하다. (간단한 구성은 4코어도 충분하다. 경험상 VMware를 붙이려먼 6코어 이상 권장하고, 8코어면 좋다.) 글쓴이의 환경 : 라이젠 5700x3d(8코어) / DDR4 64GB RAM / SSD / 1Gbps LAN / Win11
실제 장비에서는 일어나지 않는 약간의 버그도 있다. (이건 특수한 경우라서 크게 신경 쓸 필요는 없다.)
무료 이미지는 꽤나 구형버전이다.
에뮬레이터지만 Dynampis 기반으로 SW로 동작하기 때문에 Serial Port 한계 속도가 1.544Mbps가 아니다.(더 빠르다.) =하드웨어 한계를 그대로 에뮬레이션하지 않기 때문에, GNS3 환경에서는 실제보다 더 빠르게 동작할 수 있다.
Serial Port에서 DCE와 DTE 구분 없이 그냥 꽂아진다. 또한, Clock rate를 설정하지 않아도 자동으로 통신이 된다.
다운로드 버튼을 누르면 로그인하거나 계정 생성이 나온다.First NAME에 이름 / LastNAME에 성을 넣으시고, SOUTH KOREA를 넣으면 ZIP code는 사라진다. 이메일과 비밀번호가 가장 중요하다.이메일을 확인해보면 Verify Email을 클릭하여 완료해준다.
로그인하여 다시 다운로드를 누르면 다운로드가 된다.
용량 참고기본값으로 하면 된다. WebClient는 메인으로 사용하기에 불편함이 있고, GNS3 vm은 필요시 따로 설치가 가능하다.
설치시 대부분 기본값으로 넘기면 되는데 아래를 참조한다.
Npcap과 Wireshark도 자동으로 다운로드하면서 설치가 된다.(패킷 캡쳐 및 분석도구)
다만 아래는 기본값 대신 선택하면 된다
TraceNG는 딱히 필요하지 않다. Cancel을 눌러준다.
Solawinds Standard Toolset도 필요 없다 No를 눌러준다.
이건 필요 없다. Cancel 버튼 위치가 좌측일 때도 있고 우측일 때도 있다. 잘보고 누르자SolarWinds라는 네트워크 진단 툴인데 딱히 필요없다. No선택마지막 체크 해제 후 Finish
C3745 추가 하기 이미지를 넣어주고, EtherSwitch로 사용할 것이기 때문에 체크해주면 된다. 이름을 c3745로 다시 수정한다. 나머지 기본값. Idle-PC finder 한 번 해주면 끝.
Edit - Preference - Dynamips - IOS routers - New - Browse를 클릭해서 다운 받은 이미지를 선택한다. - 팝업이 뜨면 Yes - Next
EtherSwitch router 옵션을 클릭하면 Name이 바뀔건데 c3745로 다시 넣어주고 Next기본값 진행, Idle-PC finder만 한번 해주면 된다. 이 작업은 에뮬레이터가 PC의 CPU 사용량 100% 찍는 것을 막아준다.이렇게 사용할 수 있는 c3745가 생겼다.
다음은 C7200 라우터 추가이다. 거의 같은데, 다른 두 부분만 캡쳐했다.
c7200은 라우터 본연에 그대로 쓸 것이라 EtherSwitch를 체크하지 않아도 된다. (애초에 옵션이 없다.)
기본 값인 512MB램, 그리고 라우터는 포트 슬롯을 직접 설정해 줘야 한다. 아래와 같이 설정해 주면 된다. ※혹시 시스템 RAM이 부족하다면 256MB도 가능하다.
EtherSwitch로 사용이 없는게 정상이다 그냥 넘기면된다.라우터는 슬롯을 따로 추가해 주어야한다. 시리얼포트 4개, Ethernet포트 4개를 선택했다.
전체 장비를 클릭하면 C3745와 C7200이 생긴 것을 확인할 수 있다.
4. 간단한 실습 테스트
연습할 토폴로지를 만들어본다.
주의 할 점은 C3745를 스위치로만 사용할 때는 포트의 F0/0, F0/1은 사용하지 않는다.(나중에 라우터로 사용시 사용)
간단한 작동법 좌측에서 드래그하면 장비가 생기고, 좌상단의 ABC돋보기를 누르면 포트번호가 표시된다. 나머지는 그림판 사용법과 비슷하다. 그리고 좌측 맨아래 케이블을 클릭하면 케이블을 연결할 수 있다. 당연하지만 이더넷은 이더넷 포트끼리, 시리얼 포트는 시리얼 포트끼리 연결해야 한다. 장비를 클릭하거나 드래그해서 선택 후 우클릭 Start 버튼을 누르면 장비가 가동된다. (너무 많은 장비를 한번에 켜면 다운될 수 있다. 삭제할 때도 한 번에 다수를 삭제하면 튕길 때가 있다.)
이렇게 구성을 해본다.
장비를 켠 뒤, PC 1번을 더블 클릭하면 Putty 창이 뜬다.
PC1 세팅 방법
ip 1.1.1.2 255.255.255.0 1.1.1.1
ip : VPC에서 ip를 입력하는 명령어 이다.
1.1.1.2 : IP주소 이다.
255.255.255.0 (또는 /24) : 서브넷 마스크이다.
1.1.1.1 : GateWay이다. 다른 네트워크로 넘어갈 필요가 없으면 생략 가능하다.
PC2 아래와 같이 입력
ip 1.1.1.3 255.255.255.0 1.1.1.1
PC3 아래와 같이 입력
ip 1.1.2.2 255.255.255.0 1.1.2.1
PC4 아래와 같이 입력
ip 1.1.2.3 255.255.255.0 1.1.2.1
스위치 세팅은 필요없다. 왜냐하면 그냥 스위칭만 하면 되기 때문이다. 게다가 스위치는 기본적으로 관리자 권한으로 포트가 열려있다.(허용되어 있다.) 다만 장비를 켠 뒤 더블 클릭으로 putty를 띄우고 하고 엔터를 한 번 쳐주자.
ESW 스위치 주의점!케이블을 꽂고 켜야 한다. 켜고 케이블을 꽂으면 포트가 닫혀있어서 정삭적으로 작동을 안한다. (버그) 이 경우 포트를 닫았다가 열어야하는 수고로움이 필요하다.
라우터는 무조건 세팅을 해줘야한다. 기본적으로 관리자 권한으로 포트가 닫혀있다.(허용되지 않음) 기본적으로 인터페이스(포트)가 shutdown 상태라서 no shutdown 이라는 명령어를 넣어주어야 포트가 열린다.
R1 라우터 설정
configure terminal
interface ethernet 2/0
ip add 1.1.1.1 255.255.255.0
no shutdown
int e2/1
ip add 1.1.2.1 255.255.255.0
no shutdown
end
R1 설정 화면
이제 통신을 해본다. PC1에서 GateWay, PC3번까지 핑을 쳐본다. ping 1.1.1.1 ping 1.1.2.2
PC1에서 1.1.1.1과 1.1.2.2로 핑을 전송해본다.
ICMP 전송시(ping명령어) 초반에 2개정도 timeout이 뜨는 것은 정상이다. Switch가 MAC 주소를 학습하는 중에 잠시 통신이 안되는 것 이다.
ESW1에서 show mac-address-table을 입력해보자. 포트별로 학습된 MAC주소가 나온다. 만약 적게나온다면 aging되어서(시간이 지나서) 삭제된 것이다. 다시 핑을 보내면 기록될 것이다. 이 것은 Switch의 Transparent Bridging이라는 역할 중 하나이다.
ESW1에서 맥주소 테이블을 확인
이제 지나가는 패킷을 확인해보자! 아래와 같이 케이블에 우클릭 후 Start capture을 하면 WireShark라는 패킷 분석도구가 나타난다.
패킷을 감시하는 중에 PC1에서 1.1.2.2로 ping을 보내보자.
우선 NO.11에 보면, ARP 프로토콜로 1.1.1.1이 누구냐고 BroadCast한다. (이 것이 ARP의 핵심이다.!) 이 것은 ESW1 스위치가 맥주소 테이블에서 1.1.1.1의 맥주소가 Aging되어 없어졌기 때문에 1.1.1.1 주소를 가진자의 MAC주소와 포트를 찾는 것이다. NO.12을 보면 바로 응답이 돌아왔다. 1.1.1.1 주소를 가진 R1 라우터에서 나야! ca:02:55:e4:00:38이야! 라고 했다. 이 응답을 받은 ESW1은 MAC table에 기록하는데, 흥미로운 점은 IP주소를 적는 것이 아니고 MAC주소랑 포트만 적는다. 왜냐? L2 스위치니까 L3에서 사용하는 ip는 "노상관 인데ㅋ? 나는 MAC주소 기준으로 움직다구!" 인것이다. 그렇다 L2 스위치는 오직 MAC Table에서 MAC주소만 보고 특정 포트로 전달(Forwarding)한다.
그 다음 ping 명령어로 만들어낸 ICMP 패킷을 살펴보자. NO.13에보면 출발지 IP 1.1.1.2(PC2번) 목적지 IP 1.1.2.2 로 ICMP Echo Request를 잘보냈다. 여기서 seq=1 (시퀀스 번호 1)로 보냈으니 ICMP Echo Reply로 답장을 주는 쪽도 seq=1이라고 적어서 보내줘야한다. NO.17에보면 해당 응답을 받았다.
ICMP 패킷을 살짝만 더 분석해보자. Type에 8로 찍혀있따. 이 것은 ICMP Echo Request 타입 번호이다. ICMP Echo Reply는 0이다. 그렇다 8을 보내면0이 온다. 8-0 8-0 8-0 으로 통신한다고 생각하면 쉽다. (http 포트번호?) 왜 기억하냐고? 안타깝게도 이런게 시험에 나온다..
그리고 sequence Number 밑에 가려진 부분에 Data(56byte)가 있다. ~~!@#$%*()~~01234 ~ 이 부분이다. 의미없는 데이터이지만, 답장을 보낼 때 저걸 그대로 복사해서 받아한다. 그래서 약간은 의미가 있다.
그리고 ICMP 패킷에는 checksum이 존재한다. ICMP 헤더와 데이터 전체를 대상으로 검증하는 것인데 방법은 16비트로 쪼개어 합산 후 1의 보수를 취하는 것이다. 결국 패킷이 무결한가 확인하는 이 방법은 해시 함수를 쓰는 것보다 매~우 간단하고 빠르다. 너무 단순한 계산이 아닌가 생각할 수 있지만, 해킹과 같은 위변조 보다는 패킷이 전송되면서 손실되거나 더해진 오류가 있는지 탐지하는 것이기 때문라 이러한 방식을 쓰는 것이다.
마무리
이렇게 GNS3 소개, 설치, C3745 + C7200 추가, 간단한 실습 토폴로지로 ICMP 패킷을 보내면서
스위치의 Transparent Bridging에 대해 맛보고, ICMP 패킷을 살짝 분석해보았다.