ДемоЭкзамен.РФ
09.02.06Альт Linux · /etc/net~6 чБазовый → продвинутый

Настройка сети на ОС Альт Linux (роутеры и серверы) — 09.02.06 /etc/net

Техническая документация по настройке оборудования: Часть 1 (сетевая инфраструктура — VLAN, GRE, OSPF, NAT, DNS, DHCP) и Часть 2 (Samba DC, RAID, NFS, Chrony, Ansible, Docker, Apache, Nginx). ОС Альт Linux, интерфейсы enp7s*.

Любой подсвеченный IP-адрес, интерфейс или VLAN можно нажать и изменить под свой вариант — значение подставится во всю документацию и на схему. Всё хранится только в твоём браузере.

Топология стенда

Нажми на любой адрес, интерфейс или VLAN — он изменится во всей документации

☁ Интернет
enp7s1 · DHCP
ISPшлюз
enp7s2→ HQ 172.16.1.1
enp7s3→ BR 172.16.2.1
172.16.1.0/28
172.16.2.0/28
HQ — головной офис
HQ-RTRмаршрутизатор
enp7s1→ ISP 172.16.1.2
enp7s2.100VLAN 100 192.168.100.1
enp7s2.200VLAN 200 192.168.200.1
enp7s2.999VLAN 999 192.168.99.1
tun0GRE 10.0.0.1
HQ-SRVсервер
enp7s1192.168.100.2
HQ-CLIклиент
enp7s1DHCP
BR — филиал
BR-RTRмаршрутизатор
enp7s1→ ISP 172.16.2.2
enp7s2→ BR-SRV 192.168.201.1
tun0GRE 10.0.0.2
BR-SRVсервер
enp7s1192.168.201.2
⟷ GRE-туннель 10.0.0.0/30 (OSPF area 0)
Справочные данные

Таблицы адресации и DNS

Таблица IP-адресации
УстройствоИнтерфейсVLANIP-адресШлюз
ISPenp7s1DHCPDHCP
ISPenp7s2 (→HQ)172.16.1.1/28
ISPenp7s3 (→BR)172.16.2.1/28
HQ-RTRenp7s1 (→ISP)172.16.1.2/28172.16.1.1
HQ-RTRenp7s2.100100192.168.100.1/27
HQ-RTRenp7s2.200200192.168.200.1/27
HQ-RTRenp7s2.999999192.168.99.1/29
HQ-RTRtun0 (GRE)10.0.0.1/30
BR-RTRenp7s1 (→ISP)172.16.2.2/28172.16.2.1
BR-RTRenp7s2192.168.201.1/28
BR-RTRtun0 (GRE)10.0.0.2/30
HQ-SRVenp7s1100192.168.100.2/27192.168.100.1
HQ-CLIenp7s1200DHCPDHCP
BR-SRVenp7s1192.168.201.2/28192.168.201.1
DNS-записи (зона au-team.irpo)
УстройствоЗаписьТипIP
HQ-RTRhq-rtr.au-team.irpoA, PTR192.168.100.1
BR-RTRbr-rtr.au-team.irpoA172.16.2.2
HQ-SRVhq-srv.au-team.irpoA, PTR192.168.100.2
HQ-CLIhq-cli.au-team.irpoA, PTRDHCP
BR-SRVbr-srv.au-team.irpoA192.168.201.2
ISP→HQdocker.au-team.irpoA172.16.1.1
ISP→BRweb.au-team.irpoA172.16.2.1
Настройка сети через /etc/net.Каталог /etc/net/ifaces/<имя>/options — тип и загрузка; ipv4address — IP-адрес(а); ipv4route — маршруты. Для VLAN каталог именуется <родитель>.<vlan_id>. После правок: systemctl restart network (или service network restart).
Модуль 1 · Сетевая инфраструктура

1. ISP — шлюз в интернет

Раздаёт интернет через NAT для сетей HQ и BR. Получает внешний адрес по DHCP на enp7s1.

Сначала ставим пакеты, которые понадобятся именно на этом устройстве: iptables для NAT и tzdata для часового пояса. apt-get update обновляет список доступных пакетов, флаг -y отвечает «да» на все вопросы.

1.0 Установка пакетов
apt-get update && apt-get install iptables tzdata -y

Задаём серверу осмысленное имя — оно видно в приглашении терминала и используется в DNS. exec bash перезапускает оболочку, чтобы новое имя применилось сразу.

1.1 Имя хоста
hostnamectl set-hostname isp.au-team.irpo; exec bash

Внешний интерфейс смотрит в интернет и получает адрес автоматически по DHCP от провайдера, поэтому тип загрузки — dhcp, а конкретный IP прописывать не нужно.

1.2 enp7s1 — интернет (DHCP)
cat > /etc/net/ifaces/enp7s1/options << 'EOF'
BOOTPROTO=dhcp
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF

Канал в сторону головного офиса настраиваем статически: ISP здесь выступает шлюзом, поэтому адрес фиксированный. Создаём каталог интерфейса и записываем IP.

1.3 enp7s2 — в сторону HQ-RTR
mkdir -p /etc/net/ifaces/enp7s2
cat > /etc/net/ifaces/enp7s2/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF
echo '172.16.1.1/28' > /etc/net/ifaces/enp7s2/ipv4address

То же для канала в сторону филиала — отдельный статический адрес из своей подсети. Каждый стык между устройствами это своя маленькая сеть.

1.4 enp7s3 — в сторону BR-RTR
mkdir -p /etc/net/ifaces/enp7s3
cat > /etc/net/ifaces/enp7s3/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF
echo '172.16.2.1/28' > /etc/net/ifaces/enp7s3/ipv4address

Перечитываем конфигурацию сети, чтобы созданные интерфейсы поднялись с нужными адресами.

1.5 Применить сеть
systemctl restart network

Включаем форвардинг (ip_forward) — без него Linux не пересылает чужие пакеты между интерфейсами. NAT (MASQUERADE) подменяет внутренние адреса на внешний, чтобы офис и филиал ходили в интернет через один публичный IP. Правила сохраняем, чтобы пережили перезагрузку.

1.6 Маршрутизация + NAT
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/99-forward.conf
sysctl -p /etc/sysctl.d/99-forward.conf

iptables -t nat -A POSTROUTING -s 172.16.1.0/28 -o enp7s1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.2.0/28 -o enp7s1 -j MASQUERADE

iptables-save > /etc/sysconfig/iptables
systemctl enable iptables

Ставим часовой пояс, чтобы время в логах и сертификатах было корректным.

1.7 Часовой пояс
timedatectl set-timezone Europe/Moscow
Совет.Часовой пояс Europe/Moscow замени на свой: Asia/Yekaterinburg, Asia/Novosibirsk и т.д.
Модуль 1 · Сетевая инфраструктура

2. HQ-RTR — маршрутизатор головного офиса

Терминирует VLAN 100/200/999 на trunk-интерфейсе enp7s2, поднимает GRE-туннель до BR-RTR, OSPF, NAT и DHCP для клиентов.

Ставим пакеты под роль маршрутизатора офиса: frr для OSPF, dhcp-server для раздачи адресов клиентам, iptables для NAT, sudo для прав и tzdata для часового пояса.

2.0 Установка пакетов
apt-get update && apt-get install frr dhcp-server tzdata iptables sudo -y

Задаём имя маршрутизатору головного офиса — оно пригодится в DNS и при подключении по SSH.

2.1 Имя хоста
hostnamectl set-hostname hq-rtr.au-team.irpo; exec bash

Аплинк к провайдеру с фиксированным адресом. Здесь же прописываем маршрут по умолчанию (default via): через него весь незнакомый трафик уходит к ISP.

2.2 enp7s1 — в сторону ISP
mkdir -p /etc/net/ifaces/enp7s1
cat > /etc/net/ifaces/enp7s1/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF
echo '172.16.1.2/28' > /etc/net/ifaces/enp7s1/ipv4address
echo 'default via 172.16.1.1' > /etc/net/ifaces/enp7s1/ipv4route

Физический интерфейс к коммутатору делаем транком: сам он адрес не получает, его задача — пропускать несколько VLAN. Адреса появятся на под-интерфейсах VLAN ниже.

2.3 enp7s2 — trunk (без IP, только для VLAN)
mkdir -p /etc/net/ifaces/enp7s2
cat > /etc/net/ifaces/enp7s2/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF

Создаём под-интерфейс для серверной сети: TYPE=vlan, HOST — родительский интерфейс, VID — номер VLAN. Адрес .1 станет шлюзом для серверов.

2.4 VLAN 100 — SRV-Net
mkdir -p /etc/net/ifaces/enp7s2.100
cat > /etc/net/ifaces/enp7s2.100/options << 'EOF'
BOOTPROTO=static
TYPE=vlan
HOST=enp7s2
VID=100
NM_CONTROLLED=no
DISABLED=no
EOF
echo '192.168.100.1/27' > /etc/net/ifaces/enp7s2.100/ipv4address

Аналогично — сеть для клиентских рабочих станций. Маршрутизатор будет для неё шлюзом.

2.5 VLAN 200 — CLI-Net
mkdir -p /etc/net/ifaces/enp7s2.200
cat > /etc/net/ifaces/enp7s2.200/options << 'EOF'
BOOTPROTO=static
TYPE=vlan
HOST=enp7s2
VID=200
NM_CONTROLLED=no
DISABLED=no
EOF
echo '192.168.200.1/27' > /etc/net/ifaces/enp7s2.200/ipv4address

