(네트워크)애뮬레이션 실습2 - 라우터 연결 및 기본 구성
[카카오 클라우드 스쿨] GNS3 및 Wireshark를 통한 네트워크 에뮬레이션
네트워크 애뮬레이션 실습2 - 라우터 연결 및 기본 구성
- 오늘의 실습 내용
 
1. 라우터 연결 및 패킷 캡쳐해보기 
오늘 할 것 
 
- 브리지(외부 네트워크라고 가정)와 VMnetwork1 사이에 라우터를 구성하고, 인터넷을 연결해 볼 것이다
 
- 우선 GNS3에서 다음과 같이 구성
 - 터미널 실행
- 샵(#)은 보기만 할 수 있음, configure을 입력해서 수정해야 함
 - ?을 넣으면 도움말을 볼 수 있음
 - 축약어를 사용할 수도 있음
 
 - interface fa0/0에 주소 할당하기 (브릿지 ~ 라우터 앞단 연결)
- int fa0/0 : 인터페이스 추가함
 - ip add 192.168.1.105 255.255.255.0 : 주소 추가
 - no sh: no shutdown이라는 것을 알려줌
 - do ping 192.168.1.199: 강사님께 핑 보내보기 
 
 - 패킷 캡처를 한번 보자
![img_80]()
- wireshark로 연결이 될 것임
 - 필터 적용하기
 - 결과
![img_83]()
- 5개 보내서 5개 왔다 (총 10개의 패킷이 캡쳐됨)
 ![img_82]()
- 잘 안될 경우 wire를 지우고 다시 연결해 보자(에뮬레이터다보니 이런 문제가 발생하기도 함)
 
 - request 친구를 더블클릭하면
 
 
2. ARP에 저장되었는지 확인해 보기
- ARP(address resolution resolution protocol)
- 통신하고자 하는 목적지의 IP주소를 이용하여 해당 목적지의 물리주소인 MAC주소를 찾기 위한 프로토콜이며, 정상적으로 arp가 동작한 이후에는 arp 테이블에 목적지 IP와 MAC 주소가 등록된다. (기억함)
 - 이후 자신이 최종적으로 수행했던 통신을 하고자 한다면, ARP 테이블에 있는 정보를 참고하여 패킷을 완성하게 된다
 ![img_116]()
- 전송 중에 Mac주소 부분은 라우터의 Mac주소로 변경되지만, IP 부분은 변경되지 않는다
 - (IP가 다르면 서로 다른 네트워크) 
 
 - APT 테이블을 확인해 보면 연결했던 mac주소를 담고있는것을 확인할 수 있다
![img_87]()
- aging time: arp table에 mac주소가 저장되는 기간(지나면 다시 받아와야 함) 
 
 - 핑을 보낼 때, ARP table에 해당 Mac 주소가 있으면 바로 찾아 간다
 - 없다면, IP를 통해 브로드캐스트하여 Mac 주소를 받아 온다
 
3. 라우팅 테이블에 등록하기
- 라우팅 테이블에는 현재 라우터에서 도달할 수 있는 주소가 저장된다
 - 0.0.0.0 모르는 모든 IP는 바깥쪽과 연결된 라우터(192.168.1.1)로 보내버리겠다고 추가하면
 - 라우팅 테이블에 등록된다
 - 즉, 라우팅 테이블에 등록해 두면, 해당 패킷을 다른 곳으로 보내버릴 수 있다
- 예를 들어 DB 하나가 죽어도 라우팅 테이블을 통해 패킷을 다른 DB로 연결되게끔 해 줄수 있다 
 
 - 예를 들어 DB 하나가 죽어도 라우팅 테이블을 통해 패킷을 다른 DB로 연결되게끔 해 줄수 있다 
 - AWS에서도 마찬가지로
- 172.16.0.0/24 target:local - 내부 IP는 172.16.0에서 시작한다
 - 0.0.0.0/0 target:igw8236781236 - 외부 IP는 IGW로 보낸다 
 
 - 이제 뒷단 구성도 해 보자 (라우터 ~ VM 뒷단 연결)
- int fa0/1
 - ip add 172.16.1.2 255.255.255.0
 - no sh (셧다운 하지마)
 
 
4. 리눅스에서 네트워크 설정
- 환경변수이자 전역변수
 - env로 확인 가능
 - 변수 지정할 때에는 붙여야 함(아니면 명령어와 매개변수로 간주하여 작동하지 않는다)
 - 변수 출력 결과
 - 없어도 에러가 아님
 - 오류가 있으면 0, 아니면 다른 숫자
 - grep: 해당 행을 찝어내기
 - gawk: 해당 열을 찝어내기
 - 네트워크 설정 변경하기
![img_99]()
- 잘 변경됨
 
 - ICMP 전송해 보기
![img_101]()
- (ARP가 빠르게 처리되는것을 확인함)
 
 
5. 중간결과
- arp 테이블에서 나한테 보낸 놈들의 맥주소 확인해 보기
![img_102]()
- 통신이 잘 된다
 
 - 반대로 라우터에서 VM으로 보내보기
![img_103]()
- 보내는것도 잘 되네!
 
 - 이제 인터넷으로 보내보기
- 도메인으로 하면 안된다
 ![img_104]()
- IP 주소로 접속하면 잘 된다
 ![img_105]()
 
(참고)
SSK#conf t
SSK(config)#access-list 1 permit any                    ---> 변경할 주소 지정
SSK(config)#ip nat inside so list 1 int fa0/0 overload  ---> "ip nat" 주소 변경할게
                                                        ---> "inside source list 1" 주소를 변경할 출발지 주소는 list 1에 지정된 놈들이야
                                                        ---> "int fa0/0" int fa0/0(192.168.1.x) 에 할당된 공인주소로 변경할게
                                                        ---> "overload" pat 활성화 -> 다수의 사설 주소가 fa0/0의 주소를 공유
SSK(config)#int fa0/0
SSK(config-if)#ip nat outside
SSK(config-if)#int fa0/1
SSK(config-if)#ip nat inside
- 이제 가상 머신에서 인터넷에 연결할 수 있음! 구글 접속 패킷 캡처를 해 보면
![img_110]()
- NAT를 통해 접속된 모습을 확인할 수 있다
 - NAT을 통해 접속했기 때문에 목적지 주소가 다른 것을 확인!
 
 - 구조는 다음과 같다http://192.168.1.105 —-> router —-> 172.16.1.100:80
- IP는 현재 하나이므로, 정적 PAT
 
 
6. 정적 NAT 매핑
- 시나리오: 외부에 있는 사용자들이 192.168.1.1xx:8001 포트로 접속할 경우, 내부에 있는 사설 주소인 172.16.1.100의 80번 포트로 접속되도록 한다
- 우리가 필요한 것: 정적인 NAT 매핑, 192.168.1.1xx:8001 => 172.16.1.100:80
 
 
1 . router command
ip nat inside so static tcp 172.16.1.100 80 int fa0/0 8001
- 정적으로 매핑을 하겠다
 - 내부에 있는 사설 IP 주소인 172.16.1.100의 TCP 포트번호 80번과 & 공인 IP주소가 할당된 fa0/0의 8001 포트를 정적으로 매핑하겠다!!
 
2 . 웹서버 실행
systemctl start httpd  # 웹서버 실행
echo "helloworld" > /var/www/html/index.html  # 출력 내용을 파일로 저장
systemctl stop firewalld  # 방화벽 종료
cat /var/www/html/index.html  # 파일 내용을 출력함
- http://192.168.1.199:8001 로 접속하먄 NAT장비는 이를 172 16 1 100 80번 포트(리눅스의 웹서버)로 옴.
- 단, 웹서버 httpd는 동작중이어야 하며, 방화벽은 해제되어 있는 상태여야 함
 
 
3 . 이제 다른 사용자의 HTTPD와 내 HTTPD로 연결할 수 있다
4 . 지금까지 다음을 구현해 보았다
7. 실전문제
- 퇴근한 서버 관리자는 집에서 웹서버로 ssh로 연결을 시도하고자 한다
- 아래와 같은 방법으로 접속이 가능해야 한다
 
 
ssh -l root -p 20022 192.168 1.199
- 이제 20222 포트로 접속을 시도하면 내부에 있는 리눅스 웹서버로 ssh 연결이 가능해야 한다
 - 화면에는 public key를 저장할 것인지를 물을 것이고, yes를 타입 후 패스워드인 test123을 입력하면 정상적으로 원격지 서버에 접속할 수 있어야 한다
 - 참고로 ssh 서버의 기본 포트는 22번이다.
 
라우터 커맨드에서
ip nat inside so static tcp 172.16.1.100 22 int fa0/0 20022
완료! 
 다음을 통해 중간 과정을 생략 가능
ssh -l root -p 20022 192.168.1.123 hostname
- 그러나 ssh 접속 시 인증 방법이 두 가지가 있는데
- User와 PW로 인증할 경우, 이것이 털릴 경우 매우 곤란해 짐
 - Key를 사용해 로그인하는 것이 일반적
 
 
- 키 저장하기
 
[root@localhost .ssh]# ssh-keygen -q -f ~/.ssh/id_rsa -N ""
[root@localhost .ssh]# ls
       id_rsa  id_rsa.pub  known_hosts
- 키를 통해 로그인하기
ssh-keyscan 192.168.1.103 > .ssh/authorized_keys 
8. (추가)
- 라우터에서 NAT 설정을 잘못한 경우 수정 방법
do show run - 설정값 확인 후, 잘못된 설정을 드래그
 - no [해당 설정(우클릭)] 으로 없앤다
 - 만일 사용중이라고 표기될 경우
- 강제종료
 - do clear ip nat trans
 
 

 
 





 




















