NLB -> L4의 PDU(segment) 중 포트 번호를 확인하고 부하를 분산하는 방식
ALB -> L7(data)의 주소를 보고 부하를 분산하는 방식(k8s에서 ingress와 유사)
step 1. ACL(Access Control List) -> Permit/Deny
step 2. NAT(주소 변환)
step 3. Routing -> Routing table based on "path selection", "packet fowarding"
프레임의 목적지 MAC을 확인
본인에게 온 프레임이 맞다면 MAC을 벗김 -> 패킷
패킷이 내부에 도달하면 input queue에 들어감
첫 번째로 ACL에게 보냄 -> Access Control List
ACL에는 Permit 정책과 Deny 정책이 있음
Deny 정책이라면 패킷이 drop됨
Permit이라면 NAT로 보내짐 -> 주소 변환
그 다음 Routing을 함 -> path selection/packet fowarding
output queue에 들어감
하이퍼바이저를 이용하여 NIC을 가상화하면 vNIC이 생성된다.
vNIC은 다음과 같은 3가지 타입이 있다.
1. host-only(isolated network) - >VMnet1
호스트pc 외부와 통신이 되지 않는 고립된 네트워크 환경을 제공한다.
2. NAT
내부 사설 환경의 주소들이 호스트의 주소로 변경되어 외부와 통신이 가능하게 된다.
3. Bridge
호스트가 연결된 네트워크 환경과 동일한 환경에 연결되도록 해준다.
cloud에 이더넷 추가
R1만 start
[Router]
conf t
int fa0/0
ip add 192.168.1.116 255.255.255.0
no sh
do ping 192.168.1.199
do show arp
int fa0/1
ip add 192.168.116.116 255.255.255.0
no sh
do ping 192.168.199.199 -> 안 됨
강사님 pc에 도달할 수 있도록 route를 추가해야함
ip route 192.168.199.0 255.255.255.0 192.168.1.199
do ping 192.168.199.199 so fa0/1 -> 이제 됨
cloud2에 VMnet3 추가
virtual network editor에서 VMnet3의 ip 192.168.116.0로 변경
VM workstation 설정에서 centos의 network를 VMnet3로 변경
index.html 페이지 생성
echo "<center><h2>LEEGUNWOO</h2></center>" > /var/www/html/index.html
systemctl enable httpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
enable -> 시작 프로그램으로 지정
--now -> 지금 당장도 스타트 시키기
systemctl status httpd
systemctl disable firewalld --now
disable -> 재부팅해도 방화벽은 꺼지도록 설정
ip주소 변경 -> centos 설정 -> IPv4
ip: 192.168.116.116
gw: 192.168.116.2
pc의 브라우저에서 192.168.116.116 접속 -> LEEGUNWOO 페이지 표시됨
Sol)
step 1. 각 인터페이스에 ip 주소 입력하여 동일 네트워크간 통신 가능 여부 확인
step 2. 서로 다른 네트워크(본가-지사, 지사-지사) 간 통신이 가능하도록 static route 작성하기
step 3. 본사에서는 인터넷으로의 연결을 위해 default route 구성하기
step 4. 공인 주소가 1개 이므로 이를 이용한 내부 네트워크의 인터넷 사용을 위한 동적 PAT 구성하기
step 5. 리눅스 서버로의 웹, ssh 연결을 위한 정적 PAT 구성하기
[인터페이스 별 IP, 동작 상태 확인을 위한 명령]
do show ip int br
[라우팅 테이블 확인]
do show ip route
[전체 구성 정보]
R1(config)# do show run
(만약 R1# show run)
잘못된 IP 주소? -> 한 번 더 다시 입력하면 덮어씌운다
잘못된 route? -> ip route 0.0.0.0 0.0.0.0 192.168.1.11 한 번 더 입력하면 동일 목적지에 대하여 경로가 2개 만들어지므로 반드시 no ip route 0.0.0.0 0.0.0.0 192.168.1.11로 삭제한 다음 다시 입력해야 한다.
[HQ Router]
int fa0/0
ip add 192.168.1.101 255.255.255.0
no sh
int fa0/1
ip add 192.168.101.2 255.255.255.0
no sh
[BR Router]
int fa0/0
ip add 192.168.1.102 255.255.255.0
no sh
int fa0/1
ip add 192.168.102.2 255.255.255.0
no sh
[BR2 Router]
int fa0/0
ip add 192.168.1.103 255.255.255.0
no sh
int fa0/1
ip add 192.168.103.2 255.255.255.0
no sh
[HQ Router]
! 지사와의 통신을 위한 정적 라우팅
ip route 192.168.102.0 255.255.255.0 192.168.1.102
ip route 192.168.103.0 255.255.255.0 192.168.1.103
[BR1]
! 본사와의 통신을 위한 정적 라우팅
ip route 192.168.101.0 255.255.255.0 192.168.1.101
! BR2와의 통신을 위한 정적 라우팅
ip route 192.168.103.0 255.255.255.0 192.168.1.103
[BR2]
! 본사와의 통신을 위한 정적 라우팅
ip route 192.168.101.0 255.255.255.0 192.168.1.101
! BR1과의 통신을 위한 정적 라우팅
ip route 192.168.102.0 255.255.255.0 192.168.1.102
[BR1]
! 본사에서 인터넷으로의 통신을 위한 정적 라우팅(default route)
ip route 0.0.0.0 0.0.0.0 192.168.1.1
[BR2]
! 본사에서 인터넷으로의 통신을 위한 정적 라우팅(default route)
ip route 0.0.0.0 0.0.0.0 192.168.1.1
[HQ Router]
! 사설 구간에서 인터넷으로의 통신을 위한 동적 PAT
access-list 1 permit any
ip nat inside source list 1 int fa0/0 overload
int fa0/0
ip nat outside
int fa0/1
ip nat inside
[HQ Router]
! 외부에서 웹서버(192.168.101.101:80)로 접속하기 위한 정적 PAT
! 외부 ---> http://192.168.1.101:8001 ---> http:192.168.101.101:80
ip nat inside source static tcp 192.168.101.101 80 inf fa0/0 8001
! 외부 ---> ssh fa0/0:20022 ---> 192.168.101.101:22
ip nat inside source static tcp 192.168.101.101 22 int fa0/0 20022
[최종 확인]
옆 조에서
http://본사라우터fa0/0:8001
ssh -l root -p 20022 본사라우터fa0/0주소
지사 확인은 위에서 ssh 연결이 된 이후 해당 터미널에서 아래와 같이 웹접속으로 확인할 수 있다.
curl http://지사리눅스서버주소
서울, 부산 지사끼리의 통신 구현
서울 11.11.11.0/24
부산 22.22.22.0/24
[SEOUL]
step 1. ip 설정
conf t
int fa0/1
ip add 192.168.1.1 255.255.255.0
no sh
int fa0/0
ip add 11.11.11.1 255.255.255.0
no sh
step 2. default route 설정
ip route 0.0.0.0 0.0.0.0 11.11.11.2
[BUSAN]
step 1. ip 설정
conf t
int fa0/0
ip add 22.22.22.1 255.255.255.0
no sh
int fa0/1
ip add 192.168.2.1 255.255.255.0
no sh
step 2. 인터넷으로 나가기 위한 default route 설정
ip route 0.0.0.0 0.0.0.0 22.22.22.2
[INTERNET]
conf t
int fa0/0
ip add 11.11.11.2 255.255.255.0
no sh
int fa0/1
ip add 22.22.22.2 255.255.255.0
no sh
! INTERNET은 설정 끝
[SEOUL]
! 서울에서 부산으로 ping -> 된다
do ping 22.22.22.1
[BUSAN]
! 부산에서 서울으로 ping -> 된다
do ping 11.11.11.1
아직 서울과 부산은 인터넷 연결이 안 된다 -> SEOUL과 BUSAN 라우터에 NAT 구성이 안 되었기 때문
서울의 pc와 부산의 pc끼리 NAT 없이 사설 ip로 연결하고 싶음 -> 터널링 사용 -> 나중에 도커로 구성한다면 터널링이 구현되어있음
[SEOUL]
int tunnel 0
ip add 10.10.10.1 255.255.255.0
! 어디서부터 어디까지가 터널인지를 지정하기
tunnel source fa0/0
tunnel destination 22.22.22.1
! 상대방의 ip: 22.22.22.1
[BUSAN]
int tunnel 0
ip add 10.10.10.2 255.255.255.0
! 터널 구간 설정
tunnel source fa0/0
tunnel destination 11.11.11.1
! 상대방의 ip: 11.11.11.1
[SEOUL]
! 부산쪽 터널로 ping -> 된다
do ping 10.10.10.2
! 부산쪽 터널로 보내겠다
ip route 192.168.2.0 255.255.255.0 10.10.10.2
[BUSAN]
! 서울쪽 터널로 보내겠다
ip route 192.168.1.0 255.255.255.0 10.10.10.1
PC1, PC2 실행
[PC1]
ip 192.168.1.100/24 192.168.1.1
[PC2]
ip 192.168.2.100/24 192.168.2.1
[PC1]
! 서울pc에서 부산 pc로 ping 보내기 -> NAT가 없는데도 통신이 된다
ping 192.168.2.100
[PC2]
! 부산 pc에서 서울 pc로 ping 보내기 -> NAT가 없는데도 통신이 된다
ping 192.168.1.100
wireshark로 캡쳐
src: 11.11.11.1
dst: 22.22.22.1
src: 192.168.1.100
dst: 192.168.2.100
클라우드 = 멀티테넌시 환경 => 터널이 필요함
회사나 프로젝트 하나하나를 테넌트라고 부름
GRE는 보안이 떨어짐
GRE + IPsec -> GRE over IPsec VPN
[Linux]
ping www.google.com -> 안 됨
ping 192.168.116.1 -> 됨(VMnet3)
touch check.sh
chmod +x check.sh
+x: execute 권한을 부여하겠다
vi check.sh
#1/bin/bash
echo -n "IP or Hostname?: "
read ip
ping $ip -c 3 > /dev/null
if [[ $? == 0 ]]
then
echo ":)"
else
echo ":("
fi
-> 만약 파이썬이라면? #!/usr/bin/python3
-> 입력한 값이 ip 변수에 들어감
-> /dev/null로 보내서 화면에 띄우지도 말고 저장하지도 않음
./check.sh
IP or Hostname? : 192.168.116.1
-> :)
./check.sh
IP or Hostname? : 8.8.8.8
-> :(
IP -> IPv4(32bit), IPv6(128bit)
IPv4
주소 할당 방식:
IPv4는 공인 주소와 사설 주소로 구분된다. (비용 지불에 따라)
public ip는 ISP에게 비용을 집줄하고 사용하는 주소이며 인터넷 상에서 unique해야 한다.
private ip는 내 마음대로! 단, 인터넷 사용은 불가하다!
IPv4 -> 4개의 옥텟(8bit)으로 구성되어있다. 8bit * 4 -> 32bit
aws에서는 각 VPC 별로 기본적으로 182.31.0.0/16
/는 prefix-length 라고 부르며, 서브넷 마스크에서 연속된 1비트 자리수를 의미한다.
172.31.0.0/16 = 172.31.0.0 255.255.0.0
-> 172.31.0.0 ~ 172.31.255.255
Quiz. 172.31.5.0은 PC에 할당할 수 있는 IP 주소이다! -> Yes
-> ip subnet-zero -> /16 네트워크의 첫 주소와 끝 주소가 아니기 때문에 사용 가능하다
192.168.2.0/24 -> 192.168.2.0 ~ 192.168.2.255
1. 호스트 수가 적고 네트워크 규모가 크다면 불필요한 트래픽이 많이 발생한다.
2. IP 낭비가 있을 수 있다.
-> 서브네팅 필요
VPC -> 172.31.0.0/16
subnet
172.31.0.0/20 -> 172.31.0.0 / 172.31.0.1 ~ 172.31.15.254 / 172.31.15.255
172.31.16.0/20 -> 172.31.16.0 / 172.31.16.1 ~ 172.31.31.254 / 172.31.31.255
172.31.32.0/20 -> 172.31.32.0 / 172.31.32.1 ~ 172.31.47.254 / 172.31.47.255