Когда вы настраиваете локальную сеть, поднимаете сервер или пишете сетевое приложение на Python, вам будут встречаться IP-адреса. Домашняя Wi-Fi сеть, корпоративная инфраструктура, облачные сервисы — везде работают одни и те же принципы. Проблема в том, что в интернете много устаревшей или противоречивой информации. Эта статья собрана из официальных стандартов (RFC), документации IANA и лучших практик, которые действуют именно сейчас, в 2025 году.
Главное, что нужно помнить: на исходе IPv4 (публичные адреса кончились в 2011 году), а IPv6 медленно набирает обороты (43% трафика по данным Google на начало 2025). Знание обеих систем — критично.
Текущее состояние: IPv4 исчерпан, IPv6 входит в силу
IPv4 полностью исчерпана с точки зрения новых выделений. Последний пул IANA был разделён между пятью региональными регистратурами (RIR) 3 февраля 2011 года. Теперь адреса доступны только через вторичный рынок (дорого) или через переработку старых блоков.
На конец 2024 года в системе RIR осталось всего 4,6 млн свободных IPv4 адресов, в основном в APNIC (3,6 млн) и AFRINIC (990К). Для сравнения: всего в мире ~4,3 млрд IPv4 адресов. Это означает истощение на 99,9%.
Одновременно IPv6 растёт экспоненциально. По прогнозам, рынок IPv6 вырастет с $6,77 млрд в 2025 году до $27,38 млрд к 2030 году (CAGR 32,2%). Но принятие остаётся медленным: США — 53%, Франция — 78%, мобильный сегмент опережает Enterprise.
Детальный разбор IP-адресации
1. IPv4: основной протокол (32 бита)
Структура: четыре октета (по 8 бит), записываются десятичной точечной нотацией: 192.168.1.1
Три блока приватных адресов по RFC 1918:
Важно: эти адреса не маршрутизируются в интернете. Они локальны по определению. Если вы отправите пакет с источником 10.0.0.1 в интернет, он будет заблокирован на границе сети.
2. CIDR нотация: как узнать размер подсети
CIDR (Classless Inter-Domain Routing) — это способ записать маску как количество бит сети. Формат: адрес/префикс
- Пример: 192.168.1.0/24
- /24 — первые 24 бита сеть, остальные 8 бит — хосты.
- В двоичной форме маска: 11111111.11111111.11111111.00000000
- В десятичной: 255.255.255.0
- Количество хостов: 2(32−24)−2=2542(32−24)−2=254 (минус 2: сеть и трансляция)
Таблица CIDR для суммативных размеров подсетей:
Формула: Хостов = 2(32−префикс)−22(32−префикс)−2
3. Специальные адреса и зарезервированные блоки
По RFC 5735, существует множество адресов, которые нельзя использовать как обычные хосты:
Ключевой вывод: loopback (127.0.0.1) и link-local (169.254.x.x) не должны переходить через маршрутизатор.
4. IPv6: 128-битная архитектура (будущее)
IPv6 решает проблему исчерпания адресов радикально: 2128≈3.4×10382128≈3.4×1038 уникальных адресов (на каждого жителя Земли — больше адресов, чем звёзд на небе).
Формат IPv6: восемь групп по 4 hex-символа, разделённые двоеточием: 2001:0db8:0000:0000:0000:ff00:0042:8329
Сокращение:
- Нулевые группы подряд можно заменить на :: (только один раз!)
- Пример: 2001:db8::ff00:42:8329
Основные типы адресов IPv6:
Важный нюанс по RFC 4193: ULA имеет стандартный префикс fc00::/7, но 8-й бит (L-бит) обязан быть 1, что даёт fd00::/8 как единственный используемый диапазон в настоящее время.
IPv6 subnetting: типичный размер подсети — /64. Это не совпадение: первые 64 бита — сетевой адрес, вторые 64 — interface ID (часто MAC-адрес хоста).
Пошаговые инструкции
Задача 1: Разбить 192.168.0.0/24 на три подсети для разных отделов
Требования:
- Отдел А: 100 хостов
- Отдел Б: 50 хостов
- Отдел В: 20 хостов
Решение (VLSM — Variable Length Subnet Mask):
- Сортируем по размеру: 100 → 50 → 20
- Для 100 хостов: нужно 2n≥1022n≥102, т.е. n=7, подсеть /25 (128 адресов, 126 юз.)
- 192.168.0.0/25 (192.168.0.0 — 192.168.0.127)
- Для 50 хостов: нужно 2n≥522n≥52, т.е. n=6, подсеть /26 (64 адреса, 62 юз.)
- 192.168.0.128/26 (192.168.0.128 — 192.168.0.191)
- Для 20 хостов: нужно 2n≥222n≥22, т.е. n=5, подсеть /27 (32 адреса, 30 юз.)
- 192.168.0.192/27 (192.168.0.192 — 192.168.0.223)
- Остаток: 192.168.0.224/27 (свободное место на будущее)
Linux/macOS команда (ipcalc):
ipcalc 192.168.0.0 -s 100 50 20
Вывод:
Address: 192.168.0.0 11000000.10101000.00000000. 00000000
Netmask: 255.255.255.0 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
Network: 192.168.0.0/24
HostMin: 192.168.0.1
HostMax: 192.168.0.254
Broadcast: 192.168.0.255
Hosts/Net: 254 Class C, Private Internet
Subnets after cutting /25 into /27, /27, /28...
[детальный вывод подсетей]
🔖Дорогие гости и подписчики канала. Если наши материалы приносят вам пользу, вы всегда можете поддержать команду символическим переводом. Любая помощь мотивирует писать для Вас больше полезного и качественного контента безо всяких подписок.🙏🤝🙏🤝🙏
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по QR-коду через СБП. Быстро, безопасно и без комиссии.(Александр Г.)
С уважением, Команда "Т.Е.Х.Н.О Windows & Linux".
Задача 2: Настроить firewall ACL для блокировки bogon-адресов
Bogon-адреса — это адреса, которые не должны появляться в исходящем трафике из Интернета:
ip access-list extended BOGON_FILTER
deny ip 10.0.0.0 0.255.255.255 any ! RFC1918
deny ip 172.16.0.0 0.15.255.255 any ! RFC1918
deny ip 192.168.0.0 0.0.255.255 any ! RFC1918
deny ip 0.0.0.0 255.255.255.255 any ! This network
deny ip 127.0.0.0 0.255.255.255 any ! Loopback
deny ip 169.254.0.0 0.0.255.255 any ! Link-local
deny ip 224.0.0.0 15.255.255.255 any ! Multicast
deny ip 240.0.0.0 15.255.255.255 any ! Reserved
permit ip any any ! Остальное разрешаем
interface GigabitEthernet0/0/0
ip access-group BOGON_FILTER in
Безопасность, риски и миграция
Риск 1: NAT exhaustion (исчерпание транляции портов)
Проблема: при NAT один публичный IP может обслуживать множество приватных адресов через различные порты. Когда все порты заняты (~65K на IP), новые соединения падают.
Решение по RFC 6598: использовать Carrier-Grade NAT (CGN) блок 100.64.0.0/10 для ISP. Это позволяет масштабировать:
import ipaddress
cgn_range = ipaddress.ip_network('100.64.0.0/10')
test_ip = ipaddress.ip_address('100.80.0.1')
if test_ip in cgn_range:
print("⚠️ Это CGN адрес, может быть shared между пользователями ISP")
Риск 2: Утечка приватных адресов через DNS
Проблема: если приватный адрес попадёт в публичный DNS, он заполнит кеши и создаст путаницу.
Защита:
- Настроить nxdomain для приватных диапазонов в публичном DNS
- Использовать split-horizon DNS: приватные адреса только для внутреннего DNS
dig @8.8.8.8 internal-server.example.com # Должен вернуть NXDOMAIN
Миграция к IPv6
Сценарий: постепенное внедрение IPv6 на существующей IPv4 инфраструктуре.
Этапы:
- Dual-stack (IPv4 + IPv6 одновременно)
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
ip addr show
- Выделить IPv6 подсети (RFC 3177: рекомендуется /48 на организацию, /64 на сегмент)
- Сеть A: 2001:db8:1234:1::/64
- Сеть B: 2001:db8:1234:2::/64
- VPN link: 2001:db8:1234:ffff::/127
- 6to4-туннель (если ISP пока не поддерживает native IPv6)
Адрес: 2002:c0a8:0101::/48
Производительность: метрики, профилирование, узкие места
Метрика 1: утилизация адресного пространства
import ipaddress
network = ipaddress.ip_network('10.0.0.0/8')
total_hosts = 2 ** (32 - network.prefixlen) - 2
active_hosts = 1500000 # пример
utilization = (active_hosts / total_hosts) * 100
print(f"Утилизация: {utilization:.2f}%")
if utilization > 80:
print("⚠️ Требуется расширение адресного пространства!")
Инструменты диагностики
Windows:
ipconfig /all
nslookup example.com 8.8.8.8
pathping 8.8.8.8
route print
Linux/macOS:
ip addr show
ip route show
ping -c 4 8.8.8.8
traceroute 8.8.8.8
nmap -sn 192.168.1.0/24
whois 8.8.8.8
Типичная ошибка: неправильная маска подсети
from ipaddress import ip_address, ip_network
addr = ip_address('192.168.1.128')
subnet = ip_network('192.168.1.128/26', strict=False)
if addr in subnet:
print("✓ Адрес 192.168.1.128 в подсети", subnet)
Примеры кода и конфигов
Python: проверка IP в приватном диапазоне
import ipaddress
def is_private_ip(ip_string):
try:
ip = ipaddress.ip_address(ip_string)
return ip.is_private
except ValueError:
return None
print(is_private_ip('10.0.0.1')) # True
print(is_private_ip('192.168.1.1')) # True
print(is_private_ip('8.8.8.8')) # False
print(is_private_ip('127.0.0.1')) # True
print(is_private_ip('fe80::1')) # True
Python: расчёт CIDR из маски
def cidr_from_mask(subnet_mask):
mask = int(ipaddress.IPv4Address(subnet_mask))
return bin(mask).count('1')
print(cidr_from_mask('255.255.255.0')) # 24
print(cidr_from_mask('255.255.0.0')) # 16
print(cidr_from_mask('255.255.255.128'))# 25
cidr = 24
mask_int = (0xffffffff << (32 - cidr)) & 0xffffffff
mask_str = '.'.join(str((mask_int >> (8*i)) & 0xff) for i in [3,2,1,0])
print(mask_str) # 255.255.255.0
Bash: сканирование активных хостов в подсети
bash#!/bin/bash
SUBNET="192.168.1"
for i in {1..254}; do
ip="${SUBNET}.${i}"
(ping -W 1 -c 1 "$ip" > /dev/null 2>&1 && echo "$ip is UP") &
done
wait
Типичные ошибки и диагностика
Чек-лист применения
- Определить количество хостов на каждый сегмент (на сейчас и 5 лет вперёд)
- Выбрать приватный диапазон
- Спроектировать иерархию подсетей
- Документировать каждый сегмент
- Настроить ACL для bogon-фильтрации
- Зарезервировать адреса для спецустройств
- Готовить dual-stack IPv6
- Тестировать в изоляции до продакшена
- Мониторить утилизацию (оповещение при >85%)
Q&A: 7 главных вопросов
Вывод
IP-адресация — основа любой сети: от домашнего Wi-Fi до облачной инфраструктуры.
Главное:
- IPv4 исчерпана, но работает благодаря NAT и приватным диапазонам
- Три приватных блока RFC 1918 — must-know
- CIDR — современный стандарт
- IPv6 идёт в рост, без dual-stack уже не обойтись
- Основная защита сетей — фильтрация, firewall, ACL
Пользуйтесь шпаргалкой при проектировании сетей, настройке firewall и разработке приложений!
📺 Подпишись на T.E.X.H.O Windows & Linux
Если эта шпаргалка помогла — поделись ей с коллегой! Подписывайся на канал, где разбираем сложные темы в сетях, системной оптимизации и open-source инструментах. Каждую неделю — новое руководство, которое экономит время и деньги.
#IPадреса #IPv4 #IPv6 #CIDR #подсеть #маскасети #RFC1918 #приватныеадреса #маршрутизация #NAT #firewall #ACL #dualstack #ULA #linklocal #DNS #VLSM #сабнеттинг #сетевойадминистратор #Linux #Windows #сетевыетехнологии #кибербезопасность #DevOps #облачныесети #ISP #сетевоеобучение #routing #vpn #opensource #облачныесервисы