- 서버 관리자는 SSH를 통해 내부 네트워크에 접속할 수 있어야 한다
- 외부 네트워크에서 라우터를 통해 내부 네트워크와 통신할 수 있어야 한다
- ELB는 Elastic Load Balancer 이다
- EC2는 서버, RDS는 DB, S3는 STORAGE이며 ELB를 통해 트래픽을 EC2에 할당해준다. 서버가 여러개 있으므로 AUTO SCALING을 통해 상황에 따라 시스템 자원들의 METRIC 값을 모니터링하여 서버 사이즈를 자동으로 조절한다
- 요청에 대해 Kernel에서 수행 가능한 기능이 있다면 Kernel이 허락한다
- 가상 자원은 결국 물리 자원을 통해 작동한다
Bridge (Switch) : Host OS와 동일 네트워크에 연결됨. 인터넷과 연결이 된다
- 가상 머신의 NIC Type을 Bridge로 하면 본 컴퓨터와 나란히 Bridge에 직접 연결된다. 따라서 Ip도 본 컴퓨터 네트워크 대역과 동일하다
- VMNET 0은 Bridge이기에 공유기로부터 직접 Ip를 받아오므로, Host/DHCP/ Subnet Address가 비어있다. 이는 사용자의 관리가 아닌 공유기의 관리를 받기 때문이다
NAT (Network Address Translation) : Ip 주소 바꿔준다
- vmnet10은 가상의 브릿지다. 이 가상의 브릿지의 IP는 . . .1이며, vmnet10은 실제로 win10에 있다. 이 가상의 브릿지는 단순히 스위치 역활로 다수의 동일 네트워크 가상 머신이 연결하게 해준다
- 본 컴퓨터는 Default Gateway 역활을 하며, vmnet10과 연결된다. 여기서 NAT를 통해 주소 변환을 해준다. 패킷이 도착하면, Gateway에서 패킷의 헤더를 열어서 출발지 Ip를 바꿔준다. 돌아올때도 똑같이 패킷의 헤더를 열어서 도착지 Ip를 바꿔서 가상머신에 전달해준다
- NAT가 있어도 외부 네트워크에서는 가상머신에게 접근이 불가능하다. 가상머신 Private Ip를 모르기 때문이다. 이때는 포트포워딩이 필요하다
- 실제로 확인해보면 Public Ip로 바뀐 것을 확인할 수 있다
Host-Only (isolated) : 외부와 통신 불가능
- 본 컴퓨터와 VMNET 1은 연결이 되지 않으므로, 외부와 통신이 불가능하다
- 동일한 네트워크의 머신끼리는 통신이 가능하다
- Router에 NAT를 직접 구성하여 외부 네트워크와 연결하게 할 수 있다
- !는 ICMP에 대한 응답이고, .은 arp가 실행되는 과정이다. !,.은 icmp에 대한 응답으로 arp과정을 모른다. 따라서 arp 과정중 icmp 응답이 안오므로 .으로 표시한다. !가 나오면 arp table에 저장됬으므로, 그다음부터 !만 나오는게 정상이다
- 통신은 Domain 주소가 아닌 Ip주소로 이루어진다. 따라서, Domain 주소를 해석해야한다
- Domain 주소는 Domain server의 zone 파일 ( 일종의 DB )에 저장한다
- Domain 주소 입력시
- 캐시 검색
- 캐시에 없으면 자신의 hosts 파일 검색
- hosts 파일에도 없으면 자신의 DNS ( 설정한 DNS 주소 ex. 8.8.8.8 )에게 Query
- Domain 서버에 검색 요청
- Domian 서버에서 DB 검색
- 주소를 담아 Client에게 응답
- 받은 주소로 Client는 Packet 생성
- 통신을 위해서 session을 만들어야한다. 첫 통신에는 session을 만들기 위해 syn을 전송한다 -> syn을 받으면 ack를 전송한다. 이렇게 통신 과정에서 계속 확인을 하기 때문에 TCP는 속도가 느리다
- client가 syn( 0 ) 전송 - session 생성 요청
- syn을 받은 서버가 ack( 0 + 1 )/syn ( 0 ) 전송 - 요청에 대한 ack와 생성을 위한 syn
- syn을 받은 client가 ack( 0 + 1 )을 전송 - session 생성 허가 확인
- session 생성
- client가 page 요청
- 서버가 var/www/http/index.html 파일을 분할하여 packet에 담고, 분할했으므로 번호를 붙여서 전송. 이때 마지막 분할된 파일은 마지막 번호라고 입력된다
아파트에서는 다음과 같이 허브에서 관리실 스위치에 연결된 다음, ISP에서 트래픽에 대해 검사한다. 왜 검사할까?
Ip는 Isp 에게 비용을 지불했느냐 여부에 따라 Public Ip, Private Ip로 분류된다. 이 Private Ip는 인터넷 연결이 안된다. 외부 네트워크로 요청을 보낼 수는 있지만 Public Ip가 아니므로, Web server에 도달하지 못한다. 따라서 응답이 안온다
- 대표적인 사설 Ip 주소 대역
- 10.X.X.X
- 172.16.X.X ~ 172.31.X.X
- 192.168.X.X
- IP 변환 기술로 주로, Private Ip 하나를 Public Ip로 바꿔준다
- 이 Public Ip는 사용하고 반납해야하므로, 재접속시 Public Ip가 바뀐다. 다시 할당받기 때문이다
- NAT 실행시 NAT Table에 기록해서, 요청에 대한 응답이 돌아올때 이 Table을 확인해서 Public Ip를 반납하고, 해당 Private Ip로 연결해준다
- 동적 NAT : 다수의 Public Ip는 Public Ip pool에 담겨있고, Private Ip가 이를 요청시 pool에서 Public Ip ( Floating Ip )를 꺼내서 변경해준다. 따라서 Public/Private Ip는 지정되지 않는다. 할당 받는 Public Ip가 그때그때 다르다. 외부에서는 Public Ip로 접근하므로 Private Ip의 주소를 모르기에 접근할 수 없다
- 정적 NAT : 특정 Private Ip는 무조건 지정된 Public Ip를 사용하도록 정적으로 매핑해 두는 기술이다. 정적 NAT는 1대1 매핑으로, 외부에서 Private Ip에 접근할 수 있다. 클라우드에서는 대부분 1대1 매핑해준다. Aws의 elastic Ip도 정적 NAT를 사용한다. 다만, 이는 유료 서비스다. 이때는 포트포워딩이 필요없다
- Public Ip가 한 개인 경우 다수의 Private Ip가 한 개의 Public Ip를 공유하여 Ip 변경을 하고자 하는 경우에 사용하는 기술
- 1대1 매핑이 아니라면, Public Ip로 왔을때 어떤 Private Ip인지 모른다. 이를 구분하기 위해 Port를 지정한다
- Ip를 Public으로 바꿔주면서, Port를 NAT의 Port로 바꿔준다
- 하나의 Public Ip에 대해 NAT의 Port 번호만을 바꿔주어, 여러대의 Private Ip가 동시에 외부 네트워크와 연결할 수 있다
더 자세한 내용은 뒤에 NAT & PAT 심화편을 참조하자
- access-list 1 permit any : 들어오는 모든 Ip를 변경할 Ip로 지정한 것이다. 이 any는 모든 Ip로 밑에 코드에서 inside로 들어가서 outside로 나갈 Ip들을 말한다. 이 Ip들은 list 1에 지정한다
- ip nat ; 주소를 변경하는 것이다
- inside source list 1 : 주소를 변경할 출발지 주소는 list 1에 지정된 주소들이다
- int fa 0/0 : fa0/0에 할당된 공인 주소로 변경한다 -> 여기까진 NAT
- overload : PAT 활성화. 다수의 Private Ip가 fa0/0의 Ip를 공유한다
외부에 있는 사용자들은 192.168.1.1xx:8001 포트로 접속할 경우 내부에 있는 사설 주소인 172.16.1.100의 80번 포트로 접속되도록 한다
Port 매핑이기에 Tcp를 해야한다
172.16.1.100의 Tcp 80 Port를 Public ip가 할당된 interface fa0/0의 8001 Port와 매핑시켜준거다. 즉 8001 Port로 들어가면 Private Ip와 연결되야한다
잘 접속된다. 이러면 우리는 172.16.1.100 ( 타인의 Private Ip )의 80 Port에 접속한 것이다
192.168.1.118 : 8001로 접속하면 잘 접속된다
- linux 명령어
- systemctl start httpd : http 서버 실행
- systemctl stop firewalld : 방화벽 종료
- echo : 출력
- echo "aaa" > /var/www/http/index.html : index.html에 aaa를 새로 써서 출력
- echo "aaa" >> /var/www/http/index.html : 기존 내용에 aaa를 덧붙여서 출력
- cat : 파일의 내용을 보는 것
다른 사람한테도 잘 접속된다
스스로 192.168.1.118 : 8001로 접속하면 접속이 안된다. 이는 라우터의 outside port이기 때문이다. 따라서 172.16.1.100 : 80으로 접속하면 접속된다
- do show run으로 확인
- no [삭제하고 싶은 코드]
- 만약 사용중이라고 하면 do clear ip nat trans * : 강제로 테이블 삭제
- 2를 다시 실행