Модуль 1. Сетевая инфраструктура¶
Как работать с руководством¶
Открывайте консоль нужной ВМ в Proxmox. Системные команды выполняются от root; пароль учебных ВМ — P@ssw0rd. Это пароль гостевой ОС, а не обязательно пароль гипервизора. Команды qm выполняются только на Proxmox.
Используйте комплект m1-*. Внутри ОС имена будут без префикса комплекта: например, hq-rtr.au-team.irpo. Полная таблица адресов приведена в топологии.
В данном эталоне используется etcnet. Его файлы находятся в /etc/net/ifaces/. NetworkManager и systemd-networkd отключены при подготовке ОС, чтобы конфигурацией каждого интерфейса управляла одна служба.
Состояние проверки реализации смотрите в журнале.
1. Имена, интерфейсы и часовой пояс¶
На каждой машине задайте её имя, например на HQ-RTR:
hostnamectl set-hostname hq-rtr.au-team.irpo
timedatectl set-timezone Asia/Yekaterinburg
hostname -f
ip -br link
Часовой пояс выбран по текущему стенду. При проведении экзамена в другом регионе используйте часовой пояс места проведения.
В наших образах интерфейсы именуются eth0, eth1, eth2 благодаря параметру ядра net.ifnames=0. Сопоставление адаптеров:
| ВМ | eth0 | eth1 | eth2 |
|---|---|---|---|
| ISP | Вышестоящий провайдер, DHCP | HQ: 172.16.1.1/28 | BR: 172.16.2.1/28 |
| HQ-RTR | ISP: 172.16.1.2/28 | Транк VLAN 100/200/999 | — |
| BR-RTR | ISP: 172.16.2.2/28 | BR LAN: 192.168.0.1/28 | — |
| HQ-SRV | 192.168.100.2/27 | — | — |
| BR-SRV | 192.168.0.2/28 | — | — |
| HQ-CLI | DHCP, резервация 192.168.200.10/27 | — | — |
2. Настройка IPv4 через etcnet¶
Пример HQ-RTR, интерфейс в сторону ISP:
mkdir -p /etc/net/ifaces/eth0
cat > /etc/net/ifaces/eth0/options <<'EOF'
TYPE=eth
BOOTPROTO=static
CONFIG_IPV4=yes
DISABLED=no
NM_CONTROLLED=no
EOF
echo '172.16.1.2/28' > /etc/net/ifaces/eth0/ipv4address
echo 'default via 172.16.1.1' > /etc/net/ifaces/eth0/ipv4route
systemctl restart network
Аналогично настройте остальные статические интерфейсы по таблице. Шлюз HQ-SRV — 192.168.100.1, BR-SRV — 192.168.0.1, BR-RTR — 172.16.2.1. На внутренних интерфейсах маршрутизаторов дополнительные маршруты по умолчанию не нужны.
На ISP eth0 используется BOOTPROTO=dhcp, файлы статического адреса и маршрута не создаются. Для работы DHCP-клиента в образе установлен пакет dhcpcd.
Проверки:
ip -br address
ip route
ping -c 3 172.16.1.1 # с HQ-RTR
Если etcnet пишет already up и пропускает первоначально поднятый другим менеджером интерфейс, в консоли выполните ip link set eth0 down, затем systemctl restart network.
3. VLAN на HQ-RTR¶
VLAN разделяет один физический канал на несколько логических сетей. HQ-RTR использует один eth1; на нём создаются три дочерних интерфейса.
Родительский eth1: TYPE=eth, BOOTPROTO=static, CONFIG_IPV4=yes, без IPv4-адреса.
Пример для серверной сети:
mkdir -p /etc/net/ifaces/eth1.100
cat > /etc/net/ifaces/eth1.100/options <<'EOF'
TYPE=vlan
BOOTPROTO=static
CONFIG_IPV4=yes
DISABLED=no
NM_CONTROLLED=no
HOST=eth1
VID=100
EOF
echo '192.168.100.1/27' > /etc/net/ifaces/eth1.100/ipv4address
Повторите для VLAN 200 (192.168.200.1/27) и VLAN 999 (192.168.99.1/29). Примените конфигурацию:
systemctl restart network
ip -d link show eth1.100
ping -c 3 192.168.100.2
На стороне Proxmox транк HQ-RTR пропускает 100/200/999. Для HQ-SRV установлен тег 100 на виртуальном порту, для HQ-CLI — 200. Поэтому внутри этих двух ВМ используется обычный eth0: повторное добавление тегов нарушит связь.
4. Маршрутизация и выход в Интернет¶
На ISP, HQ-RTR и BR-RTR:
cat > /etc/sysctl.d/90-routing.conf <<'EOF'
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
EOF
sysctl -p /etc/sysctl.d/90-routing.conf
Особенность etcnet: при перезапуске сети также читается /etc/net/sysctl.conf. В нём измените net.ipv4.ip_forward = 0 на 1, а net.ipv4.conf.default.rp_filter = 1 на 0. Иначе systemctl restart network снова отключит пересылку, несмотря на файл в /etc/sysctl.d/. После перезапуска проверяйте sysctl net.ipv4.ip_forward — должно быть 1.
ip_forward разрешает пересылку пакетов между интерфейсами. NAT преобразует приватный адрес источника в адрес внешнего интерфейса.
Файл /etc/nftables/nftables.nft для HQ-RTR:
flush ruleset
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr { 192.168.100.0/27, 192.168.200.0/27, 192.168.99.0/29 } oifname "eth0" masquerade
}
}
Для BR-RTR источник — 192.168.0.0/28; для ISP — { 172.16.1.0/28, 172.16.2.0/28 }. Внешний интерфейс везде eth0.
nft -c -f /etc/nftables/nftables.nft
systemctl enable --now nftables
systemctl reload nftables
nft list ruleset
Первоначально для установки пакетов допустим общедоступный DNS в /etc/resolv.conf; после настройки HQ-SRV используйте его адрес 192.168.100.2.
Проверяйте по порядку: адрес своего интерфейса → локальный шлюз → внешний IP → разрешение внешнего имени. Это позволяет отличить ошибку маршрутизации от ошибки DNS.
5. GRE и OSPF¶
GRE переносит пакеты между офисами через сеть провайдера. Он сам по себе не шифрует трафик; шифрование добавляется в модуле 3. OSPF автоматически сообщает соседу, какие подсети находятся за маршрутизатором.
На HQ-RTR сначала выполните mkdir -p /etc/net/ifaces/gre1, затем создайте /etc/net/ifaces/gre1/options:
TYPE=iptun
BOOTPROTO=static
CONFIG_IPV4=yes
DISABLED=no
TUNTYPE=gre
TUNLOCAL=172.16.1.2
TUNREMOTE=172.16.2.2
TUNOPTIONS='ttl 64'
HOST=eth0
В ipv4address запишите 10.10.10.1/30. На BR-RTR поменяйте местами TUNLOCAL/TUNREMOTE, адрес туннеля — 10.10.10.2/30.
systemctl restart network
ip tunnel show gre1
ping -c 3 10.10.10.2 # с HQ-RTR
apt-get update
apt-get install -y frr
В /etc/frr/daemons включите zebra=yes и ospfd=yes. Содержимое /etc/frr/frr.conf для HQ-RTR:
frr defaults traditional
hostname hq-rtr
service integrated-vtysh-config
log syslog informational
interface gre1
ip ospf network point-to-point
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 ExamOSPF2026
router ospf
ospf router-id 1.1.1.1
passive-interface default
no passive-interface gre1
network 10.10.10.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
line vty
На BR-RTR используйте router-id 2.2.2.2, а вместо трёх HQ-сетей укажите 192.168.0.0/28. Ключ должен совпадать. passive-interface default запрещает соседство на всех интерфейсах, кроме явно разрешённого gre1, сохраняя объявление LAN-сетей.
chown frr:frr /etc/frr/frr.conf
chmod 640 /etc/frr/frr.conf
systemctl enable --now frr
systemctl restart frr
vtysh -c 'show ip ospf neighbor'
vtysh -c 'show ip route ospf'
Ожидается один сосед в состоянии Full, а в таблице маршрутов — сети противоположного офиса. При Init/ExStart проверяйте туннель, MTU и совпадение ключей.
6. Пользователи и SSH¶
На HQ-SRV и BR-SRV:
useradd -m -u 2026 sshuser
passwd sshuser
echo 'sshuser ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/sshuser
chmod 400 /etc/sudoers.d/sshuser
Пароль по заданию: P@ssw0rd. UID — числовой идентификатор пользователя; его проверяют командой id sshuser.
На HQ-RTR и BR-RTR создайте пользователя net_admin с тем же паролем и аналогичным правилом sudo. UID 2026 требуется только для sshuser.
В данной сборке Альт sudo проверяет режим 0400 для включаемых файлов. Если visudo -c сообщает о правах на файлы исходного cloud-образа, приведите их к тому же режиму.
На двух серверах создайте /etc/openssh/banner с единственной строкой Authorized access only. В /etc/openssh/sshd_config задайте:
Port 2026
PermitRootLogin no
PasswordAuthentication yes
PubkeyAuthentication yes
MaxAuthTries 2
AllowUsers sshuser
Banner /etc/openssh/banner
UsePAM yes
Subsystem sftp /usr/lib/openssh/sftp-server
sshd -t
visudo -c
systemctl enable --now sshd
systemctl restart sshd
ss -lntp | grep 2026
С другой ВМ проверьте ssh -p 2026 sshuser@192.168.100.2, затем sudo -n id. Должны появиться баннер и uid=0(root) без повторного ввода пароля. Подключение по SSH пользователем root должно отклоняться. Консоль Proxmox при этом остаётся отдельным способом входа.
На маршрутизаторах для входа net_admin используйте порт 22, PasswordAuthentication yes и AllowUsers net_admin в /etc/openssh/sshd_config. В исходном cloud-образе парольная SSH-аутентификация была отключена; одного создания пользователя недостаточно.
7. DHCP на HQ-RTR¶
DHCP передаёт клиенту адрес, маску, шлюз, DNS и доменный суффикс. Сервер здесь — HQ-RTR; служба DNS на нём не нужна.
apt-get install -y dnsmasq
Файл /etc/dnsmasq.conf:
port=0
interface=eth1.200
bind-interfaces
dhcp-authoritative
dhcp-range=192.168.200.10,192.168.200.30,255.255.255.224,12h
dhcp-option=option:router,192.168.200.1
dhcp-option=option:dns-server,192.168.100.2
dhcp-option=option:domain-name,au-team.irpo
dhcp-host=02:26:00:01:06:00,192.168.200.10,hq-cli,infinite
Последняя строка закрепляет адрес за MAC-адресом HQ-CLI, чтобы его A/PTR-записи оставались правильными. Для комплекта 201–206 MAC — 02:26:00:02:06:00. Сверяйте его с ip link на клиенте. Адрес маршрутизатора .1 вне диапазона выдачи.
dnsmasq --test
systemctl enable --now dnsmasq
systemctl restart dnsmasq
На HQ-CLI для eth0 задайте BOOTPROTO=dhcp, примените systemctl restart network и проверьте:
ip -4 address show eth0
ip route
cat /etc/resolv.conf
Ожидается 192.168.200.10/27, шлюз 192.168.200.1, DNS 192.168.100.2, домен au-team.irpo. Если адреса нет, проверьте access VLAN 200 на порту клиента и транк HQ-RTR, затем journalctl -u dnsmasq на маршрутизаторе.
8. DNS на HQ-SRV¶
В эталоне DNS реализован через dnsmasq. Здесь, в отличие от HQ-RTR, включён порт 53 и нет диапазона DHCP. host-record создаёт прямую и обратную запись; address задаёт ответ на запрос адреса имени.
apt-get install -y dnsmasq
/etc/dnsmasq.conf:
port=53
listen-address=127.0.0.1,192.168.100.2
bind-interfaces
no-resolv
server=77.88.8.8
server=1.1.1.1
domain-needed
bogus-priv
local=/au-team.irpo/
host-record=hq-rtr.au-team.irpo,192.168.100.1
host-record=hq-srv.au-team.irpo,192.168.100.2
host-record=hq-cli.au-team.irpo,192.168.200.10
address=/br-rtr.au-team.irpo/172.16.2.2
address=/br-srv.au-team.irpo/192.168.0.2
address=/isp.au-team.irpo/172.16.1.1
address=/docker.au-team.irpo/172.16.1.1
address=/web.au-team.irpo/172.16.2.1
no-resolv предотвращает чтение собственных клиентских настроек DNS сервером: внешние запросы отправляются только на указанные server.
dnsmasq --test
systemctl enable --now dnsmasq
systemctl restart dnsmasq
На HQ-SRV для самого сервера укажите nameserver 127.0.0.1; на BR-SRV и офисных маршрутизаторах — nameserver 192.168.100.2. Для сохранения настроек используйте /etc/net/ifaces/eth0/resolv.conf, затем примените конфигурацию сети. HQ-CLI получает эти параметры по DHCP.
Проверки с HQ-CLI:
dig +short hq-srv.au-team.irpo # 192.168.100.2
dig +short -x 192.168.100.1 # hq-rtr.au-team.irpo.
dig +short -x 192.168.100.2 # hq-srv.au-team.irpo.
dig +short -x 192.168.200.10 # hq-cli.au-team.irpo.
dig +short docker.au-team.irpo # 172.16.1.1
dig +short web.au-team.irpo # 172.16.2.1
dig +short mirror.yandex.ru # внешний адрес
9. Итоговая проверка и отчёт¶
- Проверьте FQDN, адреса и часовой пояс всех ВМ.
- На маршрутизаторах проверьте
ip_forward=1, состав VLAN,Fullу единственного OSPF-соседа и маршруты противоположного офиса. - С HQ-CLI выполните
ping 192.168.100.2иping 192.168.0.2. - Проверьте A/PTR-записи и внешние имена.
- Проверьте SSH на обоих серверах, запрет входа root, UID 2026 и
sudo -n idдля sshuser. - Откройте внешний сайт с клиента. IP-связность без DNS не является полной проверкой доступа.
- Перезагрузите ВМ и повторите проверки.
Для преподавателя эти проверки частично автоматизированы:
python3 scripts/verify-module1.py --base 200
В отчёт включите таблицу адресации, схему VLAN, параметры GRE, OSPF и его защиты, настройки DHCP и подтверждения проверок. Имя итогового файла по заданию: ФамилияУчастникаМодуль1.