VMnet0 -> Bridge
VMnet1 -> Host-only
…
VMnet2 -> Host-only
VMnet10 -> NAT(가상의 스위치)
네트워크 및 인터넷 설정 열기 -> 이더넷 -> 어댑터 옵션 변경
VMnet1 -> 속성 -> ipv4 속성 -> 172.16.1.1
VMnet10 -> 속성 -> ipv4 속성 -> 211.183.3.1
스위치: 강의실마다 스위치가 각각 있고, 라우터가 스위치들을 연결함
https://www.cisco.com/c/ko_kr/products/switches/catalyst-4900-series-switches/index.html
Host-only
NAT
본인의 pc(windows 10)에 VMnet10 가상 스위치를 생성함 -> ip는 1번이 할당되어 211.183.3.1
라우터의 default 게이트웨이에 ip 2번 할당 -> 211.188.3.2
pc에서 NAT를 거쳐서 VM에서의 사설 ip를 공인 ip로 바꿔줌
공유기에서 NAT를 거쳐서 사설 ip를 공인 ip로 바꿔줌
구글에 접속할 때 라우터(공유기)가 사설ip를 공인ip로 바꿔서 내보냄
Bridge(Switch)
스위치에 교육생들의 pc가 연결되어있음
스위치는 공유기와 연결되어있음
공유기의 사설ip: 192.168.1.X
공유기의 공인ip: 1.11.X.X
https://ifconfig.me/ 에서 공인ip 확인 가능
cloud1에 이더넷 추가 -> internet으로 이름 변경 -> 라우터와 fa0/0 연결 (/0은 outside)
cloud2에 VMnet1 추가 -> server_zone으로 이름 변경 -> 라우터와 fa0/1 연결 (/1 inside)
fa0/0선 우클릭 -> start capture -> wireshark 켜짐
-> do ping 192.168.1.199 -> request, reply 패킷 자세히 보기
[Router]
R1# conf t
R1(config)# int fa0/0
R1(config-if)# ip add 192.168.1.116 255.255.255.0
R1(config-if)# no sh
Mar 1 00:20:55.743: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
Mar 1 00:20:56.743: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R1(conf-if)# do ping 192.168.1.116
통신하고자 하는 목적지의 IP주소를 이용하여 해당 목적지의 물리주소인 MAC 주소를 찾기 위한 프로토콜이며,
정상적으로 arp가 동작한 이후에는 arp 테이블에 목적지 IP와 MAC 주소가 등록된다.
이후 자신이 최종적으로 원했던 통신을 하고자 한다면 ARP 테이블에 있는 정보를 참고하여 패킷을 완성하게 된다.
________________________
| MAC | IP | TCP | Data | -> 프레임
__________________
| IP | TCP | Data | -> 패킷
ip주소는 출발지부터 목적지까지 바뀌지 않음. 반면, MAC주소는 계속 바뀜
whireshark의 filter에 arp 적용
sender ip: 1.1.1.1
sender mac: 000c.000c.000c
dest ip: 1.1.1.5
dest mac: 00:00:00:00
"나는 1.1.1.1이고 나의 mac주소는 000c.. 인데, 너희들 중 1.1.1.5가 있다면 나에게 대답해줄래?"
sender ip: 1.1.1.5
sender mac: 000a.000a.000a
dest ip: 1.1.1.1
dest mac: 000c.000c.000c
"아~ 1.1.1.5의 mac 주소는 000a.000a.000a구나! 기억해야지!" -> arp 테이블에 저장
(arp 테이블은 ram을 사용하기 때문에, 시간이 지나면 사라짐 -> aging)
[Router]
R1(conf-if)# do ping 8.8.8.8 -> 통신이 되지 않음
..... <- ping 실패했다는 뜻
R1(conf-if)# do show ip route
C 192.168.1.0/24 is directly connected, FastEthernet0/0
R1(conf-if)# ip route 0.0.0.0 0.0.0.0 192.168.1.1
R1(conf)# do show ip route
C 192.168.1.0/24 is directly connected, FastEthernet0/0
S* 0.0.0.0/0 [1/0] via 192.168.1.1 -> 내가 알지 못하는 곳으로 갈 때에는 공유기(192.168.1.1)에게 맡겨라
R1(conf)# do ping 8.8.8.8 -> 이제 접속 됨!
!!!!! <- ping 성공했다는 뜻
R1(conf)# int fa0/1 -> inside
R1(conf-if)# ip add 172.16.1.2 255.255.255.0 -> gateway의 ip 추가
R1(conf-if)# no sh -> changed state to up
[가상머신]
ifconfig ens32 | grep 172.168.1
inet 172.16.1.128 netmask 255.255.255.0 broadcast 172.16.1.255
ifconfig ens32 | grep 172.16.1 | gawk '{print $1}' -> 결과 중 첫 번째를 반환
inet
ifconfig ens32 | grep 172.16.1 | gawk '{print $2}'
172.16.1.128 -> dhcp 프로토콜로 ip를 할당받은 것
가상머신 interface 설정 바꾸어보기
wired settings -> ipv4 -> manual
-> ip: 172.16.1.100
-> netmask: 24
-> gw: 172.16.1.2
-> apply -> interface 껐다가 켜기
[가상머신]
ifconfig ens32 | grep 172.16.1 | gawk '{print $2}'
172.16.1.100 -> ip주소가 설정한대로 바뀌었음
ping 172.16.1.2 -c 5 -> gateway로 ping 잘 됨
[Router]
R1(conf-if)# do show arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 192.168.1.116 - cc01.0ea4.0000 ARPA FastEthernet0/0
Internet 192.168.1.1 0 784f.9b2a.ea7b ARPA FastEthernet0/0
Internet 192.168.1.199 42 cc01.350c.0000 ARPA FastEthernet0/0
Internet 172.16.1.2 - cc01.0ea4.0001 ARPA FastEthernet0/1
Internet 172.16.1.100 0 000c.2920.8092 ARPA FastEthernet0/1
R1(conf-if)# do ping 172.16.1.100
!!!!!
[가상머신]
ping www.google.com -> 안 된다
ping 8.8.8.8 -> 패킷이 나가기는 한다??
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
왜 도메인으로 보내면 안 되고 ip로 보내니까 패킷이 나가기는 하고, 돌아오지 않을까?
클라이언트 - 10.10.10.10
DNS - 8.8.8.8
웹서버 - 5.5.5.5
IP는 ISP(SKT/KT/U+)에게 비용을 지불했느냐 여부에 따라 공인(public)IP, 사설(private)IP로 분류한다.
대표적인 사설 IP주소 대역
10.X.X.X
172.16.X.X ~ 172.31.X.X
192.168.X.X
aws에서 172.16.X.X(사설IP) 서버를 만들면 인터넷 연결이 없음
igw 연결하면 외부와 접속은 됨
NAT을 설정하면 임시적으로 공인 IP를 부여할 수 있음
인스턴스를 중지하면 공인 IP를 반납함
사설IP주소 하나를 특정 공인IP주소로 변경하는 것
공인 주소가 1개인 경우 다수의 사설 주소가 한 개의 공인 주소를 공유하여 주소 변경을 하고자 하는 경우에 사용하는 방법
클라이언트 - 172.16.1.10(사설 IP)
NAT - pool에 floating IP들이 있음 -> 168.116.63.5, 168.116.63.6, 168.116.63.7, ... -> 동적 NAT
ISP는 인터넷에 연결시켜주기 전에, 서비스 가입자인지 확인함
-> ISP는 사설 IP를 drop시킴 -> 사설IP를 공인IP로 변경해야 함 -> NAT의 역할
클라이언트가 외부로 나갈 때 NAT를 거침
NAT에서 사설 IP를 pool에서 floatingIP를 꺼내어 할당해줌
168.116.63.5
| Data(Request) | DST TCP(80) | SRC TCP(12345) | DST IP(5.5.5.5) | SRC IP(172.16.1.10) |
서버는 클라이언트와 달리, 정적 NAT로 고정된 IP를 할당받음
정적 NAT으로 할당된 IP는 NAT Table에 저장되어, 다른 클라이언트에게 할당하지 않음
여러 클라이언트가 NAT를 거쳐서 하나의 같은 공인IP로 변경될 때 -> 각자 다른 포트 번호로 바뀌어야함
-> NAT 장비의 port로 바꿈 = PAT(Port Address Translation)
[Router]
R1(config)# access-list 1 permit any
-> 변경할 주소 지정(모든 ip를 확인함)
R1(config)# ip nat inside source list 1 int fa0/0 overload
"ip nat": 주소 변경할게!!
"inside source list1": 주소를 변경할 출발지 주소는 list1에 지정된 친구들이야!!
"int fa0/0": fa0/0(192.168.1.X)에 할당된 공인 주소로 변경할게!!
"overload": PAT 활성화 => 다수의 사설 주소가 fa0/0의 주소를 공유!!
R1(config)# int fa0/0
R1(config-if)# ip nat outside
R1(config-if)# int fa0/1
R1(config-if)# ip nat inside
-> fa0/1에서 들어와서 fa0/0으로 빠져나갈 때
가상머신에서 이제 인터넷 접속이 됨
R1(config)# ip http server
-> 가상머신에서 http://192.168.1.116 접속
http://192.168.1.116 ---> Router ---> 172.168.1.100:80
정적 PAT
외부에 있는 사용자들이 192.168.1.1XX:8001 포트로 접속할 경우 내부에 있는 사설 주소인 172.16.1.100의 80번 포트로 접속되도록 한다.
192.168.1.1XX:8001 = 172.16.1.100:80
[Router]
R1(config)# ip nat inside source static tcp 172.16.1.100 80 int fa0/0 8001
내부에 있는 사설 IP주소인 172.16.1.100의 TCP 포트번호 80번과 공인 IP주소가 할당된 fa0/0의 8001 포트를 정적으로 매핑하겠다!
[가상머신]
systemctl start httpd -> 아파치 켜기
echo "HELLO ALL" > /var/www/html/index.html -> index.html 생성
ystemctl stop firewalld -> 방화벽 끄기
다른 가상머신 접속해보기 http://192.168.1.199:8001
퇴근한 서버 관리자는 집에서 웹서버로 ssh 연결을 시도하고자 한다.
아래와 같은 방법으로 접속이 가능해야 한다.
ssh -l root -p 20022 192.168.1.199 접속을 시도하면 내부에 있는 리눅스 웹서버로 ssh 연결이 가능해야한다. 화면에는 public key 를 저장할 것인지를 물을 것이고 yes 를 타이프 한 후에 패스워드를 입력하면 정상적으로 원격지 서버에 접속할 수 있어야 한다.
참고로 ssh 서버의 기본 포트는 22 번이다
[Router]
R1(config)# ip nat inside source static tcp 172.16.1.100 22 int fa0/0 20022 -> 내 가상머신의 ssh 접속 허용
[가상머신]
ssh -l root -p 20022 192.168.1.199 -> 다른 가상머신 접속
%Static entry in use, cannot change
[가상머신]
cd .ssh/
cat known_hosts
ssh로 접속한 기록이 나옴