Отдельный VLAN для управления устройствами — его держат изолированным от пользовательского трафика.

2.6 VLAN 999 — Management
mkdir -p /etc/net/ifaces/enp7s2.999
cat > /etc/net/ifaces/enp7s2.999/options << 'EOF'
BOOTPROTO=static
TYPE=vlan
HOST=enp7s2
VID=999
NM_CONTROLLED=no
DISABLED=no
EOF
echo '192.168.99.1/29' > /etc/net/ifaces/enp7s2.999/ipv4address

Поднимаем все VLAN-интерфейсы и включаем форвардинг, чтобы маршрутизатор пересылал трафик между подсетями.

2.7 Применить сеть + форвардинг
systemctl restart network
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/99-forward.conf
sysctl -p /etc/sysctl.d/99-forward.conf

Включаем NAT на аплинке: внутренние сети офиса выходят в интернет через адрес маршрутизатора.

2.8 NAT (masquerade)
iptables -t nat -A POSTROUTING -o enp7s1 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables

Создаём учётку администратора с паролем и правом sudo без пароля — под ней позже работает Ansible и идёт управление устройством.

2.9 Пользователь net_admin
useradd -m net_admin
echo 'net_admin:P@ssw0rd' | chpasswd
echo 'net_admin ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/net_admin

Строим GRE-туннель между офисом и филиалом поверх интернета. TUNLOCAL и TUNREMOTE — реальные адреса концов, а внутри туннеля используется отдельная маленькая сеть. По нему пойдёт внутренний трафик и OSPF.

2.10 GRE-туннель до BR-RTR
mkdir -p /etc/net/ifaces/tun0
cat > /etc/net/ifaces/tun0/options << 'EOF'
TYPE=iptun
TUNTYPE=gre
TUNLOCAL=172.16.1.2
TUNREMOTE=172.16.2.2
TUNOPTIONS='ttl 64'
HOST=enp7s1
NM_CONTROLLED=no
DISABLED=no
EOF
echo '10.0.0.1/30' > /etc/net/ifaces/tun0/ipv4address
systemctl restart network

Поднимаем динамическую маршрутизацию OSPF через демон FRR: офис и филиал сами узнают маршруты друг друга через туннель. Включаем MD5-аутентификацию соседей, чтобы маршруты нельзя было подменить. passive-interface отключает OSPF там, где соседей нет.

2.11 OSPF (FRR)
apt-get install -y frr
sed -i 's/ospfd=no/ospfd=yes/' /etc/frr/daemons
systemctl enable --now frr

vtysh << 'VEOF'
configure terminal
router ospf
 network 10.0.0.0/30 area 0
 network 192.168.100.0/27 area 0
 network 192.168.200.0/27 area 0
 network 192.168.99.0/29 area 0
 passive-interface enp7s1
 passive-interface enp7s2.100
 passive-interface enp7s2.200
 passive-interface enp7s2.999
exit
interface tun0
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 P@ssw0rd
exit
router ospf
 area 0 authentication message-digest
exit
end
write memory
VEOF

Поднимаем DHCP-сервер для клиентской сети: он раздаёт адреса из заданного диапазона, шлюз и DNS. Указываем, на каком интерфейсе слушать запросы.

2.12 DHCP для VLAN 200 (HQ-CLI)
apt-get install -y dhcp-server
cat > /etc/dhcp/dhcpd.conf << 'EOF'
subnet 192.168.200.0 netmask 255.255.255.224 {
  range 192.168.200.2 192.168.200.30;
  option routers 192.168.200.1;
  option domain-name-servers 192.168.100.2;
  option domain-name "au-team.irpo";
}
EOF

sed -i 's/DHCPDARGS=/DHCPDARGS=enp7s2.200/' /etc/sysconfig/dhcpd
systemctl enable --now dhcpd

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

2.13 Часовой пояс
timedatectl set-timezone Europe/Moscow
Модуль 1 · Сетевая инфраструктура

3. BR-RTR — маршрутизатор филиала

Маршрутизатор филиала: терминирует канал к ISP, держит GRE-туннель до офиса и OSPF. Ставим пакеты: frr для OSPF, iptables для NAT, sudo для прав и tzdata для часового пояса (dhcp-server здесь не нужен — клиенты в офисе).

3.0 Установка пакетов
apt-get update && apt-get install frr tzdata iptables sudo -y

Имя для маршрутизатора филиала.

3.1 Имя хоста
hostnamectl set-hostname br-rtr.au-team.irpo; exec bash

Аплинк филиала к провайдеру со статическим адресом и маршрутом по умолчанию в сторону ISP.

3.2 enp7s1 — в сторону ISP
mkdir -p /etc/net/ifaces/enp7s1
cat > /etc/net/ifaces/enp7s1/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF
echo '172.16.2.2/28' > /etc/net/ifaces/enp7s1/ipv4address
echo 'default via 172.16.2.1' > /etc/net/ifaces/enp7s1/ipv4route

