Тема: Налаштування хмарної мережевої інфраструктури.
Створення та конфігурація Virtual Cloud Network (VCN) в Oracle Cloud або Virtual Private Cloud (VPC) в AWS; налаштування підмереж, таблиць маршрутизації та Internet Gateway; конфігурація груп безпеки та мережевих ACL; тестування зв’язності між ресурсами.
Мета: Набути практичні навички створення ізольованої хмарної мережі, налаштування підмереж і правил безпеки, а також тестування мережевої зв’язності між хмарними ресурсами.
Технологічний стек:
Always Free ресурси Oracle Cloud: 2 AMD Compute VM (1 OCPU, 1 GB RAM кожна), 200 GB Block Volume, 1 VCN з необмеженою кількістю підмереж — назавжди, без обмеження 12 місяців.
10.0.0.0/1610.0.1.0/24) та приватну (10.0.2.0/24)lab03-vcn10.0.0.0/16Після створення ви побачите деталі VCN. Запишіть OCID VCN — він знадобиться пізніше.
lab03-igwlab03-public-rt0.0.0.0/0lab03-igwlab03-public-slДодайте Ingress Rules (вхідні правила):
| Stateless | Protocol | Source CIDR | Port | Призначення |
|---|---|---|---|---|
| No | TCP | 0.0.0.0/0 |
22 | SSH |
| No | TCP | 0.0.0.0/0 |
80 | HTTP |
| No | ICMP | 0.0.0.0/0 |
Type 3, Code 4 | MTU discovery |
| No | ICMP | 10.0.0.0/16 |
Type 8 | Ping у межах VCN |
0.0.0.0/0 All Trafficlab03-public-subnet10.0.1.0/24lab03-public-rtlab03-public-sllab03-private-subnet10.0.2.0/24vm-publiclab03-vcn → lab03-public-subnet~/.ssh/id_rsa.pub)vm-privatelab03-vcn → lab03-private-subnetПідключення до public VM через SSH:
ssh -i ~/.ssh/id_rsa opc@<PUBLIC_IP_vm-public>
Тест зв’язності між VM (з public до private):
# На vm-public — перевірити ping до private VM
ping 10.0.2.x # IP вашої приватної VM
# Перевірити маршрути
ip route show
# Спробувати SSH до приватної VM через публічну (jump host)
ssh -J opc@<PUBLIC_IP> opc@<PRIVATE_IP>
Перевірка Security List (що SSH із зовні приходить):
# З вашого ПК перевірити доступність порту 22
nc -zv <PUBLIC_IP> 22
nc -zv <PUBLIC_IP> 80 # має бути closed, бо HTTP-сервер не запущений
В Oracle Cloud Console:
lab03-vcn → вкладка TopologyЯкщо немає можливості зареєструватись у хмарі — можна симулювати AWS VPC локально.
# Потрібен Docker Desktop (https://www.docker.com/products/docker-desktop)
# Встановлюємо пакети LocalStack, awscli та обгортку awslocal (з прапорцем --user для уникнення помилок прав доступу)
pip install --user awscli localstack awscli-local
# Запуск LocalStack у Docker
docker run --rm -d \
-p 4566:4566 \
-e SERVICES=ec2,route53 \
--name localstack \
localstack/localstack
Важливо для Windows (PowerShell): Якщо після встановлення команди
awsабоawslocalне розпізнаються, переконайтеся, що шлях до скриптів Python додано у змінні середовищаPATH.Щоб додати шлях у
PATH, виконайте цю команду (але зверніть увагу: замінітьteachна ім’я вашого користувача Windows, аPython311на вашу версію Python, якщо вона відрізняється):[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Users\teach\AppData\Roaming\Python\Python311\Scripts", "User"); $env:Path += ";C:\Users\teach\AppData\Roaming\Python\Python311\Scripts"
Далі необхідно налаштувати фіктивні облікові дані, оскільки AWS CLI вимагає їх наявності:
aws configure
# Введіть наступні значення, коли інструмент попросить:
# AWS Access Key ID: test
# AWS Secret Access Key: test
# Default region name: us-east-1
# Default output format: json
Використовуйте команду awslocal замість aws. Вона автоматично перенаправлятиме запити до локального LocalStack-контейнера.
# Створити VPC
awslocal ec2 create-vpc --cidr-block 10.0.0.0/16
# Створити підмережу (змініть <VPC_ID> на отриманий вище)
awslocal ec2 create-subnet --vpc-id <VPC_ID> --cidr-block 10.0.1.0/24
# Створити Internet Gateway
awslocal ec2 create-internet-gateway
# Прикріпити IGW до VPC (змініть на свої <VPC_ID> та <IGW_ID>)
awslocal ec2 attach-internet-gateway --vpc-id <VPC_ID> --internet-gateway-id <IGW_ID>
# Переглянути стан VPC та підмереж
awslocal ec2 describe-vpcs
awslocal ec2 describe-subnets
Створення подібної віртуальної мережі локально має величезне значення для сучасних інженерів (DevOps та Backend):
Для перевірки роботи нашої мережі, ми можемо створити віртуальний сервер (EC2) та помістити його в конкретну створену нами підмережу:
# 1. Знаходимо ID нашої підмережі (SubnetId) з попереднього виводу (наприклад: subnet-fdb77180834222214)
# 2. Запускаємо віртуальну машину (t2.micro) всередині нашої підмережі
awslocal ec2 run-instances --image-id ami-000001 --count 1 --instance-type t2.micro --subnet-id <ВАШ_SUBNET_ID>
Очікувана відповідь від LocalStack (фрагмент):
```json
...
"InstanceId": "i-a4064262069363936",
"ImageId": "ami-000001",
"State": {
"Code": 0,
"Name": "pending"
},
...
"SubnetId": "subnet-fdb77180834222214",
"VpcId": "vpc-523f98001c2638213",
"PrivateIpAddress": "10.0.1.4"
...
Що означає ця відповідь:
InstanceId — ідентифікатор нашого нового віртуального сервера.State (pending) — статус сервера: він щойно почав запускатися і буде доступний за кілька секунд.VpcId та SubnetId — LocalStack розмістив сервер рівно у тій мережі та підмережі, яку ми створили раніше.PrivateIpAddress (10.0.1.4) — локальний DHCP-сервер у нашій VPC автоматично видав віртуальній машині вільну приватну IP-адресу з діапазону 10.0.1.0/24.awslocal ec2 describe-instances
### Приклад: Налаштування доступу до Інтернету для нашої підмережі (Public Subnet)
У попередніх кроках ми створили `VPC`, Підмережу (`Subnet`) та Інтернет-шлюз (`Internet Gateway`). Але зараз наша підмережа "приватна" — з неї немає виходу в Інтернет.
Щоб зробити підмережу "публічною" (наприклад, щоб наш створений EC2-сервер міг завантажувати оновлення), нам потрібно налаштувати **Таблицю маршрутизації (Route Table)**. Це типова задача для хмарного інженера:
```bash
# 1. Створюємо нову таблицю маршрутизації для нашої VPC
awslocal ec2 create-route-table --vpc-id <ВАШ_VPC_ID>
# З відповіді копіюємо RouteTableId (наприклад: rtb-0123456789abcdef0)
# 2. Додаємо маршрут, який направляє весь невідомий трафік (0.0.0.0/0) до Інтернет-шлюзу (який ми створили раніше)
awslocal ec2 create-route \
--route-table-id <ВАШ_ROUTE_TABLE_ID> \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id <ВАШ_IGW_ID>
# Зверніть увагу: для Windows (PowerShell) запишіть команду вище в один рядок:
# awslocal ec2 create-route --route-table-id <ВАШ_ROUTE_TABLE_ID> --destination-cidr-block 0.0.0.0/0 --gateway-id <ВАШ_IGW_ID>
# 3. Прив'язуємо цю таблицю маршрутизації до нашої підмережі
awslocal ec2 associate-route-table \
--route-table-id <ВАШ_ROUTE_TABLE_ID> \
--subnet-id <ВАШ_SUBNET_ID>
# Для Windows (PowerShell):
# awslocal ec2 associate-route-table --route-table-id <ВАШ_ROUTE_TABLE_ID> --subnet-id <ВАШ_SUBNET_ID>
Цей конкретний приклад показує, як за допомогою декількох команд ми будуємо складну мережеву топологію: ми щойно перетворили ізольовану частину мережі на публічну зону (DMZ), куди тепер можна безпечно виставляти веб-сервери, залишаючи бази даних в інших (приватних) підмережах цієї ж VPC.
0.0.0.0/0 у таблиці маршрутизації. Що він означає?/24?ip route show з vm-publiclab03.md