Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Развернутое объяснение CIDR для инженера DevOps
CIDR (Classless Inter-Domain Routing) — это метод IP-адресации, который заменил устаревшую классовую систему (Class A, B, C) и решил две ключевые проблемы: истощение IPv4-адресов и рост таблиц маршрутизации. Как DevOps-инженер с опытом, я использую CIDR ежедневно для проектирования сетевой инфраструктуры в облаках, настройки security groups, VPC и Kubernetes networking.
Основная концепция и синтаксис
Вместо фиксированных классов CIDR использует гибкую маску переменной длины (Variable Length Subnet Mask - VLSM), записываемую через слэш. Например:
192.168.1.0/24— 254 хоста (маска 255.255.255.0)10.0.0.0/16— 65534 хоста (маска 255.255.0.0)172.16.0.0/12— 1+ миллион адресов
Ключевые преимущества CIDR:
- Экономия адресного пространства — можно выделить ровно столько адресов, сколько нужно
- Иерархическая маршрутизация — агрегация маршрутов (route summarization)
- Гибкое разделение на подсети (subnetting) и объединение (supernetting)
Практическое применение в DevOps
1. Облачные сети (AWS VPC, Azure VNet, GCP VPC)
При создании VPC указываем CIDR-блок:
# Создание VPC в AWS CLI
aws ec2 create-vpc --cidr-block 10.0.0.0/16
# Разделение на подсети
Public Subnet: 10.0.1.0/24 # Для балансировщиков
Private Subnet: 10.0.2.0/24 # Для application servers
Data Subnet: 10.0.3.0/24 # Для баз данных
2. Kubernetes Networking
# Конфигурация Calico CNI с CIDR
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: default-pool
spec:
cidr: 10.244.0.0/16
blockSize: 26 # Размер подсети для каждого узла
natOutgoing: true
3. Security Groups и Firewall Rules
# Terraform пример для AWS Security Group
resource "aws_security_group" "app" {
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["10.0.0.0/8", "192.168.0.0/16"] # Разрешаем только внутренние сети
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["203.0.113.0/24"] # Только с конкретной подсети
}
}
Расчёт подсетей: основные формулы
- Количество адресов в подсети = 2^(32 - префикс)
- Количество usable hosts = 2^(32 - префикс) - 2 (минус network и broadcast)
- Пример расчёта в Python:
import ipaddress
def subnet_info(cidr):
net = ipaddress.ip_network(cidr, strict=False)
return {
"network": str(net.network_address),
"broadcast": str(net.broadcast_address),
"hosts": list(net.hosts())[:5], # Первые 5 адресов
"total_addresses": net.num_addresses,
"usable_hosts": net.num_addresses - 2
}
print(subnet_info("10.0.0.0/28"))
Пример из реальной практики
При миграции в AWS нужно было создать изолированную среду для трех команд разработки. Использовал:
10.0.0.0/8— весь адресный блок VPC10.1.0.0/16,10.2.0.0/16,10.3.0.0/16— по подсети на команду- В каждой
/16разбил на/24подсети для разных типов сервисов 10.254.0.0/16— выделил под shared services (VPN, monitoring)
Важные нюансы для DevOps:
- При работе с Kubernetes нужно избегать конфликтов CIDR Pod сети с CIDR VPC
- В Docker по умолчанию используется
172.17.0.0/16— может конфликтовать с корпоративными сетями - Бесклассовая маршрутизация требует правильной настройки BGP в гибридных облаках
Инструменты для работы с CIDR
# Утилита ipcalc для расчётов
ipcalc 192.168.1.0/26
# Проверка принадлежности адреса к подсети
$ python3 -c "import ipaddress; print('192.168.1.5' in ipaddress.ip_network('192.168.1.0/24'))"
True
# Генерация подсетей из большого блока
$ nmap -sL -n 10.0.0.0/29 | grep 'Nmap scan report'
CIDR — фундаментальная технология, без которой невозможно современное DevOps. Понимание принципов бесклассовой адресации критически важно для проектирования отказоустойчивых, безопасных и масштабируемых инфраструктур как в облаке, так и в on-premise средах. Особенно важно при работе с multi-cloud стратегиями, где нужно избегать overlapping IP ranges между разными провайдерами.