Внутренний интерфейс филиала, к которому подключён сервер BR-SRV. Маршрутизатор — шлюз для этой сети.

3.3 enp7s2 — в сторону BR-SRV
mkdir -p /etc/net/ifaces/enp7s2
cat > /etc/net/ifaces/enp7s2/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF
echo '192.168.201.1/28' > /etc/net/ifaces/enp7s2/ipv4address

Поднимаем сеть, включаем форвардинг и NAT — всё то же, что на HQ-RTR, но для филиала.

3.4 Сеть + маршрутизация + NAT
systemctl restart network
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/99-forward.conf
sysctl -p /etc/sysctl.d/99-forward.conf
iptables -t nat -A POSTROUTING -o enp7s1 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables

Та же админ-учётка с sudo, что и в офисе, — для единообразного управления.

3.5 Пользователь net_admin
useradd -m net_admin
echo 'net_admin:P@ssw0rd' | chpasswd
echo 'net_admin ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/net_admin

Вторая половина туннеля: локальный и удалённый адреса зеркальны настройкам на HQ-RTR. Концы должны совпасть, иначе туннель не поднимется.

3.6 GRE-туннель до HQ-RTR
mkdir -p /etc/net/ifaces/tun0
cat > /etc/net/ifaces/tun0/options << 'EOF'
TYPE=iptun
TUNTYPE=gre
TUNLOCAL=172.16.2.2
TUNREMOTE=172.16.1.2
TUNOPTIONS='ttl 64'
HOST=enp7s1
NM_CONTROLLED=no
DISABLED=no
EOF
echo '10.0.0.2/30' > /etc/net/ifaces/tun0/ipv4address
systemctl restart network

OSPF на стороне филиала: анонсируем свою сеть и сеть туннеля, чтобы офис узнал маршрут до филиала. Аутентификация — та же.

3.7 OSPF (FRR)
apt-get install -y frr
sed -i 's/ospfd=no/ospfd=yes/' /etc/frr/daemons
systemctl enable --now frr

vtysh << 'VEOF'
configure terminal
router ospf
 network 10.0.0.0/30 area 0
 network 192.168.201.0/28 area 0
 passive-interface enp7s1
 passive-interface enp7s2
exit
interface tun0
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 P@ssw0rd
exit
router ospf
 area 0 authentication message-digest
exit
end
write memory
VEOF

Часовой пояс филиала.

3.8 Часовой пояс
timedatectl set-timezone Europe/Moscow
Модуль 1 · Сетевая инфраструктура

4. HQ-SRV — сервер (DNS bind, SSH)

Серверу нужны минимальные пакеты: sudo для прав и tzdata для часового пояса (bind поставим отдельно ниже).

4.0 Установка пакетов
apt-get update && apt-get install tzdata sudo -y

HQ-SRV стоит в серверном VLAN 100, поэтому адрес вешаем не на сам enp7s1, а на его VLAN-под-интерфейс enp7s1.100 (тегированный трафик через коммутатор до HQ-RTR). Сам enp7s1 поднимаем без IP, а IP, шлюз и DNS прописываем на под-интерфейсе. DNS временно указываем сам на себя (127.0.0.1) — дальше тут поднимется bind.

4.1 Имя + сеть (VLAN 100)
hostnamectl set-hostname hq-srv.au-team.irpo; exec bash

mkdir -p /etc/net/ifaces/enp7s1.100
cat > /etc/net/ifaces/enp7s1/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF
cat > /etc/net/ifaces/enp7s1.100/options << 'EOF'
BOOTPROTO=static
TYPE=vlan
HOST=enp7s1
VID=100
NM_CONTROLLED=no
DISABLED=no
EOF
echo '192.168.100.2/27' > /etc/net/ifaces/enp7s1.100/ipv4address
echo 'default via 192.168.100.1' > /etc/net/ifaces/enp7s1.100/ipv4route

# DNS — сам на себя (будет bind):
echo 'nameserver 127.0.0.1' > /etc/resolv.conf
systemctl restart network

Создаём пользователей: remote_user и sshuser с фиксированным UID. sshuser получит доступ по SSH и права sudo.

4.2 Пользователи
useradd -m remote_user
useradd -m -u 2026 sshuser
echo 'sshuser:P@ssw0rd' | chpasswd
echo 'sshuser ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/sshuser

Усиливаем SSH: меняем порт со стандартного 22, ограничиваем число попыток входа, разрешаем подключаться только sshuser и показываем баннер-предупреждение. Это типовые требования по безопасности при настройке серверов.

