Добавить в корзинуПозвонить
Найти в Дзене

Настройка сетевой инфраструктуры. Общее положение

Данное руководство содержит последовательный план развертывания сети, состоящей из провайдера (ISP), головного офиса (HQ) и филиала (BR). Настройка включает в себя конфигурирование маршрутизаторов, коммутатора, серверов, развертывание Active Directory, сетевых служб (NFS, NTP), автоматизацию через Ansible и публикацию веб-ресурсов через Docker и Nginx. Первым делом необходимо задать корректные имена хостов (hostname), чтобы ориентироваться в инфраструктуре и обеспечить правильную работу доменных служб. Задаем имя хоста для сервера провайдера: Bash hostnamectl set-hostname isp; exec bash (Опционально) Для сохранения имени после перезагрузки в некоторых дистрибутивах проверяем конфигурационный файл: Bash nano /etc/sysconfig/network
# Меняем значение на: HOSTNAME=isp Переходим в режим конфигурации сетевого оборудования (EcoRouter) и задаем системные имена и доменную зону: Задаем полные доменные имена (FQDN) для будущих серверов приложений и контроллеров домена: Примечание: На следующих
Оглавление

Пошаговое руководство по настройке сетевой инфраструктуры, сервисов и безопасности

Данное руководство содержит последовательный план развертывания сети, состоящей из провайдера (ISP), головного офиса (HQ) и филиала (BR). Настройка включает в себя конфигурирование маршрутизаторов, коммутатора, серверов, развертывание Active Directory, сетевых служб (NFS, NTP), автоматизацию через Ansible и публикацию веб-ресурсов через Docker и Nginx.

Часть 1. Базовая настройка хостов (Имена и Сеть)

Первым делом необходимо задать корректные имена хостов (hostname), чтобы ориентироваться в инфраструктуре и обеспечить правильную работу доменных служб.

1.1. Настройка ISP

Задаем имя хоста для сервера провайдера:

Bash

hostnamectl set-hostname isp; exec bash

(Опционально) Для сохранения имени после перезагрузки в некоторых дистрибутивах проверяем конфигурационный файл:

Bash

nano /etc/sysconfig/network
# Меняем значение на: HOSTNAME=isp

1.2. Настройка маршрутизаторов HQ-RTR и BR-RTR

Переходим в режим конфигурации сетевого оборудования (EcoRouter) и задаем системные имена и доменную зону:

  • На HQ-RTR:Plaintextecorouter>enable
    ecorouter#configure terminal
    hq-rtr(config)#hostname hq-rtr
    hq-rtr(config)#ip domain-name au-team.irpo
    hq-rtr(config)#write memory
  • На BR-RTR:Выполняем аналогичные команды, но адаптируем под филиал:Plaintextecorouter>enable
    ecorouter#configure terminal
    br-rtr(config)#hostname br-rtr
    br-rtr(config)#ip domain-name au-team.irpo
    br-rtr(config)#write memory

1.3. Настройка серверов HQ-SRV и BR-SRV

-2

Задаем полные доменные имена (FQDN) для будущих серверов приложений и контроллеров домена:

  • На HQ-SRV:Bashhostnamectl set-hostname hq-srv.au-team.irpo; exec bash
    nano /etc/sysconfig/network # Указываем HOSTNAME=hq-srv.au-team.irpo
  • На BR-SRV:Bashhostnamectl set-hostname br-srv.au-team.irpo; exec bash
    nano /etc/sysconfig/network # Указываем HOSTNAME=br-srv.au-team.irpo
Примечание: На следующих этапах IP-адреса могут быть скорректированы в соответствии с вашей индивидуальной топологией (заданием).

Часть 2. Сетевые интерфейсы, VLAN, Маршрутизация и NAT

Построение сетевой логики: создание виртуальных сетей (VLAN), привязка их к физическим портам через сервисные экземпляры (service-instance), настройка статической маршрутизации и NAT для выхода в интернет.

2.1. Конфигурация интерфейсов на HQ-RTR

-3

Создаем виртуальные интерфейсы (VLAN) для сегментации сети штаб-квартиры:

Plaintext

hq-rtr(config)#interface vl100
hq-rtr(config-if)#description "VLAN 100"
hq-rtr(config-if)#ip address 192.168.100.1/27
hq-rtr(config-if)#exit

hq-rtr(config)#interface vl200
hq-rtr(config-if)#description "VLAN 200"
hq-rtr(config-if)#ip address 192.168.200.1/24
hq-rtr(config-if)#exit

hq-rtr(config)#interface vl999
hq-rtr(config-if)#description "VLAN 999"
hq-rtr(config-if)#ip address 192.168.99.1/29
hq-rtr(config-if)#exit

Привязываем созданные VLAN к физическому магистральному порту te1 с тегированием dot1q:

Plaintext

hq-rtr(config)#port te1

hq-rtr(config-port)#service-instance te1/vl100
hq-rtr(config-service-instance)#encapsulation dot1q 100 exact
hq-rtr(config-service-instance)#rewrite pop 1
hq-rtr(config-service-instance)#connect ip interface vl100
hq-rtr(config-service-instance)#exit

