Infra/cloud

[AFOS] 3주차 네트워킹 서비스 - 실습 : VPC 구성(퍼블릭 서브넷)

미니문92 2021. 7. 9. 03:26

5. 퍼블릭 서브넷 VPC 구성

 

목표 구성도

단일 퍼블릭 서브넷에 속한 EC2 인스턴스가 외부 인터넷 구간으로 통신

 


VPC 생성

 

VPC 생성

 

이름 / IPv4 CIDR 블록 입력

 

VPC 생성 완료

 

10.0.0.0/16 VPC 생성 도식화

 

 


퍼블릭 서브넷 생성

 

퍼블릭 서브넷 생성

 

Name / AZ / IPv4 CIDR 정보 입력

 

생성 완료

 

인터넷 게이트웨이 생성 및 VPC 연결

 

인터넷 게이트웨이 생성

 

이름 입력

 

생성 완료 후 VPC 연결

 

실습용으로 생성한 CloudNeta-VPC 선택

 

연결 완료

 

인터넷 게이트웨이 생성 및 VPC 연결 도식화


 

퍼블릭 라우팅 테이블 생성 및 서브넷 연결

 

라우팅 테이블 생성

 

이름 / VPC 선택

 

라우팅 테이블 생성 완료 후 서브넷 연결 편집

 

퍼블릭 서브넷 선택

 

퍼블릭 서브넷 연결 완료

 

퍼블릭 라우팅 테이블 교체

 


퍼블릭 라우팅 테이블 경로 추가

 

라우팅 편집

 

0.0.0.0/0 인터넷 게이트웨이 라우팅 추가

 

퍼블릭 라우팅 테이블 외부 인터넷 경로 추가 도식화


 

EC2 인스턴스 생성 후 접근 및 통신 확인

 

EC2 생성

 

네트워크, 서브넷, 퍼블릭 IP 자동 할당 활성화 선택

 

 

EC2 인스턴스 생성 도식화

 

서버 접속 후 검증 완료


IP 정보 확인 (프라이빗 IP , 퍼블릭 IP)

 