4.3 SSH — порт 2026, только sshuser, баннер
sed -i 's/#Port 22/Port 2026/' /etc/ssh/sshd_config
sed -i 's/#MaxAuthTries 6/MaxAuthTries 2/' /etc/ssh/sshd_config
sed -i 's|#Banner none|Banner /etc/ssh/banner|' /etc/ssh/sshd_config
echo 'AllowUsers sshuser' >> /etc/ssh/sshd_config
echo 'Authorized access only' > /etc/ssh/banner
systemctl restart sshd

Ставим bind и создаём прямую зону домена — таблицу соответствий имя в IP для всех устройств. Записи A позволяют обращаться к хостам по именам вместо адресов.

4.4 DNS-сервер (bind / named) — прямая зона
apt-get install -y bind

mkdir -p /var/lib/bind/zone
cat > /var/lib/bind/zone/au-team.irpo << 'EOF'
$TTL 3600
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
        2024010101 3600 900 604800 86400 )
  IN NS  hq-srv.au-team.irpo.
hq-rtr  IN A 192.168.100.1
hq-srv  IN A 192.168.100.2
hq-cli  IN A 192.168.200.2
br-rtr  IN A 172.16.2.2
br-srv  IN A 192.168.201.2
docker  IN A 172.16.1.1
web     IN A 172.16.2.1
EOF

Обратные зоны делают обратное преобразование IP в имя (записи PTR). Имя зоны — это подсеть, записанная задом наперёд. Нужны для корректной работы почты, логов и проверок nslookup.

4.4 Обратные зоны
# Обратная зона 100.168.192:
cat > /var/lib/bind/zone/100.168.192.in-addr.arpa << 'EOF'
$TTL 3600
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
        2024010101 3600 900 604800 86400 )
  IN NS  hq-srv.au-team.irpo.
1  IN PTR hq-rtr.au-team.irpo.
2  IN PTR hq-srv.au-team.irpo.
EOF

# Обратная зона 200.168.192:
cat > /var/lib/bind/zone/200.168.192.in-addr.arpa << 'EOF'
$TTL 3600
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
        2024010101 3600 900 604800 86400 )
  IN NS  hq-srv.au-team.irpo.
2  IN PTR hq-cli.au-team.irpo.
EOF

Главный конфиг bind: где лежат файлы зон, кому отвечать, и forwarders — внешние DNS, куда пересылать запросы об именах за пределами нашего домена.

4.4 named.conf
cat > /etc/bind/named.conf << 'EOF'
options {
  directory "/var/lib/bind/zone";
  listen-on { any; };
  allow-query { any; };
  forwarders { 77.88.8.7; 77.88.8.3; };
  recursion yes;
};
zone "au-team.irpo" {
  type master;
  file "au-team.irpo";
};
zone "100.168.192.in-addr.arpa" {
  type master;
  file "100.168.192.in-addr.arpa";
};
zone "200.168.192.in-addr.arpa" {
  type master;
  file "200.168.192.in-addr.arpa";
};
EOF

chown -R named:named /var/lib/bind/zone
systemctl enable --now named
systemctl restart named

Часовой пояс сервера.

4.5 Часовой пояс
timedatectl set-timezone Europe/Moscow
Модуль 1 · Сетевая инфраструктура

5. BR-SRV — сервер филиала

Минимальный набор пакетов для сервера филиала: sudo и tzdata.

5.0 Установка пакетов
apt-get update && apt-get install tzdata sudo -y

Сервер филиала подключён к BR-RTR напрямую (без VLAN), поэтому адрес ставим прямо на enp7s1. Имя, статический адрес в сети филиала и шлюз. DNS указываем на HQ-SRV — там наш доменный bind.

5.1 Имя + сеть
hostnamectl set-hostname br-srv.au-team.irpo; exec bash

mkdir -p /etc/net/ifaces/enp7s1
cat > /etc/net/ifaces/enp7s1/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF
echo '192.168.201.2/28' > /etc/net/ifaces/enp7s1/ipv4address
echo 'default via 192.168.201.1' > /etc/net/ifaces/enp7s1/ipv4route
echo 'nameserver 192.168.100.2' > /etc/resolv.conf
systemctl restart network

Те же пользователи remote_user и sshuser, что и на HQ-SRV.

5.2 Пользователи
useradd -m remote_user
useradd -m -u 2026 sshuser
echo 'sshuser:P@ssw0rd' | chpasswd
echo 'sshuser ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/sshuser

Та же настройка SSH: нестандартный порт, ограничение попыток, только sshuser и баннер.

5.3 SSH
sed -i 's/#Port 22/Port 2026/' /etc/ssh/sshd_config
sed -i 's/#MaxAuthTries 6/MaxAuthTries 2/' /etc/ssh/sshd_config
sed -i 's|#Banner none|Banner /etc/ssh/banner|' /etc/ssh/sshd_config
echo 'AllowUsers sshuser' >> /etc/ssh/sshd_config
echo 'Authorized access only' > /etc/ssh/banner
systemctl restart sshd