hq-rtr(config-port)#service-instance te1/vl200
hq-rtr(config-service-instance)#encapsulation dot1q 200 exact
hq-rtr(config-service-instance)#rewrite pop 1
hq-rtr(config-service-instance)#connect ip interface vl200
hq-rtr(config-service-instance)#exit

hq-rtr(config-port)#service-instance te1/vl999
hq-rtr(config-service-instance)#encapsulation dot1q 999 exact
hq-rtr(config-service-instance)#rewrite pop 1
hq-rtr(config-service-instance)#connect ip interface vl999
hq-rtr(config-service-instance)#exit

hq-rtr(config-port)#exit
hq-rtr(config)#write memory

2.2. Конфигурация Open vSwitch (SW)

Настройка виртуального или физического Linux-коммутатора для пропуска тегированного трафика от HQ-RTR.

Сначала подготавливаем сетевые интерфейсы в текстовом редакторе:

Bash

nano /etc/network/interfaces

Вносим структуру (активация интерфейсов без IP):

Plaintext

auto eth0
iface eth0 inet static
auto eth1
iface eth1 inet static
auto eth2
iface eth2 inet static

Затем создаем виртуальный мост и распределяем порты (eth0 — транк, остальные — в режиме access с тегом):

Bash

ovs-vsctl add-br sw
ovs-vsctl add-port sw eth0
ovs-vsctl set port eth0 trunks=100,200,999
ovs-vsctl add-port sw eth1
ovs-vsctl set port eth1 tag=100
ovs-vsctl add-port sw eth2
ovs-vsctl set port eth2 tag=200
ovs-vsctl show

Важно: После настройки коммутатора обязательно отправляем его в перезагрузку:

Bash

reboot

2.3. Конфигурация интерфейсов на BR-RTR

-4

В филиале сеть устроена проще — используется один нетегированный (untagged) сегмент:

Plaintext

br-rtr(config)#interface int1
br-rtr(config-if)#description "BR-Net"
br-rtr(config-if)#ip address 192.168.0.1/28
br-rtr(config-if)#exit

br-rtr(config)#port te1
br-rtr(config-port)#service-instance te1/int1
br-rtr(config-service-instance)#encapsulation untagged
br-rtr(config-service-instance)#connect ip interface int1
br-rtr(config-service-instance)#exit
br-rtr(config-port)#exit
br-rtr(config)#write memory

2.4. Настройка сетевых адресов на серверах (HQ-SRV и BR-SRV)

Настройку рекомендуется выполнять через удобный псевдографический интерфейс:

Bash

nmtui

Выставляем следующие параметры для сетевых карт:

  • HQ-SRV: IP 192.168.100.2/27, Шлюз 192.168.100.1, DNS 77.88.8.8. Перезапускаем интерфейс (выкл/вкл).
  • BR-SRV: IP 192.168.0.2/28, Шлюз 192.168.0.1, DNS 77.88.8.8. Перезапускаем интерфейс (выкл/вкл).

2.5. Настройка роутинга и NAT на стороне ISP

-5

Настраиваем адресацию на стороне провайдера (в сторону HQ — 172.16.1.1/28, в сторону BR — 172.16.2.1/28). Для обеспечения интернетом внутренних сетей настраиваем маскарадинг (MASQUERADE).

Bash

# Обновляем репозитории и ставим утилиту iptables
apt-get update && apt-get install -y iptables

# Включаем NAT для внешнего интерфейса (замените ens5 на ваш актуальный WAN-интерфейс)
iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE

# Сохраняем правила iptables и добавляем в автозапуск [cite: 4]
iptables-save >> /etc/sysconfig/iptables
systemctl enable --now iptables

2.6. Подключение маршрутизаторов к ISP и статические маршруты

Настраиваем внешние ("белые") стыковочные интерфейсы на маршрутизаторах и указываем дефолтный шлюз (0.0.0.0/0) в сторону ISP.

  • На HQ-RTR:Plaintexthq-rtr(config)#interface isp
    hq-rtr(config-if)#description "ISP"
    hq-rtr(config-if)#ip address 172.16.1.2/28
    hq-rtr(config-if)#exit

    hq-rtr(config)#ip route 0.0.0.0/0 172.16.1.1

    hq-rtr(config)#port te0
    hq-rtr(config-port)#service-instance te0/isp
    hq-rtr(config-service-instance)#encapsulation untagged
    hq-rtr(config-service-instance)#connect ip interface isp
    hq-rtr(config-service-instance)#exit
    hq-rtr(config-port)#exit
    hq-rtr(config)#write memory
  • На BR-RTR:Plaintextbr-rtr(config)#interface isp
    br-rtr(config-if)#description "ISP"
    br-rtr(config-if)#ip address 172.16.2.2/28
    br-rtr(config-if)#exit

    br-rtr(config)#ip route 0.0.0.0/0 172.16.2.1

    br-rtr(config)#port te0
    br-rtr(config-port)#service-instance te0/isp
    br-rtr(config-service-instance)#encapsulation untagged
    br-rtr(config-service-instance)#connect ip interface isp
    br-rtr(config-service-instance)#exit
    br-rtr(config-port)#exit
    br-rtr(config)#write memory

2.7. Динамический NAT (Overload) на маршрутизаторах

