
Меня зовут Олег Юрчик, я — старший разработчик в компании Cloud.ru. Интернет сегодня — это не только крупные корпорации и облачные платформы. Под поверхностью глобальной сети скрыты базовые механизмы, которые вполне доступно воспроизвести на практике. В этой статье мы сначала кратко пройдёмся по истории и устройству Интернета, а затем шаг за шагом создадим собственную мини-сеть с собственными DNS-серверами, центром сертификации и веб-сервисами.
Происхождение сети Интернет
История Интернет уходит корнями в 1969 год, когда DARPA при Минобороны США запустила исследовательский проект ARPANET. Первые узлы сети располагались в университетах UCLA, UCSB, исследовательском центре SRI и Университете Юты. Идея децентрализованной системы с пакетной коммутацией была предложена Полом Бараном и Дональдом Дэвисом. Пакеты разбивались на мелкие фреймы, которые самостоятельно находили оптимальный маршрут до получателя. В 1983 году внедрение протоколов TCP/IP объединило разрозненные сети в единую «сеть сетей», а изобретение World Wide Web сделало её доступной широкой аудитории.

Разница между «интернет» и «Интернет»
Интернет (с заглавной) — это уникальная глобальная сеть, наследница ARPANET, объединяющая компьютеры по всему миру по стандартам TCP/IP.
интернет (со строчной) — общее название для любой большой сети, работающей по тем же принципам (например, «корпоративный интернет» или «интернет вещей»).

Принципы работы сети
Цели, стоявшие перед авторами протоколов TCP/IP:
- Обеспечить устойчивость сети при выходе узлов из строя.
- Рационально использовать ограниченные каналы связи.
- Гарантировать совместимость разных вычислительных систем.
- Сохранять целостность и доставляемость данных при изменении топологии.
- Обеспечить надёжную и корректную доставку пакетов.
Каждый пакет в TCP/IP не имеет фиксированного маршрута. Узлы принимают решение о следующей пересылке на основании локальных таблиц маршрутов. В случае отказа одного из узлов, пакеты перенаправляются по альтернативным путям, что обеспечивает высокую живучесть сети.
Для более глубокого понимания работы TCP/IP-стека рекомендуем посмотреть видео от AlekOS.

Благодаря равноправию узлов каждый хост не просто отправляет и получает данные, но и может ретранслировать трафик других участников. За более чем полвека принципы децентрализации и отказоустойчивости TCP/IP остались прежними. Понимание этих механизмов — ключ к созданию собственной изолированной или частично автономной сети.
Наглядную динамику разрастания сети можно увидеть здесь.
Современный Интернет
Сейчас большинство пользователей проводят время в экосистемах крупных IT-компаний: почта Google, соцсети VK и Telegram, облачные хранилища. Малые проекты и независимые сайты отодвинулись на периферию, а порог для запуска собственного ресурса серьёзно вырос. Ранее достаточно было настроить веб-сервер Apache, а теперь необходим целый комплекс шагов для публикации надёжного и безопасного сервиса.

Интерактивную карту сети смотрите на internet-map.net.
Что нужно для собственного сервиса
Для запуска сайта или веб-приложения сегодня необходимы:
- Надёжный канал связи с постоянной пропускной способностью.
- Статический IP-адрес, который провайдеры зачастую предлагают за дополнительную плату.
- Доменное имя, без которого пользователи запутаются в числовых адресах.
- TLS-сертификат для HTTPS — без него современные браузеры блокируют соединение.
Эти задачи берут на себя сторонние сервисы:
- Хостинг-провайдеры — предлагают серверы, каналы и IP-адреса «под ключ».
- Доменные регистраторы — регистрируют и продлевают домены.
- Центры сертификации — выпускают TLS-сертификаты (например, Let’s Encrypt предлагает бесплатные сертификаты с автопродлением).
Однако если глобальные DNS или CA окажутся недоступны, сервисы выйдут из строя или часть пользователей потеряет доступ из-за кэширования. Именно поэтому крупные организации устанавливают собственные корневые сертификаты, чтобы в критических ситуациях сохранять работоспособность сервисов без компромиссов.

Безопасность корневого сертификата Минцифры
Установка корневого сертификата Минцифры РФ не даёт прямого доступа к HTTPS-трафику, но позволяет выпускать доверенные браузерам сертификаты для любых доменов. В сочетании с контролем трафика со стороны Роскомнадзора это создаёт риск «человек посередине» и тотального мониторинга, поэтому внедрение таких решений требует взвешенного подхода.
Создаём «суверенный» сегмент сети

Можно ли обойтись без внешнего хостинга, DNS-регистраторов и публичных CA? Частично — да. Полностью стать собственным провайдером крайне сложно, но мы можем арендовать виртуальную машину с публичным IP, развернуть на ней собственные DNS и CA, а также прокси-сервер и приложение.
«Простой» гайд по тому, как стать интернет-провайдером, можно найти здесь.
Подготовка сервера
Рекомендуется использовать Ubuntu Server и Docker. Создайте файл .env:
# Домен
DOMAIN=example.com
# Публичный IP
PUBLIC_IP=123.45.67.89
# Название CA
CA_NAME="My CA"
# Пароль CA
CA_PASSWORD=P@ssw0rd
# E-mail админа
ADMIN_EMAIL=admin@example.com
1. Настройка DNS
DNS переводит доменные имена в IP-адреса.
Остановите systemd-resolved и замените /etc/resolv.conf:
systemctl disable --now systemd-resolved
rm /etc/resolv.conf
tee /etc/resolv.conf <<EOF
nameserver 127.0.0.1
search lan
EOF
Создайте сеть Docker и volume:
docker network create internet
docker volume create ca-certificates-data
Файл dns.yaml:
version: "3.8"
services:
dnsmasq:
image: andyshinn/dnsmasq:2.83
hostname: dns.${DOMAIN}
networks:
- internet
ports:
- "53:53/udp"
- "53:53/tcp"
command:
- "--domain-needed"
- "--bogus-priv"
- "--expand-hosts"
- "--server=1.1.1.1"
- "--server=8.8.8.8"
- "--address=/.${DOMAIN}/${PUBLIC_IP}"
networks:
internet:
external: true
Запуск:
docker compose -f dns.yaml up -d
2. Установка собственного CA
Центр сертификации выпускает TLS-сертификаты и формирует доверие в сети.
Файл ca.yaml:
version: "3.8"
services:
step-ca:
image: smallstep/step-ca:0.28.4
hostname: ca.${DOMAIN}
dns:
- dns
environment:
DOCKER_STEPCA_INIT_NAME: ${CA_NAME}
DOCKER_STEPCA_INIT_DNS_NAMES: ca.${DOMAIN}
DOCKER_STEPCA_INIT_PASSWORD: ${CA_PASSWORD}
DOCKER_STEPCA_INIT_ACME: "true"
networks:
- internet
volumes:
- ca-certificates-data:/home/step
volumes:
ca-certificates-data:
external: true
networks:
internet:
external: true
Запуск:
docker compose -f ca.yaml up -d
3. Обратный прокси на Traefik
Файл gateway.yaml:
version: "3.8"
services:
traefik:
image: traefik:v3.5
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- app-certificates-data:/certificates
- ca-certificates-data:/ca:ro
networks:
- internet
ports:
- 80:80
- 443:443
entrypoint:
- "/bin/sh"
- "-c"
- |
cp /ca/certs/root_ca.crt /usr/local/share/ca-certificates/ca-root.crt &&
chmod 644 /usr/local/share/ca-certificates/ca-root.crt &&
update-ca-certificates &&
exec traefik "$$@"
command:
- "--log.level=INFO"
- "--providers.docker=true"
- "--providers.docker.network=internet"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.web.http.redirections.entrypoint.permanent=true"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.ca.acme.httpchallenge=true"
- "--certificatesresolvers.ca.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.ca.acme.email=${ADMIN_EMAIL}"
- "--certificatesresolvers.ca.acme.storage=/certificates/ca-acme.json"
- "--certificatesresolvers.ca.acme.caserver=https://ca.${DOMAIN}:9000/acme/acme/directory"
- "--serversTransport.rootCAs=/ca/certs/root_ca.crt"
volumes:
ca-certificates-data:
external: true
networks:
internet:
external: true
Запуск:
docker compose -f gateway.yaml up -d
4. Разворачиваем веб-сервис
В примере — OpenSpeedTest. Файл speed.yaml:
version: "3.8"
services:
openspeedtest:
image: openspeedtest/latest:v0.0.1
networks:
- internet
labels:
- "traefik.enable=true"
- "traefik.docker.network=internet"
- "traefik.http.services.openspeedtest-app.loadbalancer.server.port=3000"
- "traefik.http.routers.openspeedtest-app.rule=Host(`speed.${DOMAIN}`)"
- "traefik.http.routers.openspeedtest-app.entrypoints=websecure"
- "traefik.http.routers.openspeedtest-app.tls.certresolver=ca"
networks:
internet:
external: true
Запуск:
docker compose -f speed.yaml up -d
5. Настройка клиента
Чтобы устройства использовали ваш DNS и CA:
- В Windows — в свойствах адаптера IPv4 укажите ваш сервер в «Предпочитаемый DNS».
- В Linux/MacOS — в
/etc/resolv.confдобавьте строкуnameserver IP_вашего_DNS, а в качестве резервного укажите, например, 1.1.1.1.
При первом заходе на https://speed.${DOMAIN} браузер выдаст предупреждение о недоверенном сертификате. Чтобы исправить это, скопируйте корневой сертификат из контейнера:
docker cp ca-step-ca-1:/home/step/certs/root_ca.crt ~/root_ca.crt
Установите сертификат в систему:
- Windows/MacOS — откройте файл и следуйте подсказкам.
- Debian/Ubuntu:
sudo cp root_ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates - RHEL/CentOS:
sudo cp root_ca.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust extract
Итог
В результате у вас получился автономный сегмент сети с собственными:
- DNS-серверами;
- Центром сертификации;
- Обратным прокси на Traefik;
- Рабочим веб-сервисом с HTTPS.
Этот пример иллюстрирует принципы работы Интернета «под капотом» и показывает, как легко применить их в собственных проектах.