Часовой пояс.

5.4 Часовой пояс
timedatectl set-timezone Europe/Moscow
Модуль 1 · Сетевая инфраструктура

6. HQ-CLI — клиент (DHCP)

Клиент стоит в клиентском VLAN 200, поэтому адрес он получает не на самом enp7s1, а на его VLAN-под-интерфейсе enp7s1.200. Сам enp7s1 поднимаем статически без IP (просто чтобы линк был активен), а на под-интерфейсе ставим BOOTPROTO=dhcp — адрес придёт от DHCP-сервера HQ-RTR из подсети 200.

6. Имя + сеть по DHCP (VLAN 200)
hostnamectl set-hostname hq-cli.au-team.irpo; exec bash

mkdir -p /etc/net/ifaces/enp7s1.200
cat > /etc/net/ifaces/enp7s1/options << 'EOF'
BOOTPROTO=static
TYPE=eth
NM_CONTROLLED=no
DISABLED=no
EOF
cat > /etc/net/ifaces/enp7s1.200/options << 'EOF'
BOOTPROTO=dhcp
TYPE=vlan
HOST=enp7s1
VID=200
NM_CONTROLLED=no
DISABLED=no
EOF
systemctl restart network
timedatectl set-timezone Europe/Moscow
Конец Модуля 1.Проверь связность по чек-листу в конце страницы перед переходом к Модулю 2.
Модуль 2 · Сетевое администрирование

7. Samba DC + ввод в домен

Стенд Модуля 2.Отдельный, всё преднастроено (IP, NAT, туннель, OSPF, пользователи, SSH, DHCP, DNS). На HQ-SRV три дополнительных диска по 1 ГБ.

Поднимаем контроллер домена Active Directory на Samba. provision создаёт сам домен: задаём realm (область Kerberos), короткое имя домена и пароль администратора. Дальше к этому домену присоединяют клиентов.

7.1 Samba DC на BR-SRV
apt-get install -y task-samba-dc
rm -f /etc/samba/smb.conf

samba-tool domain provision \
  --use-rfc2307 \
  --realm=AU-TEAM.IRPO \
  --domain=AU-TEAM \
  --server-role=dc \
  --dns-backend=SAMBA_INTERNAL \
  --adminpass='P@ssw0rd'

cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
systemctl disable --now smb nmb winbind 2>/dev/null
systemctl enable --now samba

Создаём в домене пять пользователей и группу hq, в которую их добавляем. Доменные учётки работают на всех машинах, введённых в домен.

7.2 Пользователи + группа
for i in 1 2 3 4 5; do samba-tool user create hquser$i P@ssw0rd; done
samba-tool group add hq
samba-tool group addmembers hq hquser1,hquser2,hquser3,hquser4,hquser5

Вводим клиента в домен: ставим SSSD, направляем DNS на контроллер домена (без этого клиент не найдёт домен) и выполняем присоединение. После этого можно входить под доменными учётками.

7.3 Ввод HQ-CLI в домен (на HQ-CLI)
apt-get install -y task-auth-ad-sssd

# DNS клиента указываем на BR-SRV (контроллер домена):
echo 'nameserver 192.168.201.2' > /etc/resolv.conf

system-auth write ad au-team.irpo AU-TEAM br-srv.au-team.irpo Administrator 'P@ssw0rd'
# Альтернатива:
realm join au-team.irpo -U Administrator

Выдаём доменной группе hq ограниченные права sudo — только три безопасные команды. Это пример тонкой настройки прав без выдачи полного доступа.

7.4 Sudo для группы hq (только cat, grep, id) — на HQ-CLI
echo '%hq ALL=(ALL) NOPASSWD: /usr/bin/cat, /usr/bin/grep, /usr/bin/id' > /etc/sudoers.d/hq
Модуль 2 · Сетевое администрирование

8. RAID 0 + NFS на HQ-SRV

Собираем программный RAID 0 из двух дисков: данные распределяются по обоим, что даёт суммарный объём и скорость (но без отказоустойчивости). Затем форматируем массив и монтируем через fstab, чтобы он подключался при загрузке.

8.1 RAID 0 (mdadm)
apt-get install -y mdadm
lsblk
# Определи два диска по 1 ГБ, обычно /dev/sdb и /dev/sdc
mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
mdadm --detail --scan >> /etc/mdadm.conf
mkfs.ext4 /dev/md0
mkdir -p /raid
echo '/dev/md0 /raid ext4 defaults 0 0' >> /etc/fstab
mount -a

Открываем сетевую папку по NFS: в /etc/exports указываем каталог и какой подсети его отдавать, с правом на запись. NFS — простой способ расшарить файлы между Linux-машинами.

8.2 NFS-сервер (HQ-SRV)
apt-get install -y nfs-server
mkdir -p /raid/nfs
echo '/raid/nfs 192.168.200.0/27(rw,sync,no_root_squash)' > /etc/exports
exportfs -ra
systemctl enable --now nfs-server

Подключаем эту папку на клиенте и прописываем в fstab, чтобы монтировалась автоматически. Параметр _netdev велит дождаться сети перед монтированием.

8.3 NFS-клиент (HQ-CLI) — автомонтирование
apt-get install -y nfs-clients
mkdir -p /mnt/nfs
echo '192.168.100.2:/raid/nfs /mnt/nfs nfs defaults,_netdev 0 0' >> /etc/fstab
mount -a
Модуль 2 · Сетевое администрирование

9. Chrony (NTP)

ISP становится сервером точного времени (NTP) через chrony: сам берёт время из интернета и раздаёт его внутренней сети (allow). local stratum позволяет отдавать время, даже если внешний источник недоступен.

9.1 Сервер (ISP)
apt-get install -y chrony
cat > /etc/chrony.conf << 'EOF'
server pool.ntp.org iburst
local stratum 5
allow 0.0.0.0/0
driftfile /var/lib/chrony/drift
EOF
systemctl enable --now chronyd && systemctl restart chronyd

Остальные устройства синхронизируют время с ISP. Единое время критично для домена и Kerberos, логов и сертификатов.

9.2 Клиенты (HQ-SRV, HQ-CLI, BR-RTR, BR-SRV)
apt-get install -y chrony
cat > /etc/chrony.conf << 'EOF'
server 172.16.1.1 iburst
driftfile /var/lib/chrony/drift
EOF
systemctl enable --now chronyd && systemctl restart chronyd
Модуль 2 · Сетевое администрирование

10. Ansible на BR-SRV

Ставим Ansible — инструмент массового управления серверами по SSH без агентов. В конфиге указываем файл инвентаря и отключаем проверку ключей хоста, чтобы не зависать на вопросах при первом подключении.

10.1 Установка + конфиг
apt-get install -y ansible
mkdir -p /etc/ansible

cat > /etc/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
EOF

Инвентарь — список управляемых машин с их адресами, портом SSH и пользователем. Группы (servers, routers) позволяют выполнять задачи сразу на наборе устройств.

10.2 Инвентарь /etc/ansible/hosts
cat > /etc/ansible/hosts << 'EOF'
[servers]
hq-srv ansible_host=192.168.100.2 ansible_port=2026 ansible_user=sshuser
hq-cli ansible_host=192.168.200.2 ansible_user=sshuser

[routers]
hq-rtr ansible_host=192.168.100.1 ansible_user=net_admin
br-rtr ansible_host=192.168.201.1 ansible_user=net_admin
EOF

Генерируем SSH-ключ и копируем его на все узлы (ssh-copy-id), чтобы Ansible ходил без пароля. Команда ansible all -m ping проверяет связь со всеми хостами.

10.3 SSH-ключ + раскидать + проверка
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
ssh-copy-id -p 2026 sshuser@192.168.100.2
ssh-copy-id sshuser@192.168.200.2
ssh-copy-id net_admin@192.168.100.1
ssh-copy-id net_admin@192.168.201.1

ansible all -m ping
Модуль 2 · Сетевое администрирование

11. Docker testapp на BR-SRV

Ставим Docker и загружаем готовые образы приложения и базы из подключённого ISO. docker load распаковывает образ из файла в локальное хранилище Docker.

11.1 Установка + загрузка образов
apt-get install -y docker-engine docker-compose
systemctl enable --now docker

# Подключить Additional.iso:
mount /dev/cdrom /mnt
docker load -i /mnt/docker/site_latest
docker load -i /mnt/docker/mariadb_latest

Описываем приложение в compose-файле: контейнер базы MariaDB и контейнер сайта, связанные между собой. restart: always поднимает их после перезагрузки, а docker-compose up -d запускает всё в фоне.

11.2 docker-compose.yml
mkdir -p /opt/testapp && cd /opt/testapp
cat > docker-compose.yml << 'EOF'
version: '3'
services:
  db:
    container_name: db
    image: mariadb_latest
    environment:
      MYSQL_ROOT_PASSWORD: P@ssw0rd
      MYSQL_DATABASE: testdb
      MYSQL_USER: test
      MYSQL_PASSWORD: P@ssw0rd
    restart: always
  testapp:
    container_name: testapp
    image: site_latest
    ports:
      - '8080:8080'
    environment:
      DB_HOST: db
      DB_NAME: testdb
      DB_USER: test
      DB_PASSWORD: P@ssw0rd
    depends_on:
      - db
    restart: always
EOF
docker-compose up -d
Модуль 2 · Сетевое администрирование

12. Apache + MariaDB на HQ-SRV