Чтобы устройства из локальных подсетей могли выходить наружу, определяем внутренние (inside) и внешние (outside) зоны NAT.

  • На HQ-RTR:Plaintexthq-rtr(config)#interface isp
    hq-rtr(config-if)#ip nat outside
    hq-rtr(config-if)#exit
    hq-rtr(config)#interface vl100
    hq-rtr(config-if)#ip nat inside
    hq-rtr(config-if)#exit
    hq-rtr(config)#interface vl200
    hq-rtr(config-if)#ip nat inside
    hq-rtr(config-if)#exit
    hq-rtr(config)#interface vl999
    hq-rtr(config-if)#ip nat inside
    hq-rtr(config-if)#exit

    # Создаем пулы адресов для трансляции
    hq-rtr(config)#ip nat pool VLAN100 192.168.100.1-192.168.100.30
    hq-rtr(config)#ip nat pool VLAN200 192.168.200.1-192.168.200.254
    hq-rtr(config)#ip nat pool VLAN999 192.168.99.1-192.168.99.6

    # Включаем трансляцию с перегрузкой (PAT) через интерфейс isp
    hq-rtr(config)#ip nat source dynamic inside-to-outside pool VLAN100 overload interface isp
    hq-rtr(config)#ip nat source dynamic inside-to-outside pool VLAN200 overload interface isp
    hq-rtr(config)#ip nat source dynamic inside-to-outside pool VLAN999 overload interface isp
    hq-rtr(config)#write memory
  • На BR-RTR:Plaintextbr-rtr(config)#interface isp
    br-rtr(config-if)#ip nat outside
    br-rtr(config-if)#exit
    br-rtr(config)#interface int1
    br-rtr(config-if)#ip nat inside
    br-rtr(config-if)#exit

    hq-rtr(config)#ip nat pool BR-Net 192.168.0.1-192.168.0.14
    br-rtr(config)#ip nat source dynamic inside-to-outside pool BR-Net overload interface isp
    br-rtr(config)#exit
    br-rtr#write memory
Проверка: На данном этапе с серверов и роутеров должен успешно проходить пинг до внешних ресурсов (интернета).

2.8. Настройка DHCP-сервера на HQ-RTR

Настраиваем автоматическую раздачу IP-адресов для клиентов в VLAN 200.

Plaintext

hq-rtr(config)#ip pool VLAN200
hq-rtr(config-dhcp-server-pool)#range 192.168.200.2-192.168.200.254
hq-rtr(config-dhcp-server-pool)#dhcp-server 1
hq-rtr(config-dhcp-server)#pool VLAN200 1

# Основные сетевые параметры пула
hq-rtr(config-dhcp-server-pool)#mask 24
hq-rtr(config-dhcp-server-pool)#gateway 192.168.200.1
hq-rtr(config-dhcp-server-pool)#dns 192.168.100.2
hq-rtr(config-dhcp-server-pool)#domain-name au-team.irpo
hq-rtr(config-dhcp-server-pool)#exit
hq-rtr(config-dhcp-server)#exit

# Привязываем службу DHCP к интерфейсу vl200
hq-rtr(config)#interface vl200
hq-rtr(config-if)#dhcp-server 1
hq-rtr(config-if)#exit
hq-rtr(config)#write memory

Проверка на клиенте: Перезапустите сетевой интерфейс на клиентской машине и проверьте полученный адрес командой ip -c a.

Часть 3. Защищенные каналы связи (GRE-туннель) и Динамическая маршрутизация (OSPF)

Объединяем HQ и BR защищенным виртуальным туннелем поверх сети провайдера и запускаем протокол динамической маршрутизации для обмена внутренними маршрутами.

3.1. Создание GRE-туннеля

  • На HQ-RTR:Plaintexthq-rtr(config)#interface tunnel.0
    hq-rtr(config-if-tunnel)#description "GRE"
    hq-rtr(config-if-tunnel)#ip address 10.10.10.1/30
    hq-rtr(config-if-tunnel)#ip tunnel 172.16.1.2 172.16.2.2 mode gre
    hq-rtr(config-if-tunnel)#exit
    hq-rtr(config)#write memory
  • На BR-RTR:Plaintextbr-rtr(config)#interface tunnel.0
    br-rtr(config-if-tunnel)#description "GRE"
    br-rtr(config-if-tunnel)#ip address 10.10.10.2/30
    br-rtr(config-if-tunnel)#ip tunnel 172.16.2.2 172.16.1.2 mode gre
    br-rtr(config-if-tunnel)#exit
    br-rtr(config)#write memory
Интерфейс tunnel.0 должен перейти в статус UP.

3.2. Настройка OSPF с аутентификацией

