В чем разница между публичным и приватным IP-адресом?

«В чем разница между публичным и приватным IP-адресом?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Публичный (глобальный) IP-адрес:

  • Уникален в глобальной сети Интернет.
  • Маршрутизируем — роутеры в Интернете знают, как доставить пакет на этот адрес.
  • Выделяется провайдером (ISP) или облачным хостингом (AWS, GCP, Azure).
  • Прямой доступ из Интернета (требует настройки безопасности: Firewall, Security Groups).

Приватный (внутренний) IP-адрес:

  • Используется внутри частных сетей (домашняя сеть, офис, облачная VPC).
  • Не маршрутизируется в публичном Интернете. Пакеты с таким адресом отбрасываются магистральными роутерами.
  • Определены стандартами RFC 1918:
    • 10.0.0.010.255.255.255 (10.0.0.0/8)
    • 172.16.0.0172.31.255.255 (172.16.0.0/12)
    • 192.168.0.0192.168.255.255 (192.168.0.0/16)
  • Может повторяться в разных частных сетях.

Связующее звено: NAT (Network Address Translation) Для выхода в Интернет устройства с приватными адресами используют NAT, обычно на граничном шлюзе (роутер, облачный NAT Gateway). NAT преобразует приватный адрес в публичный.

DevOps-практика:

  1. Облачные среды: В AWS/Azure/GCP вы создаете VPC/VNet с приватными подсетями. Сервисы типа БД, бэкенд-сервисов размещаются там. Доступ наружу или извне организуется через:

    • NAT Gateway (для исходящего трафика из приватных подсетей).
    • Load Balancer (публичный или внутренний) для входящего трафика к сервисам.
    • Bastion Host / Jump Server с публичным IP для безопасного доступа по SSH к приватным инстансам.
  2. Безопасность: Группы безопасности (Security Groups) и сетевые ACL настраиваются отдельно для публичных и приватных подсетей, минимизируя поверхность атаки.

  3. Пример настройки iptables для SNAT (исходящий трафик):

    # Разрешаем форвардинг пакетов
    sysctl -w net.ipv4.ip_forward=1
    # Маскарадинг всего трафика с интерфейса eth1 (внутренняя сеть) на eth0 (внешняя)
    iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE