0부터 시작하는 가상머신과 네트워크 공부 - 환경 설정과 라우팅 실습
1. 가상머신 네트워크 설정
- 192.168.1. 대 Ip주소를 사용한다
- Internet Protocol : 상호간에 통신을 할 때 사용하는 통신 언어. network가 생기기 전에는 컴퓨터 제조 회사마다 통신 언어가 달랐다. 허나, network가 생기고 난 후 서로 다른 컴퓨터들이 통신을 할 때 사용할 표준 통신 언어( 규약 )를 만들었는데, 이게 Internet Protocol이다
- Internet은 우리가 아는 인터넷이 아닌 Inter networking의 준말이다
- protocol : 통신 언어 ( 통신 규약 )
- Ip의 특징 "Best Effect" : 통신에 최선을 다하지만, 보장은 하지 않는다.
- 데이터를 보낼때 나눠서 보내야하는데, 이 통신 과정중 패킷이 손실이 되면, 어떤 데이터가 손실됬는지 모르기에 나눈 데이터에 번호를 붙인다. 이 번호가 TCP다. 이 TCP를 Ip와 함께 사용하여 연결을 유지해서 신뢰성을 보장한다
2. 권한 설정
- Begin Installation을 누른다
- 비밀번호를 설정하고, 사용자를 만든다
- USER CREATION에서 make administrator을 체크해서 root의 권한을 사용자에게 부여한다
3. Linux
- 사용자는 물리 자원에 직접 접근을 할 수 없다
- 사용자는 Kernel을 통해 물리 자원에 접근한다
- Kernel이 오픈되어 있으면, 이에 맞게 개발을 할 수 있다
- Shell은 사용자와 Kernel 사이의 일종의 명령어 해석기로 명령어를 해석 / 전달하여 Kernel을 제어할 수 있다
- 이 Kernel에 직접 코드를 짜는 것 보다, Shell을 통해 명령어를 사용하여 Kernel을 제어하는 것이 편하다
- Shell은 명령어 전달도 가능하지만, 스크립트를 작성하여 프로그램도 구현 가능하다
- Window도 Linux와 비슷한 구조지만, Kernel이 오픈인지 아닌지 차이이다
4. 설치 완료 및 실행
- 설치가 완료되면 부팅이 된다
- 라이센스 정보를 확인해보자. 라이센스는 Free로 자유롭게 사용할 수 있다. GPL 라이센스를 통해 사용한다. 라이센스 동의를 해주자
- CONFIGURATION을 눌러주자
- 그러면 로그인이 가능한 창이 나오는데, 이 user1이 아닌, not listed를 들어가서 root, test123을 통해 접속한다.
- 리눅스 가상머신 설치가 끝났다
- 좌측 상단의 Application/System Tools/Terminal에 들어간다
- 이 Terminal을 통해 Shell에 들어간다. Shell을 통해 Kernel에 접속해 기능을 사용할 수 있다
- ifconfig를 작성해준다. 이는 interface의 구성 상태를 보여달라는 것으로 LAN card의 구성상태를 확인 할 수 있다.
- interface에는 physical과 logical이 있다. 여기서 ens32는 physical interface고 lo ( loopback )은 logical interface로 logical은 상황마다 다르게 사용할 수 있다는 뜻이다
- interface는 서로 다른 장치 또는 시스템 사이에 설정된 물리적 및 기능적 연결할때의 경계로 사용자가 기기를 기능 또는 동작시킬때 도움을 주는 시스템 / 메커니즘. 쉽게 말해서 도구라고 보면 된다
- network interface : 두 가지 네트워크 장비 또는 프로토콜 계층이 연결되는 경계이며 연결하는 데 사용되는 컴퓨터 하드웨어 / 소프트웨어
- lo ( loopback ) : 통신 DB에 있는 logical interface로 주로 테스트 용도로 사용되는 자기 자신과 통신하기 위한 가상 이더넷 장치다. 외부와의 연결은 불가하다. 만약 loopback 으로 통신을 시도했을 경우, 정상적인 상태라면 장치는 TCP/iP 가 정상적으로 동작한다는 것을 의미한다
- virbr0 : 가상 네트워크 스위치의 인터페이스로 가상 머신의 네트워크를 라우팅하는 게이트 웨이 역활을 한다
- 외부와 통신할때는 Ip의 inet 주소를 사용한다
- ether는 MAC 주소다
- cat /etc/hosts를 작성해보자. Domain 주소가 작성되면 이 파일을 접속해서, 해당 주소의 Ip주소를 확인한다
- 주소에 Domain 주소가 있으면
- Cache 확인
- Cache에 없다면 cat/etc/hostc 파일 확인
- 파일에도 없으면 Domain 서버 확인
- 위 파일에 해당 Domain 주소에 대한 Ip가 적혀있으며, 이 Ip는 외부 네트워크와 통신시 수정하면 안된다. 이는 보안상 위협이 있기 때문이다. 따라서 내부 local 통신이나, 사설 DNS 서버를 사용시에는 수정해도 된다
- 8.8.8.8 은 google DNS 서버의 주소이다
- 만약 외부 네트워크와의 통신에서 해당 주소를 임의로 바꾸면, 보안에서 걸린다
- clear : terminal 창을 위로 올려준다
- ping을 입력하여 icmp protocol을 통해 통신을 확인한다. 패킷 반환을 확인할 수 있다. -c 숫자는 옵션으로 몇 번 보낼지 설정한다
- 다른 가상머신과 통신이 되는 것을 확인할 수 있다
5. 가상 서버 만들기
- httpd를 설치한다. 설치 과정 중에 다른 app이 사용중이라 yum을 lock 중이라고 한다면 kill -9 'pid 번호'를 입력하여 해당 app을 종료하고, 다시 설치하면 된다
- httpd를 실행하면 서비스 환경 구성 파일의 설정을 읽어서 실행한다. 이 파일은 /etc/httpd/conf/httpd.conf이다. 이 내용을 변경하면, httpd를 재실행 ( 갱신 ) 하여 적용한다
- cd : change directory
- pwd : print working directory로 작업중인 directory를 표시한다
- gedit로 파일을 열어준다. gedit는 편집기다
- 80번 포트로 작동하는 것을 확인할 수 있다
- 외부에서 자신의 주소로 접속시 보내주는 폴더 주소. 이 폴더의 DirectoryIndex 파일에 접속하게 해준다
- 이 index.html을 만들어보자
- curl을 통해 해당 주소의 코드를 index.html에 담아준다
- 잘 가져왔다
- system control을 통해 실행하자
- status로 확인하면 active를 확인할 수 있다. 잘 실행된다
- Host 주소로 접속해보면 잘 접속되지만, 타인의 Ip주소는 접속 불가능하다
- 이는 방화벽으로 인해 접속이 불가능하다
6. 네트워크
- Ip는 logical 주소, MAC는 physical 주소이다. 이 두 가지가 Lan 카드에 들어가 있다. Ip는 바꿀 수 있지만 조건이 있다
6.1 IP
- Ip의 앞 3자리는 네트워크 대역과 같아야하며, 뒤에는 유일해야한다
- 서브넷 마스크는 Ip의 네트워크 영역과 Host 영역을 구분하는 역활이다
- Default-Gateway : Gateway 주소
- 라우터는 Ip 주소를 해석하여 서로 다른 네트워크를 연결시켜주며, 게이트웨이는 해당 네트워크 대역에서 외부와 통신하기 위한 출입구다
6.2 MAC
- 내부 통신에는 MAC 주소를 알기에 통신시 MAC 주소를 알아야하지만, 외부와 통신시 MAC 주소를 모른다
- ARP 방식은 브로드캐스트로 요청하여 유니캐스트로 응답을 받아 MAC 주소를 알아낸다
- 알아낸 MAC 주소는 ARP TABLE에 입력하여 기록한다. 에이징 타임(aging time)은 이 ARP TABLE에 저장된 저장 정보를 유지하는 시간이다
- 다른 네트워크와 통신할때는 Gateway의 MAC 주소를 알면 된다. Gateway에서는 연결되는 라우터의 MAC 주소를 알면 된다. 통신 과정중 MAC 주소는 계속 바뀌지만, Ip 주소는 바뀌지 않는다
6.3 Port
- Port는 서비스의 번호로 http는 80번 Port다
- 출발지의 Port 번호는 Random이다. 이 번호를 지정된 번호로 열어놓으면 보안 위협이 있기에 랜덤 Port로 설정한다
7. 방화벽과 네트워크
- 방화벽은 Port를 막거나 열어주는 것이다. 만약 TCP Protocol로 80번 Port와 통신을 한다면 TCP/80을 방화벽에서 열어줘야한다
- http://~로 접속할때, 뒤에 :Port번호가 있으면 해당 Port번호로 접속하고, 없다면 http의 80번 Port로 접속한다
- stop을 통해 방화벽을 껏다
- 다른 사람 주소에 접속이 된다
- http로 naver에 접속했더니 https가 나온다. 왜 https ( 443 port )로 redirect가 될까? https의 s는 secure이다. http는 데이터 송수신시 clear text로 전송, 수신한다. https는 데이터 송수신시 데이터에 대한 암호화가 추가된다. 따라서 암호화가 필요하므로 로드밸런서가 80번 Port를 443번 Port로 연결시켜줘서 https로 접속하게 해준다
8. 라우팅 실습 환경 설치 및 설정
- 서버에 원격 접속하기
- using gui : vnc, spice, pcoip ...
- using cli : telnet ( http와 유사하다 ), ssh ( 암호화를 시켜줘서 일반 로그인 및 key-pair를 이용한 인증도 제공한다 )
- gui, cli는 사용자 인터페이스로 컴퓨터와 상호 작용하는 방법을 지정하는 시스템이다. gui는 그래픽을 사용하여 사용자가 시스템과 상호 작용하며 cli는 명령어를 통해 시스템과 상호 작용한다
- 이렇게 라우터를 직접 구성해보자
- AWS에서 Region은 특정 지역 데이터 센터들을 나타내는 Zone들을 묶은 것이다. VPC는 virtual private cloud로 사용자가 해당 Zone에서 격리된 환경을 제공해준다
- public subnet은 internet gateway와 연결되어 외부와 접속이 되며, private subnet은 외부에서 접속이 안된다. 보통 DB를 private에 두고, 웹서버를 public에 두거나 자체 웹서버와 연결하는데, 이 구간에서 가장 중요한 것은 보안이다. 이를 위해 VPN을 사용한다
- VPN은 tunnel을 만들어서, 이 tunnel을 통해 주고받는 Data는 암호화 시켜주며, Hashing ( 키 값에 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근하는 방법 ), 인증을 해준다
- GNS3 폴더를 만들고, 안에 두 가지 폴더를 생성해준다
- 아까 다운받은 c3660 이미지 파일을 넣어준다
- wireshark를 다운받는다. 해당 프로그램은 packet을 볼 수 있게해준다
- 이렇게 설치해준다
- GNS3는 에뮬레이터다. 이를 설치해주자
- 이렇게 설치해준다
- Solarwinds는 필요없으므로 No로 하고 진행한다
- New project는 Cancel해주고, Update도 No해준다
- Project와 Images 경로를 아까 만든 폴더로 지정한다
- Image 라우터를 아까 다운받은 Image를 Default로 설정한다
- 라우터안에는 OS가 들어있다. 이 OS를 GNS3 에뮬레이터에서 실행하면 PACKET이 발생한다
- cloud를 Drag&Drop해준다
- c3600은 라우터다. 위와 같이 라우터와 cloud를 추가해주자. 이 라우터는 가상의 라우터다
- cloud1을 다음과 같이 설정한다
- cloud2는 다음과 같이 설정한다
- 라우터와 cloud들을 연결해준다. 이때 라우터의 port의 0번은 cloud 1, 1번은 cloud 2와 연결해주자
- 위 버튼을 통해 정보를 표시할 수 있다
- 리눅스의 Lan card를 설정한다. Lan card는 원래 이더넷과 연결되있었는데 이를 VMnet1로 연결시킨 것이다
- Wired Settings에 들어간다. 여기서 Interface의 내용을 수정할 수 있다
- 위 설정으로 들어가 IPv4로 들어간다
- Method를 Automatic으로 해주고, Wired를 껏다 켜준다
- Ip가 바뀌었다. 이는 사설 네트워크로 인터넷과 연결이 안된다. 이제 라우터를 통해서 외부와 연결되게 설정해보자
9. 라우터 설정
- Start 버튼을 눌러준다
- 라우터를 우클릭해서 Console을 눌러주면, 다음과 같은 창이 나온다
- ctrl + shift + esc로 현재 cpu 사용량을 확인해보자
- 라우터가 실제 물리 라우터에서 작동하는 것이 아니기에 라우터에서 Cpu를 통해 계속 연산을 한다
- Auto Idle-PC를 눌러서 이 Window환경에 최적화 시켜준다. 이러면 라우터가 해당 환경에 최적화되서 Cpu 사용량이 줄어든다
- 이제 라우터 Port에 Ip 주소를 넣어주자
- conf t를 통해 config에 들어간다
- int는 interface로 fa0/0에게만 설정에 대한 적용을 시키겠다고 설정한다
- ip add(address)를 통해 Ip 주소와 서브넷 마스크를 설정한다
- no sh는 no shutdown으로 Interface는 기본적으로 off이므로 이를 활성화 시키는 명령어다
- Do ping을 통해 Ping이 잘 보내지는지 확인하자
- 0.0.0.0 은 자신이 알지 못하는 모든 네트워크다. 이 모든 네트워크는 192.168.1.1 ( Gateway )에게 보내라고 설정한 것이다
- 실행해보면 .과 !가 찍힌다. 여기서 .은 Gateway의 MAC 주소를 몰라서 이 주소를 찾고 있는 중이라는 것이다. 이때 Arp Protocol이 실행된다
- 라우터를 사용할 User를 한명 만든다
- 가상의 Terminal을 26개 만들어, 26명이 동시에 라우터에 접속할 수 있게 해준다
- 로그인은 local의 User 계정을 사용하게 한다
- 접속한 User는 가장 낮은 권한을 가진다. 이때 enable 명령어를 통해 권한을 높일때 해당 password를 입력하게 한다
10. 라우팅 실습 - Telnet
- Putty란? 서버에 접속하여 명령어를 전송하는 원격 서버 접속 프로그램으로 SSH, 텔넷, rlogin, raw TCP를 위한 클라이언트로 동작하는 자유 및 오픈 소스 단말 에뮬레이터 응용 프로그램이다
- 해당 폴더에서 putty.exe에 접속한다
- 192.168.1.199에 telnet으로 접속한다. telnet의 Port번호는 23이다
- 접속하면 로그인을 해야한다
- 로그인을 하고나서 en ( enable )을 입력하여 en password를 입력하면 해당 Ip의 라우터에 접속된다
- 해당 통신과정 중의 Packet을 Wireshark를 통해 확인할 수 있다
- Telnet을 사용하기에 모든 정보를 확인 가능하지만, 보안상 취약하여 실무에서는 사용하지않고, SSH를 사용한다
- GNS3는 빨간 정지 버튼을 눌러서 정지시키고 꺼야한다
- linux는 power off 및 init 0 을 입력하여 종료한다
- 기존 리눅스 설치할때 네트워크를 192.168.1.19로 하여 vmnet 0와 연결되게 가상 환경에서 아무것도 거치지 않고 실제 네트워크 어댑터와 연결시켜 외부 네트워크와 통신이 가능했다
- 허나 network를 automatic으로 하여 사설 ip로 바꿨고, vmnet 1로 연결시켜 현재 외부 네트워크와 통신이 불가능하다. 현재 cloud 1은 이더넷, cloud 2는 vmnet 1로 설정한 리눅스다. 우리는 다음 시간에 이 라우터를 포트포워딩을 통해 192.168.1.118로 온 요청을 사설 ip로 전달 시켜주는 작업을 해볼 것이다
11. key-pair를 이용한 ssh연결
- SSH Key는 비밀번호 보다 높은 수준의 보안을 필요로 할 때나 로그인 없이 자동으로 서버에 접속 할 때 사용하며 공개키(public key)와 비공개 키(private key)로 이루어진다
- 비공개키는 서버에 위치해야 하고, 공개키는 클라이언트에 위치해야 한다
- 접속시 클라이언트와 서버의 키를 비교하여 인증한다