Объявляем внутренние подсети в OSPF (Area 0) и защищаем стык паролем. Используем passive-interface default, чтобы не слать служебные OSPF-пакеты в пользовательские сети.

  • На HQ-RTR:Plaintexthq-rtr(config)#router ospf 1
    hq-rtr(config-router)#ospf router-id 10.10.10.1
    hq-rtr(config-router)#passive-interface default
    hq-rtr(config-router)#no passive-interface tunnel.0
    hq-rtr(config-router)#network 10.10.10.0/30 area 0
    hq-rtr(config-router)#network 192.168.100.0/27 area 0
    hq-rtr(config-router)#network 192.168.200.0/24 area 0
    hq-rtr(config-router)#network 192.168.99.0/29 area 0
    hq-rtr(config-router)#exit

    # Включение MD5/простой аутентификации на интерфейсе туннеля
    hq-rtr(config)#interface tunnel.0
    hq-rtr(config-if-tunnel)#ip ospf authentication
    hq-rtr(config-if-tunnel)#ip ospf authentication-key P@ssw0rd
    hq-rtr(config-if-tunnel)#exit
    hq-rtr(config)#write memory
  • На BR-RTR:Plaintextbr-rtr(config)#router ospf 1
    br-rtr(config-router)#ospf router-id 10.10.10.2
    br-rtr(config-router)#passive-interface default
    br-rtr(config-router)#no passive-interface tunnel.0
    br-rtr(config-router)#network 192.168.0.0/28 area 0
    br-rtr(config-router)#network 10.10.10.0/30 area 0
    br-rtr(config-router)#exit

    br-rtr(config)#interface tunnel.0
    br-rtr(config-if-tunnel)#ip ospf authentication
    br-rtr(config-if-tunnel)#ip ospf authentication-key P@ssw0rd
    br-rtr(config-if-tunnel)#exit
    br-rtr(config)#write memory

Часть 4. Системная безопасность, Пользователи и Синхронизация времени (NTP)

4.1. Локальные администраторы на роутерах

Создаем единую учетную запись управления для сетевых устройств:

Plaintext

# Выполнить на HQ-RTR и BR-RTR
username net_admin
password P@ssw0rd
role admin
exit
write memory

4.2. Безопасность SSH и локальные пользователи на Linux-серверах

Создаем сервисного пользователя sshuser с UID 2026, добавляем его в группу администраторов (wheel) и разрешаем sudo без пароля.

Bash

# Выполнить на HQ-SRV и BR-SRV
useradd sshuser –u 2026
usermod -aG wheel sshuser
echo "sshuser ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers

Ужесточаем правила подключения по SSH:

Bash

# Редактируем конфигурационный файл SSH демона
nano /etc/openssh/sshd_config

Приводим к виду / изменяем строки:

Plaintext

Port 2026
AllowUsers sshuser
MaxAuthTries 2
Banner /etc/openssh/banner

Создаем баннер безопасности и перезапускаем службу:

Bash

echo "Authorized access only" > /etc/openssh/banner
systemctl restart sshd

4.3. Настройка точного времени (NTP / Chrony)

Синхронизация критически важна для работы Active Directory и логов.

  1. На ISP (Сервер времени):Bashnano /etc/chrony.conf
    Добавляем строки, чтобы ISP брал время из внешнего мира и доверял сам себе как источнику:Plaintextserver ntp0.ntp-servers.net iburst prefer minstratum 4
    local stratum 5
    allow 0.0.0.0/0
    Bashsystemctl restart chronyd
  2. На сетевом оборудовании (HQ-RTR и BR-RTR):Plaintext# Сначала выставляем часовой пояс
    hq-rtr(config)#ntp timezone utc+3
    hq-rtr(config)#write memory

    # Указываем адрес NTP-сервера (ISP)
    # На HQ-RTR:
    ntp server 172.16.1.1
    # На BR-RTR:
    ntp server 172.16.2.1
  3. На Linux-нодах (HQ-SRV, BR-SRV, HQ-CLI):Сначала выставляем единую временную зону:Bashtimedatectl set-timezone Europe/Moscow
    Конфигурируем chrony:Bashnano /etc/chrony.conf
    # Прописываем адрес роутера/провайдера своего сегмента:
    # Для HQ: server 172.16.1.1 iburst
    # Для BR: server 172.16.2.1 iburst

    systemctl restart chronyd
    chronyc sources -v # Проверяем успешность синхронизации

Часть 5. Инфраструктурные сервисы (Active Directory, Samba, NFS)

Развертывание службы каталогов (AD DC) на стороне филиала и сетевого хранилища в головном офисе. 1

5.1.

Подготовка Samba Active Directory Domain Controller (на BR-SRV)

Bash

apt-get update && apt-get install -y task-samba-dc
rm -rf /etc/samba/smb.conf

# Запуск интерактивного мастера развертывания домена
samba-tool domain provision
# !!! Пропускаем все настройки по умолчанию, кроме пункта DNS:
# Указываем DNS сервер головного офиса: 192.168.100.2

Настраиваем авторизацию Kerberos:

Bash

nano /etc/krb5.conf

Редактируем блоки:

Plaintext

[realms]
AU-TEAM.IRPO = {
default_domain = au-team.irpo
}

[domain_realm]
.au-team.irpo = AU-TEAM.IRPO
au-team.irpo = AU-TEAM.IRPO

Активируем службу, правим DNS локально на заглушку и выпускаем первый тикет билета Kerberos:

Bash

systemctl enable --now samba
nano /etc/resolv.conf # Выставляем: nameserver 127.0.0.1

# Получаем доменный токен администратора
kinit Administrator@AU-TEAM.IRPO

Создаем структуру пользователей и групп внутри домена:

Bash

samba-tool group add hq
samba-tool user add hquser1 P@ssw0rd # Повторить для пользователей 1-5
samba-tool user setexpiry hquser1 --noexpiry # Отменяем истечение пароля
samba-tool group addmembers hq hquser1 # Добавляем пользователей в группу
samba-tool group listmembers hq # Проверка состава группы

5.2. Ввод клиента HQ-CLI в домен

-6

На клиентской машине переводим интерфейс с DHCP на статику (для стабильности доменных запросов):

  • IP: 192.168.200.2/24, Шлюз: 192.168.200.1, DNS: 192.168.0.2 (Контроллер домена BR-SRV).
  • Обязательно переподключаем сетевой интерфейс!

Проверяем доступность домена:

Bash

host au-team.irpo # Должно вернуть 192.168.0.2 [cite: 12]

Устанавливаем клиентские пакеты интеграции с AD:

Bash

apt-get update && apt-get install -y task-auth-ad-sssd

После чего вводим машину в домен через графический/консольный "Центр управления системой" и отправляем её в перезагрузку.

Для связывания доменных привилегий с локальной группой безопасности wheel (SUDO) на клиенте:

Bash

apt-get install -y libnss-role
roleadd hq wheel
control libnss-role enabled # Включаем модуль (статус должен быть enabled)

Добавляем права на запуск конкретных утилит доменным пользователям в файле /etc/sudoers:

Plaintext

Cmnd_Alias SHELLCMD = /bin/cat, /bin/grep, /usr/bin/id
WHEEL_USERS ALL=(ALL:ALL) SHELLCMD

Проверка: Перезайти в систему под доменной учетной записью hquser1 и проверить работу разрешенных команд через sudo.

5.3. Отказоустойчивое хранилище (RAID-0) и NFS (на HQ-SRV)

-7

Сборка дискового массива и организация сетевой папки для клиентов. 2

Bash

apt-get update && apt-get install -y mdadm
lsblk # Смотрим имена подключенных пустых дисков (например, sdb и sdc)

# Очищаем суперблоки и собираем RAID-0 (Striping) из двух дисков
mdadm --zero-superblock --force /dev/sdb /dev/sdc
mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc

# Сохраняем конфигурацию массива
mdadm --detail --scan --verbose | tee -a /etc/mdadm.conf

# Создаем файловую систему и монтируем ее перманентно
mkfs.ext4 /dev/md0
mkdir /raid
nano /etc/fstab
# Добавляем строчку (разделяя параметры клавишей TAB):
# /dev/md0 /raid ext4 defaults 0 0

mount -av # Монтируем всё, что указано в fstab
df -h # Проверяем доступный объем

Разворачиваем NFS-сервер поверх RAID:

Bash

apt-get install -y nfs-server nfs-utils
mkdir /raid/nfs
chmod 777 /raid/nfs

nano /etc/exports
# Разрешаем доступ на чтение и запись только для подсети клиентов (VLAN 200)
# /raid/nfs 192.168.200.0/24(rw,no_root_squash)

exportfs -arv # Применяем конфигурацию экспорта папок
systemctl enable --now nfs-server

На стороне клиента (HQ-CLI):

Bash

apt-get update && apt-get install -y nfs-utils nfs-clients
mkdir /mnt/nfs
chmod 777 /mnt/nfs

nano /etc/fstab
# Прописываем точку монтирования к серверу головного офиса:
# 192.168.100.2:/raid/nfs /mnt/nfs nfs defaults 0 0

mount -av
df -h

Проверка: Создайте файл на клиенте (touch /mnt/nfs/test.txt) и проверьте его наличие на сервере (ls -l /raid/nfs).

Часть 6. Автоматизация (Ansible), Контейнеризация (Docker) и Веб-сервисы

6.1. Настройка Ansible на BR-SRV

-8

Устанавливаем систему управления конфигурациями и зависимости для работы с сетевым оборудованием cisco-like. 5

Bash

apt-get update && apt-get install -y ansible sshpass
nano /etc/ansible/hosts

Заполняем инвентарь (базу управляемых хостов):

Plaintext

HQ-SRV ansible_host=192.168.100.2 ansible_user=sshuser ansible_password=P@ssw0rd ansible_port=2026
HQ-CLI ansible_host=192.168.200.2 ansible_user=user ansible_password=student
HQ-RTR ansible_host=10.10.10.1 ansible_user=net_admin ansible_password=P@ssw0rd ansible_connection=network_cli ansible_network_os=ios
BR-RTR ansible_host=192.168.0.1 ansible_user=net_admin ansible_password=P@ssw0rd ansible_connection=network_cli ansible_network_os=ios

Конфигурируем сам Ansible:

Bash

nano /etc/ansible/ansible.cfg

Plaintext

[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False

Загружаем необходимые сетевые коллекции и модули авторизации:

Bash

ansible-galaxy collection install ansible.netcommon
ansible-galaxy collection install cisco.ios
apt-get install python3-module-pip
pip3 install ansible-pylibssh

Важно: На роутерах (HQ-RTR, BR-RTR) временно или постоянно отключаем строгую проверку безопасности командной строкой: security none.

Bash

# Проверка связи со всеми нодами (все ответы должны быть успешными/зелеными)
ansible -m ping all

6.2. Развертывание Docker-стека (на BR-SRV)

Установка Docker и запуск контейнеров с веб-приложением и СУБД MariaDB из локальных архивов (офлайн-режим). 6

Bash

apt-get install -y docker-engine docker-compose-v2
systemctl enable --now docker.service

# Монтируем ISO-образ с ресурсами
mount /dev/sr0 /mnt/

# Импортируем готовые образы в Docker
docker load < /mnt/docker/site_latest.tar
docker load < /mnt/docker/mariadb_latest.tar
docker image ls # Проверка импорта

Создаем конфигурацию стека compose.yaml:

Bash

nano compose.yaml

YAML

services:
database:
container_name: db
[cite_start]image: mariadb:10.11 [cite: 17]
restart: always
ports:
- "3306:3306"
environment:
MARIADB_DATABASE: "testdb"
MARIADB_USER: "testc"
MARIADB_PASSWORD: "P@ssw0rd"
MARIADB_ROOT_PASSWORD: "toor"

app:
container_name: testapp
image: site:latest
restart: always
ports:
- "8080:8000"
environment:
DB_TYPE: "maria"
DB_HOST: "192.168.0.2"
DB_PORT: "3306"
DB_NAME: "testdb"
DB_USER: "testc"
DB_PASS: "P@ssw0rd"
depends_on:
- database

Запуск Docker-композиции в фоновом режиме (-d):

Bash

docker compose up -d
docker compose ps # Проверка статуса запущенных контейнеров

Проверка: Веб-приложение станет доступно внутри локальной сети по адресу 192.168.0.2:8080.

6.3. APACHE

Развертывание классического LAMP-сервера (на HQ-SRV) 7

Bash

apt-get install -y lamp-server
mount /dev/sr0 /mnt/ # Если еще не примонтирован

# Копируем исходный код сайта в корень веб-сервера Apache
cp /mnt/web/index.php /var/www/html
cp /mnt/web/logo.png /var/www/html

# Конфигурируем подключение к СУБД в коде сайта
nano /var/www/html/index.php
# Правим переменные подключения:
# $servername = "localhost";
# $username = "webc";
# $password = "P@ssw0rd";
# $dbname = "webdb";

systemctl enable --now mariadb

Инициализируем базу данных MariaDB:

Bash

mariadb –u root

Внутри консоли СУБД выполняем sql-запросы:

SQL

CREATE DATABASE webdb; [cite: 19]
CREATE USER 'webc'@'localhost' IDENTIFIED BY 'P@ssw0rd'; [cite: 20]
GRANT ALL PRIVILEGES ON webdb.* TO 'webc'@'localhost' WITH GRANT OPTION; [cite: 21]
EXIT; [cite: 22]

Импортируем готовую схему данных (дамп) и запускаем веб-сервер:

Bash

mariadb –u webc –p –D webdb < /mnt/web/dump.sql
systemctl enable --now httpd2

Проверка: Проверяем локальный доступ к сайту через браузер по IP 192.168.100.2.

Часть 7. Публикация сервисов наружу (Проброс портов и Reverse Proxy)

Окончательный этап: проброс портов (Destination NAT) на пограничных роутерах до серверов приложений и настройка Nginx в качестве единой точки входа для внешних клиентов. 8

7.1. Статический NAT на роутерах

Пробрасываем трафик, приходящий на внешние адреса роутеров (порты 8080 и 2026), на внутренние сервера приложений.

  • На HQ-RTR:Plaintexthq-rtr(config)#ip nat source static tcp 192.168.100.2 80 172.16.1.2 8080
    hq-rtr(config)#ip nat source static tcp 192.168.100.2 2026 172.16.1.2 2026
    hq-rtr(config)#write memory
  • На BR-RTR:Plaintextbr-rtr(config)#ip nat source static tcp 192.168.0.2 8080 172.16.2.2 8080
    br-rtr(config)#ip nat source static tcp 192.168.0.2 2026 172.16.2.2 2026
    br-rtr(config)#write memory

7.2. Конфигурация Nginx в качестве реверс-прокси (на ISP)

-9

Клиенты будут обращаться по доменным именам к ISP, а тот перенаправит их на соответствующие роутеры. 9

Bash

apt-get install -y nginx
nano /etc/nginx/sites-available.d/default.conf

Прописываем конфигурацию виртуальных хостов (server), распределяя запросы по заголовкам Host:

Nginx

server {
listen 80;
server_name web.au-team.irpo; [cite: 23]

location / {
proxy_pass http://172.16.1.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; [cite: 24]
}
}

server {
listen 80;
server_name docker.au-team.irpo;

location / {
proxy_pass http://172.16.2.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; [cite: 25]
}
}

Активируем конфигурационный файл через символическую ссылку, проверяем синтаксис и запускаем веб-сервер:

Bash

ln -s /etc/nginx/sites-available.d/default.conf /etc/nginx/sites-enabled.d/
nginx -t

Убеждаемся, что синтаксис Nginx в порядке (syntax is ok)
systemctl enable --now nginx

Финальная проверка работоспособности всей инфраструктуры

apt-get install -y apache2-htpasswd

Средствами утилиты htpasswd создать пользователя WEB и добавить информацию о нём в файл /etc/nginx/.htpasswd, задав пароль P@ssw0rd:

htpasswd –c /etc/nginx/.htpasswd WEB

Добавить web-based аутентификацию для доступа к сайту web.au-team.irpo в конфигурационный файл /etc/nginx/sites-available.d/default.conf:

nano /etc/nginx/sites-available.d/default.conf

server {

listen 80;

server_name web.au-team. irpo;

location / {

proxy_pass http://172.16.1.2:8080;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

auth_basic “Restricted area”;

auth_basic_user_file /etc/nginx/.htpasswd;

}

}

server {

listen 80;

server_name docker.au-team. irpo;

location / {

proxy_pass http://172.16.2.2:8080;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

}

Проверить наличие ошибок в конфигурационных файлах: nginx -t

Systemctl restart nginx

HQ-CLI

-10

Проверяем возможность доступа до веб ресурса с браузера на клиенте по адресу web.au-team.irpo/ :

Имя пользователя: WEB

Пароль: P@ssw0rd

Установка яндекс браузера:

apt-get install -y yandex-browser-stable

С внешнего клиента пробуем открыть в браузере ресурсы по их доменным именам:

  • http://web.au-team.irpo/ — должен открыть сайт LAMP-сервера головного офиса.
  • http://docker.au-team.irpo/ — должен открыть сайт из Docker-контейнера филиала.

HQ-RTR:

Включить протокол IKE:

hq-rtr(config)#crypto-ipsec ike enable

hq-rtr(config)#

Настроить профили IPsec:

для создания туннеля IPsec используется протокол IKE (Internet Key Exchange);

есть две фазы построения IPsec туннеля: IKE фаза 1 и IKE фаза 2;

hq-rtr(config)#crypto-ipsec profile CIPROFILE ike-v2

hq-rtr(config-ipsec-ikev2)#mode tunnel

hq-rtr(config-ipsec-ikev2)#

IKE фаза 1:

на IKE этапе 1 два узла договариваются о протоколах шифрования, аутентификации, хеширования и других протоколах, которые они хотят использовать, а также о некоторых других необходимых параметрах;

на этом этапе устанавливается сеанс ISAKMP (Internet Security Association and Key Management Protocol);

это также называется туннелем ISAKMP или туннелем первой фазы IKE;

туннель IKE фазы 1 используется только для управляющего трафика.

hq-rtr(config-ipsec-ikev2)#ike-phase1

hq-rtr(config-ipsec-ikev2-ph1)#proposal aes256-sha256-modp2048

hq-rtr(config-ipsec-ikev2-ph1)#auth pre-shared-key P@ssw0rd

hq-rtr(config-ipsec-ikev2-ph1)#exit

hq-rtr(config-ipsec-ikev2)#

IKE фаза 2:

этот туннель используется как безопасный метод для организации второго туннеля, называемого туннелем IKE фазы 2 или туннелем IPsec;

второй туннель предназначен уже для непосредственной передачи пользовательских данных а также для управляющих данных;

после завершения фазы 2 IKE появится туннель фазы 2 IKE (или туннель IPsec), который можно использовать для защиты пользовательских данных.

hq-rtr(config-ipsec-ikev2)#ike-phase2

hq-rtr(config-ipsec-ikev2-ph2)#protocol esp

hq-rtr(config-ipsec-ikev2-ph2)#proposal aes256-sha256

hq-rtr(config-ipsec-ikev2-ph2)#local-ts 172.16.1.2

hq-rtr(config-ipsec-ikev2-ph2)#remote-ts 172.16.2.2

hq-rtr(config-ipsec-ikev2-ph2)#exit

hq-rtr(config-ipsec-ikev2)#exit

hq-rtr(config)#

Задать крипто-карту:

необходимо указать, к какому пиру следует применять соответствующий профиль IPsec

hq-rtr(config)#crypto-map CMAP 10

hq-rtr(config-crypto-map)#match peer 172.16.2.2

hq-rtr(config-crypto-map)#set crypto-ipsec profile CIPROFILE

hq-rtr(config-crypto-map)#exit

hq-rtr(config)#

Задать карты фильтрации:

для каждого маршрутизатора необходимо вычленить исходящий трафик который нужно зашифровать и входящий, который нужно дешифровать;

исходящий (из локальной сети в туннель) трафик фильтруется по адресам локальной и удалённой подсети;

фильтруется любой тип трафика;

к фильтр-карте привязана криптографическая карта crypto-map, которая, в свою очередь, ссылается на профиль crypto-ipsec;

трафик шифруется в соответствии с параметрами указанными в профиле IPsec и отправляется в туннель.

для туннеля используется одна карта фильтрации, которая последовательно обрабатывает исходящий и входящий трафик, и оканчивается разрешающим правилом для прочего трафика:

hq-rtr(config)#filter-map ipv4 FMAP 5

hq-rtr(config-filter-map-ipv4)#match gre host 172.16.1.2 host 172.16.2.2

hq-rtr(config-filter-map-ipv4)#set crypto-map CMAP peer 172.16.2.2

hq-rtr(config-filter-map-ipv4)#exit

hq-rtr(config)#

hq-rtr(config)#filter-map ipv4 FMAP 10

hq-rtr(config-filter-map-ipv4)#match udp host 172.16.2.2 eq 4500 host 172.16.1.2 eq 4500

hq-rtr(config-filter-map-ipv4)#set crypto-map CMAP peer 172.16.2.2

hq-rtr(config-filter-map-ipv4)#exit

hq-rtr(config)#

hq-rtr(config)#filter-map ipv4 FMAP 15

hq-rtr(config-filter-map-ipv4)#match any any any

hq-rtr(config-filter-map-ipv4)#set accept

hq-rtr(config-filter-map-ipv4)#exit

hq-rtr(config)#

Применить фильтр-карты к необходимым L3-интерфейсам во входящем направлении:

hq-rtr(config)#interface isp

hq-rtr(config-if)#set filter-map in FMAP 10

hq-rtr(config-if)#exit

hq-rtr(config)#

hq-rtr(config)#interface tunnel.0

hq-rtr(config-if-tunnel)#set filter-map in FMAP 10

hq-rtr(config-if-tunnel)#exit

hq-rtr(config)#

hq-rtr(config)#write memory

Building configuration...

hq-rtr(config)#

P.S.

Для шифрования туннеля используется протокол IKEv2, для которого NAT traversal включён по умолчанию.

-11

BR-RTR:

Аналогично HQ-RTR, но зеркально:

br-rtr(config)#crypto-ipsec ike enable

br-rtr(config)#

br-rtr(config)#crypto-ipsec profile CIPROFILE ike-v2

br-rtr(config-ipsec-ikev2)#mode tunnel

br-rtr(config-ipsec-ikev2)#ike-phase1

br-rtr(config-ipsec-ikev2-ph1)#proposal aes256-sha256-modp2048

br-rtr(config-ipsec-ikev2-ph1)#auth pre-shared-key P@ssw0rd

br-rtr(config-ipsec-ikev2-ph1)#exit

br-rtr(config-ipsec-ikev2)#

br-rtr(config-ipsec-ikev2)#ike-phase2

br-rtr(config-ipsec-ikev2-ph2)#protocol esp

br-rtr(config-ipsec-ikev2-ph2)#proposal aes256-sha256

br-rtr(config-ipsec-ikev2-ph2)#local-ts 172.16.2.2

br-rtr(config-ipsec-ikev2-ph2)#remote-ts 172.16.1.2

br-rtr(config-ipsec-ikev2-ph2)#exit

br-rtr(config-ipsec-ikev2)#exit

br-rtr(config)#

br-rtr(config)#crypto-map CMAP 10

br-rtr(config-crypto-map)#match peer 172.16.1.2

br-rtr(config-crypto-map)#set crypto-ipsec profile CIPROFILE

br-rtr(config-crypto-map)#exit

br-rtr(config)#

br-rtr(config)#filter-map ipv4 FMAP 5

br-rtr(config-filter-map-ipv4)#match gre host 172.16.2.2 host 172.16.1.2

br-rtr(config-filter-map-ipv4)#set crypto-map CMAP peer 172.16.1.2

br-rtr(config-filter-map-ipv4)#exit

br-rtr(config)#

br-rtr(config)#filter-map ipv4 FMAP 10

br-rtr(config-filter-map-ipv4)#match udp host 172.16.1.2 eq 4500 host 172.16.2.2 eq 4500

br-rtr(config-filter-map-ipv4)#set crypto-map CMAP peer 172.16.1.2

br-rtr(config-filter-map-ipv4)#exit

br-rtr(config)#

br-rtr(config)#filter-map ipv4 FMAP 15

br-rtr(config-filter-map-ipv4)#match any any any

br-rtr(config-filter-map-ipv4)#set accept

br-rtr(config-filter-map-ipv4)#exit

br-rtr(config)#

br-rtr(config)#interface isp

br-rtr(config-if)#set filter-map in FMAP 10

br-rtr(config-if)#exit

br-rtr(config)#

br-rtr(config)#interface tunnel.0

br-rtr(config-if-tunnel)#set filter-map in FMAP 10

br-rtr(config-if-tunnel)#exit

br-rtr(config)#

br-rtr(config)#write memory

Building configuration...

br-rtr(config)#

HQ-SRV:

Установить необходимые пакеты:

apt-get update && apt-get install -y cups cups-pdf

Включить и добавить в автозагрузку службу cups:

systemctl enable --now cups

Включить общий доступ к принтеру на сервере и разрешить печатать из любой сети:

cupsctl --share-printers --remote-any

Поскольку в домене SambaDC нет DNS записи ссылающейся на необходимое имя, а на HQ-CLI в качестве DNS-сервера задан адрес именно контроллера домена, поэтому необходимо добавить записи в файл /etc/hosts на виртуальной машине HQ-CLI:

или же используя утилиту samba-tool добавить необходимые записи на DNS-сервере BR-SRV;

172.16.1.1 web.au-team.irpo web

172.16.2.1 docker.au-team.irpo docker

192.168.100.2 hq-srv.au-team.irpo hq-srv

Затем подключить виртуальный принтер как принтер по умолчанию

На HQ-SRV результат печати

ls -l /var/spool/cups/