[네트워크] 22-07-07 TIL

gununoo·2022년 7월 7일
1

네트워크

목록 보기
4/8

Load Balancer

NLB -> L4의 PDU(segment) 중 포트 번호를 확인하고 부하를 분산하는 방식

ALB -> L7(data)의 주소를 보고 부하를 분산하는 방식(k8s에서 ingress와 유사)

라우터의 역할 -> L3

  • Network 계층
  • Packet 처리
  • IP를 해석
  • 네트워크 간 통신에서 사용

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에 들어감

vNIC

하이퍼바이저를 이용하여 NIC을 가상화하면 vNIC이 생성된다.
vNIC은 다음과 같은 3가지 타입이 있다.
1. host-only(isolated network) - >VMnet1
호스트pc 외부와 통신이 되지 않는 고립된 네트워크 환경을 제공한다.
2. NAT
내부 사설 환경의 주소들이 호스트의 주소로 변경되어 외부와 통신이 가능하게 된다.
3. Bridge
호스트가 연결된 네트워크 환경과 동일한 환경에 연결되도록 해준다.

GNS3 실습 1 - vPC

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 -> 이제 됨

GNS 실습 2 - Linux

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 페이지 표시됨

시나리오 1

  1. 각 사설 구간끼리 통신 가능!! -> 서로 브라우저 접속 가능
  2. HQ의 ip가 공인 ip
  3. 외부에서 http://라우터의fa0/0주소:8001 하면 본사 내부의 웹서버가 보여야 한다.
  4. 외부에서 ssh -l root -p 20022 라우터의fa0/0주소 로 연결하면 리눅스로 ssh 연결되어야 한다.

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로 삭제한 다음 다시 입력해야 한다.

step 1. 각 인터페이스에 ip 주소 입력하여 동일 네트워크간 통신 가능 여부 확인

[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

step 2. 서로 다른 네트워크(본가-지사, 지사-지사) 간 통신이 가능하도록 static route 작성하기

[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

step 3. 본사에서는 인터넷으로의 연결을 위해 default route 구성하기

[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

step 4. 공인 주소가 1개 이므로 이를 이용한 내부 네트워크의 인터넷 사용을 위한 동적 PAT 구성하기

[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

step 5. 리눅스 서버로의 웹, ssh 연결을 위한 정적 PAT 구성하기

[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://지사리눅스서버주소

시나리오2 - tunnel

서울, 부산 지사끼리의 통신 구현

서울 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
-> :(

Internet Protocol: 상호통신을 위해 필요한 통신 규약(통신 언어)

IP -> IPv4(32bit), IPv6(128bit)

IPv4
주소 할당 방식:

  • 정적 할당: 관리자, 사용자가 기기에 직접 입력하는 방식. 서버는 주로 정적 할당 또는 처음 DHCP로 전달 받은 주소를 infinite 방식으로 시간 제한을 없애는 방법
  • 동적 할당: DHCP 프로토콜을 활용하여 서버로부터 주소, 서브넷 마스크, 게이트웨이, DNS 주소 등을 부여 받는 방식

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 네트워크의 첫 주소와 끝 주소가 아니기 때문에 사용 가능하다

예약되어 있는 주소들

  1. 1.1.1.0/24: 각 네트워크의 첫번째 주소(network)
  2. 1.1.1.255/24: 각 네트워크의 마지막 주소(broadcast)
  3. 0.0.0.0: 할당되지 않은 주소
  4. 255.255.255.255: IPv4 전체에 대한 broadcast
  5. 127.0.0.1: localhost(loopback) 주소, 자기 자신
  6. linklocal 주소: 169.254.X.X

192.168.2.0/24 -> 192.168.2.0 ~ 192.168.2.255
1. 호스트 수가 적고 네트워크 규모가 크다면 불필요한 트래픽이 많이 발생한다.
2. IP 낭비가 있을 수 있다.
-> 서브네팅 필요

AWS

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

profile
take a look

0개의 댓글