# 네트워크 인터페이스 정보 확인
[root@ip-10-0-0-206 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:f2:e8:0e:72:3e brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.206/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 2820sec preferred_lft 2820sec
    inet6 fe80::f2:e8ff:fe0e:723e/64 scope link
       valid_lft forever preferred_lft forever
       
[root@ip-10-0-0-206 ~]# ip -br -c addr show
UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             10.0.0.206/24 fe80::f2:e8ff:fe0e:723e/64

[root@ip-10-0-0-206 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 10.0.0.206  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::f2:e8ff:fe0e:723e  prefixlen 64  scopeid 0x20<link>
        ether 02:f2:e8:0e:72:3e  txqueuelen 1000  (Ethernet)
        RX packets 44108  bytes 60539108 (57.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4673  bytes 446811 (436.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 32  bytes 2592 (2.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32  bytes 2592 (2.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


# 라우팅 정보 확인
[root@ip-10-0-0-206 ~]# ip route list
default via 10.0.0.1 dev eth0
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.206
169.254.169.254 dev eth0

[root@ip-10-0-0-206 ~]# ip route show
default via 10.0.0.1 dev eth0
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.206
169.254.169.254 dev eth0
[root@ip-10-0-0-206 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.169.254 0.0.0.0         255.255.255.255 UH    0      0        0 eth0
[root@ip-10-0-0-206 ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.169.254 0.0.0.0         255.255.255.255 UH        0 0          0 eth0


# ARP 정보 확인
[root@ip-10-0-0-206 ~]# ip neigh show
10.0.0.2 dev eth0 lladdr 02:ed:85:ca:4d:f4 REACHABLE
10.0.0.1 dev eth0 lladdr 02:ed:85:ca:4d:f4 REACHABLE
[root@ip-10-0-0-206 ~]# arp -e
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.2                 ether   02:ed:85:ca:4d:f4   C                     eth0
gateway                  ether   02:ed:85:ca:4d:f4   C                     eth0


# DNS 서버 정보 확인
[root@ip-10-0-0-206 ~]# cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search ap-northeast-2.compute.internal
options timeout:2 attempts:5
nameserver 10.0.0.2


# 외부 접속 시 공인 IP 정보 확인
# 카카오맵/네이버맵/구글맵에서 위도경도로 대략 위치 확인 가능
[root@ip-10-0-0-206 ~]# curl ipinfo.io
{
  "ip": "3.36.61.191",
  "hostname": "ec2-3-36-61-191.ap-northeast-2.compute.amazonaws.com",
  "city": "Seoul",
  "region": "Seoul",
  "country": "KR",
  "loc": "37.5660,126.9784",
  "org": "AS16509 Amazon.com, Inc.",
  "postal": "03186",
  "timezone": "Asia/Seoul",
  "readme": "https://ipinfo.io/missingauth"
}[root@ip-10-0-0-206 ~]# curl ipinfo.io/3.36.61.191
{
  "ip": "3.36.61.191",
  "hostname": "ec2-3-36-61-191.ap-northeast-2.compute.amazonaws.com",
  "city": "Seoul",
  "region": "Seoul",
  "country": "KR",
  "loc": "37.5660,126.9784",
  "org": "AS16509 Amazon.com, Inc.",
  "postal": "03186",
  "timezone": "Asia/Seoul",
  "readme": "https://ipinfo.io/missingauth"
}[root@ip-10-0-0-206 ~]# curl ipinfo.io/loc
37.5660,126.9784


# IP에 대한 정보 확인
[root@ip-10-0-0-206 ~]# curl https://json.geoiplookup.io/3.36.61.191
{
    "ip": "3.36.61.191",
    "isp": "Amazon.com, Inc.",
    "org": "Amazon Technologies Inc",
    "hostname": "ec2-3-36-61-191.ap-northeast-2.compute.amazonaws.com",
    "latitude": 37.5665,
    "longitude": 126.978,
    "postal_code": "",
    "city": "Seoul",
    "country_code": "KR",
    "country_name": "South Korea",
    "continent_code": "AS",
    "continent_name": "Asia",
    "region": "Seoul",
    "district": "",
    "timezone_name": "Asia\/Seoul",
    "connection_type": "Corporate",
    "asn_number": 16509,
    "asn_org": "Amazon.com, Inc.",
    "asn": "AS16509 - Amazon.com, Inc.",
    "currency_code": "KRW",
    "currency_name": "South Korean Won",
    "success": true,
    "premium": false
}[root@ip-10-0-0-206 ~]# curl -s https://json.geoiplookup.io/13.125.27.235 | jq '.city'
"Seoul"


# 외부와 통신 경로 정보 확인
traceroute www.google.com
traceroute www.google.com -n
traceroute www.google.com -n -q 10

 


퍼블릭 서브넷 통신 흐름

 

퍼블릭 서브넷에서 외부 인터넷 구간과 통신 흐름

① 퍼블릭 서브넷의 퍼블릭 EC2 인스턴스가 외부 인터넷 구간과 통신하기 위해 데이터를 가상 라우터로 전달(퍼블릭 IP 사용)

② 가상 라우터는 퍼블릭 라우팅 테이블을 참고하여 인터넷 게이트웨이로 향하는 라우팅 경로 확인

③ 가상 라우터는 인터넷 게이트웨이로 데이터를 전달하고 인터넷 구간으로 넘어감

④ 인터넷 구간을 통해 사용자에게 전달

 

 


인터넷 게이트웨이를 통한 외부 접속 과정 설명

 

① 내부 인스턴스(10.0.0.10)에서 외부 웹서버(60.1.1.1)로 HTTP 접속을 시도. 이때 출발지 IP를 10.0.0.10으로 하여 요청 트래픽을 생성하여 보냄

② 인터넷 게이트웨이는 출발지 IP를 확인하고 자신이 가지고 있는 NAT 정보에 의해서 출발지 IP를 50.1.1.1로 변경하는 NAT 동작을 수행

③ 외부 웹서버(60.1.1.1)에서 요청을 처리하고 응답 트래픽을 보냄. 되돌아오는 트래픽이므로 출발지 IP와 목적지 IP는 바뀜.

④ 인터넷 게이트웨이는 다시 한번 NAT 정보에 의해서 목적지 IP를 50.1.1.1에서 10.0.0.10으로 변경하고, VPC 내부로 전달하여 최종적으로 내부 인스턴스(10.0.0.10)로 도달.