Ставим веб-сервер Apache, PHP и MariaDB. Создаём базу, пользователя с паролем и наполняем её дампом — это бэкенд для сайта.

12.1 Установка + БД
apt-get install -y httpd2 php8.2 php8.2-mysqlnd-mysqli mariadb-server
systemctl enable --now mariadb httpd2

mount /dev/cdrom /mnt
mysql -e "CREATE DATABASE webdb;"
mysql -e "CREATE USER 'web'@'localhost' IDENTIFIED BY 'P@ssw0rd';"
mysql -e "GRANT ALL ON webdb.* TO 'web'@'localhost'; FLUSH PRIVILEGES;"
mysql webdb < /mnt/web/dump.sql

Копируем файлы сайта в каталог Apache и правим параметры подключения к базе в index.php. После правок перезапускаем веб-сервер.

12.2 Сайт
cp /mnt/web/index.php /var/www/html/
cp -r /mnt/web/images /var/www/html/

# Отредактируй index.php — подключение к БД:
# host=localhost, dbname=webdb, user=web, password=P@ssw0rd
nano /var/www/html/index.php
systemctl restart httpd2
Модуль 2 · Сетевое администрирование

13. Проброс портов + Nginx reverse proxy + Basic Auth

Проброс портов (DNAT): запросы на внешний адрес маршрутизатора филиала на порты 8080 и SSH перенаправляются внутрь — на сервер BR-SRV. Так наружу публикуется сервис, спрятанный за NAT.

13.1 DNAT на BR-RTR
iptables -t nat -A PREROUTING -p tcp -d 172.16.2.2 --dport 8080 -j DNAT --to 192.168.201.2:8080
iptables -t nat -A PREROUTING -p tcp -d 172.16.2.2 --dport 2026 -j DNAT --to 192.168.201.2:2026
iptables-save > /etc/sysconfig/iptables

То же для головного офиса: внешние обращения к маршрутизатору пробрасываются на внутренний сервер HQ-SRV (веб на 80 и SSH).

13.2 DNAT на HQ-RTR
iptables -t nat -A PREROUTING -p tcp -d 172.16.1.2 --dport 8080 -j DNAT --to 192.168.100.2:80
iptables -t nat -A PREROUTING -p tcp -d 172.16.1.2 --dport 2026 -j DNAT --to 192.168.100.2:2026
iptables-save > /etc/sysconfig/iptables

Nginx на ISP работает обратным прокси: по имени сайта он направляет запрос на нужный внутренний сервер. Один внешний вход — несколько внутренних сервисов, разделённых по доменным именам.

13.3 Nginx reverse proxy на ISP
apt-get install -y nginx

cat > /etc/nginx/sites-available.d/proxy.conf << 'EOF'
server {
  listen 80;
  server_name web.au-team.irpo;
  location / {
    proxy_pass http://172.16.1.2:8080;
  }
}
server {
  listen 80;
  server_name docker.au-team.irpo;
  location / {
    proxy_pass http://172.16.2.2:8080;
  }
}
EOF

ln -sf /etc/nginx/sites-available.d/proxy.conf /etc/nginx/sites-enabled.d/
nginx -t && systemctl enable --now nginx && systemctl restart nginx

Закрываем сайт простой парольной защитой (Basic Auth): htpasswd создаёт файл с логином и паролем, а в блок server добавляются две строки, требующие авторизацию.

13.4 Basic Auth для web.au-team.irpo (ISP)
apt-get install -y apache2-htpasswd || apt-get install -y httpd-tools
htpasswd -bc /etc/nginx/.htpasswd WEB P@ssw0rd

# В блок server web.au-team.irpo добавить:
#   auth_basic "Restricted";
#   auth_basic_user_file /etc/nginx/.htpasswd;
systemctl restart nginx

Ставим Яндекс Браузер на клиентскую машину — типовой пункт задания на установку прикладного ПО.

13.5 Яндекс Браузер на HQ-CLI
apt-get install -y yandex-browser-stable
Конец Модуля 2.Готово. Прогоняй финальный чек-лист.
Проверка

Чек-лист проверки

  1. ip a — интерфейсы подняты, IP верные?
  2. ping 8.8.8.8 с HQ-SRV, BR-SRV, HQ-CLI
  3. ping 192.168.201.2 с HQ-SRV (туннель + OSPF)
  4. ping 192.168.100.2 с BR-SRV (обратно)
  5. HQ-CLI получил DHCP? ip a / dhclient
  6. nslookup hq-srv.au-team.irpo 192.168.100.2
  7. ssh -p 2026 sshuser@192.168.100.2
  8. docker ps на BR-SRV — testapp и db?
  9. curl http://web.au-team.irpo с ISP
  10. ansible all -m ping с BR-SRV
Документация обновлена: 2026. Материал по настройке оборудования на ОС Альт Linux. Проверяй актуальные значения под своё оборудование.