Документация: README, QUESTIONS, MANUAL, TROUBLESHOOT

This commit is contained in:
parent 0f6b3d28d5
commit 09bf7c2bbc
4 changed files with 439 additions and 70 deletions

114
MANUAL.md Normal file
View file

@ -0,0 +1,114 @@
# MANUAL.md — шаги, которые нельзя (или не нужно) автоматизировать
Пополняется по мере работы над заданиями 2 и 3.
## Задание 1
### BR-FW — если оказался НЕ Linux
1. Смотрим, какая система стоит на ВМ BR-FW (например EcoRouter или другой МСЭ).
2. Настраиваем по логике из zadanie1/br-fw.sh:
- имя br-fw.au-team.irpo;
- интерфейс к BR-RTR: адрес из сети /30 (адресация — из таблицы 2);
- маршрут по умолчанию через адрес BR-RTR (в сети /30);
- интерфейс к BR-SRV: адрес BR-FW в сети ≤16 адресов;
- OSPF: соседство с BR-RTR, рекламируем сети линка и сети BR-SRV;
- протокол OSPF разрешаем ТОЛЬКО на интерфейсе к BR-RTR;
- часовой пояс по месту экзамена.
3. Отчёт: заполняем раздел «коммутация/маршрутизация офиса BR».
### Таблица 2 и таблица 3
- Заполняются вручную из вывода tools/subnet-calc.sh и из ip -4 -br address
на машинах (см. README.md, порядок запуска).
## Задание 2
### HQ-CLI: ввод в домен samba-DC
Команде join нужен пароль администратора домена, нельзя автоматизировать
без секрета в файле. Делается вручную:
1. Проверить DNS: адрес BR-SRV должен резолвиться (DNS BR-SRV в /etc/resolv.conf).
Проверка: `realm discover au-team.irpo` (если используется realmd) либо
`smbclient -L //br-srv.au-team.irpo -U administrator`.
2. Ввести в домен одним из способов (уточнить на стенде, какой стек стоит
на HQ-CLI: realmd+sssd или winbind):
- realmd: `realm join au-team.irpo -U administrator` (пароль спросит);
- sssd/winbind вручную: настроить krb5.conf, затем
`net ads join -U administrator`.
3. Включить вход доменных пользователей: pam/winbind/sss настроить
(`/etc/nsswitch` и sssd.conf), перезапустить службы, проверить:
`getent passwd hquser1`.
4. Проверяем: `getent passwd hquser1`, затем `su - hquser1` — вход работает.
5. Проверить правило sudo (файл /etc/sudoers.d/hq_group от hq-cli.sh):
`su - hquser1 -c 'sudo cat /etc/hostname'` и убедиться, что другие команды
(например `sudo vim`) под пользователем группы hq НЕ работают.
## Задание 2: Ansible — ключи на машины
После br-srv.sh ключ сгенерирован, его надо раскидать вручную (пароль
запрашивается интерактивно, автоматизации по ТЗ нет):
```
ssh-copy-id sshuser@<адрес HQ-SRV>
ssh-copy-id sshuser@<адрес HQ-CLI>
ssh-copy-id net_admin@<адрес HQ-RTR>
ssh-copy-id net_admin@<адрес BR-RTR>
```
Затем на BR-SRV: `ansible all -m ping` — все четыре машины должны ответить
`pong`. Если машина отвечает, а модуль не находит python — установить
python3: `dnf install -y python3`.
### HQ-CLI: Яндекс Браузер
- Если пакет есть в репозитории РЕД ОС 8: `dnf install -y yandex-browser`
(уточнить точное имя пакета).
- Если нет — скачать rpm из Образца/Additional.iso/локальной сети и
`dnf localinstall`. Отметить в отчёте действие установки.
## Задание 3
### Кибер Бэкап (HQ-SRV и агент на HQ-CLI)
Графический продукт, автоматизации через конфиги нет:
1. Устанавливаем сервер управления на HQ-SRV (пакет с ISO/сети — уточнить
источник, где именно дистрибутив).
2. В веб-интерфейсе создаём подразделение `irpo`, пользователя
`irpoadmin` с паролем `P@ssw0rd` (значения берём из задания 3 п. 9).
3. На HQ-CLI ставим агент с функциями узла хранилища, подключаем к серверу.
4. На HQ-CLI создаём директорию /backup, выбираем её устройством хранения.
5. Создаём план «копирование /etc и всех поддиректорий» для HQ-SRV.
6. Запускаем план, показываем результат, снимаем скриншоты для отчёта.
## Задание 3
### HQ-SRV: HTTPS на реверс-прокси (доставка сертификатов)
Сертификаты выпущены hq-srv.sh (zadanie3) в /etc/CA. Их надо вручную доставить:
1. На ISP скопировать сертификат web/docker-домена и ключ:
`scp /etc/CA/веб_домен.crt root@<адрес ISP>:/etc/nginx/`
(аналогично ключ .key).
2. На ISP поправить пути в zadanie3/isp.sh (TLS_CERT_FILE/TLS_KEY_FILE)
и запустить скрипт повторно — он перенастроит прокси на 443.
3. На HQ-CLI скопировать root.crt и запустить zadanie3/hq-cli.sh
(укажите CA_ROOT_FILE) — доверие установится, браузер без предупреждений.
4. Проверить в браузере HQ-CLI (если GUI есть) либо curl: `curl -v https://...`
### HQ-SRV: Кибер Бэкап 18 (или аналог)
1. Установить сервер управления (источник — Additional.iso/локальный
репозиторий, точка задания 3 п. 9; ПрИл_6 содержит точные шаги).
2. В веб-интерфейсе создать подразделение «irpo», пользователя
«irpoadmin» с паролем P@ssw0rd.
3. На HQ-CLI установить агент с функциями узла хранилища, подключить
агент к серверу HQ-SRV.
4. На узел HQ-CLI выбрать/создать директорию /backup как устройство
хранения в консоли сервера.
5. Создать план резервного копирования: HQ-SRV, директория /etc со всеми
поддиректориями, целевой узел хранения — HQ-CLI /backup.
6. Запустить план, проверить архив в хранилище. Отметить шаги в отчёте.
### HQ-CLI: подключение pdf-принтера (если CLI без CUPS)
lpadmin/lpoptions из zadanie3/hq-cli.sh должны работать в консоли. Если
на стенде требуется GUI-подключение (GUI может отсутствовать) — сделать
через system-config-printer или настройки окружения, отметить в отчёте способ.
### Импорт пользователей через import.sh (задание 3, п. 1)
1. Монтируем Additional.iso в каталог (переменная ISO_DIR=/mnt/iso в
скриптах задания 3).
2. Запускаем файл с образа: `bash /mnt/iso/import.sh` — скрипт сам запросит
путь к источнику, вводим `/mnt/iso/users.csv`. Импорт идёт со всеми
атрибутами. Повторно допустимо (см. задание 3 п. 1).
3. Проверка: `samba-tool user list` на BR-SRV; пользователи должны
логиниться на HQ-CLI вручную (`su - имя_пользователя`). Результат в отчёт.

104
QUESTIONS.md Normal file
View file

@ -0,0 +1,104 @@
# QUESTIONS.md — что нужно уточнить на стенде / у экзаменатора
Список пополняется по мере работы с заданиями 2 и 3.
## HQ-SW (задание 1)
- По tasks.md HQ-SW — виртуальный коммутатор; кто и чем его настраивает (это
отдельная ВМ? EcoRouter? встроенный коммутатор гипервизора?) — уточнить.
- Что от него требуется по заданию 1 (что тренировать руками):
- порт в сторону HQ-SRV — access VLAN 100;
- порт в сторону HQ-CLI — access VLAN 200;
- порт в сторону HQ-RTR — trunk с VLAN 100, 200 и 999 (HQ-RTR маршрутизирует
все VLAN через ОДИН адаптер, п. 4 задания 1);
- управление в VLAN 999: IP управления HQ-SW должен быть из сети VLAN 999
(не более 8 адресов по заданию).
- Часовой пояс на HQ-SW НЕ настраивается (п. 11 задания 1).
## РЕД ОС 8 — менеджер сети и имена пакетов/служб (ПРОВЕРИТЬ на стенде)
- Сетевой менеджер: NetworkManager с keyfiles
(/etc/NetworkManager/system-connections/*.nmconnection)? Или
netplan/ifup? Все скрипты задания 1 написаны под NetworkManager.
- Пакет/служба для сохранения iptables: iptables (пакет iptables-services,
служба iptables)? Если используется firewalld или nftables — обсудить
с экзаменатором, поменять подход NAT.
- OSPF-демон: frr (пакет frr, конфиг /etc/frr/frr.conf, служба frr) или
quagga? В скриптах — frr, файл /etc/frr/daemons правится sed'ом
(zebra=yes, ospfd=yes) — проверить, что файл такой существует.
- Пакет DHCP-сервера: dhcp-server (служба dhcpd, конфиг /etc/dhcp/dhcpd.conf)?
Или kea/dnsmasq? В zadanie1/hq-rtr.sh — dhcp.
- DNS-сервер на HQ-SRV выбран dnsmasq (простой, A-записи через hosts-файл).
PTR-записи: dnsmasq должен отдавать обратные записи по записям hosts —
ПРОВЕРИТЬ на стенде (dig -x адрес). Если экзаменатор требует полноценный
bind — переделать hq-srv.sh.
- SELinux на РЕД ОС 8: если Enforcing, для порта SSH 2027 нужен
semanage (пакет policycoreutils-python-utils) — проверено в скриптах,
но имена пакетов ПРОВЕРИТЬ.
## BR-FW
- Тип системы неизвестен (УТОЧНИТЬ). zadanie1/br-fw.sh написан под Linux.
Если это не Linux (EcoRouter/другой МСЭ) — настройки OSPF-соседа и
интерфейсов делаются по-своему, взять логику из скрипта как чек-лист.
## HQ-CLI
- Графика: по предварительным данным HQ-CLI — только терминал. Пункты
задания 2 (Яндекс Браузер) и задания 3 (Кибер Бэкап GUI, принтер в GUI)
делаем через консоль где возможно, остальное — MANUAL.md/вручную.
- Установлен ли на РЕД ОС 8 репозиторий с Яндекс Браузером (dnf)? Если нет —
rpm-пакет с флешки/ISO — уточнить, откуда брать пакет.
## Задание 2 (уточнения по ходу)
- chrony: путь конфига (/etc/chrony.conf?) и имя службы (chronyd?) на РЕД ОС 8.
- NFS: имя пакета (nfs-utils) и службы (nfs-server) на РЕД ОС 8.
- mdadm: имя файла конфигурации (/etc/mdadm.conf по заданию; RHEL-вариант
/etc/mdadm.conf может дополняться переменными mdadm.conf.d).
- Веб-приложение: пользователь службы apache на РЕД ОС 8 (apache или httpd?),
также формат данных для подключения БД в index.php — смотреть файл из ISO.
- Samba: точное имя пакета samba-dc и путь samba-tool; команда для порога
блокировки (--lockout-attempt / --lockout-threshold, зависит от версии);
имя администратора домена (administrator?).
- Ansible: пакет ansible-core vs ansible; пользователи SSH для каждой машины
(из задания 1: sshuser на серверах, net_admin на роутерах).
- Docker: пакет (docker-engine / docker-ce / podman?), имена файлов образов
в Additional.iso (site_latest, mariadb_latest — тары или директории?),
содержимое compose.yaml (маппинг портов на 8080?).
- Autofs: пакет autofs, служба autofs на РЕД ОС 8.
- Ввод HQ-CLI в домен: realmd+sssd или winbind — заранее выяснить стек.
- Подтверждение «пользователи группы hq имеют право аутентифицироваться на
HQ-CLI»: как проверять (sssd getent / su - hquser1).
- Яндекс Браузер: имя пакета в репозитории РЕД ОС 8 (yandex-browser-stable?)
или источник rpm.
- Проброс 8080 наружу: на какую сеть идут DNAT-правила (интерфейс ISP), и что
разрешён прохождение пакетов в цепочке FORWARD (политика ACCEPT).
## Проверки (папка check/)
- chrony: имя службы (chronyd?), формат вывода `samba-tool domain passwordsettings show`
(точные строки "minimum password length" и "bad password count/lockout") —
если на стенде слова другие, поправить grep в check/zadanie2/br-srv.sh.
- Лизинг DHCP у NM: /var/lib/NetworkManager/*.lease — файлы есть на РЕД ОС 8?
(check/zadanie1/hq-cli.sh).
- `trust list` (p11-kit) доступен на РЕД ОС 8 для проверки CA (check/zadanie3/hq-cli.sh).
- atop: параметр интервала (INTERVAL/LOGINTERVAL) и путь конфига — в check/zadanie3/hq-srv.sh это переменная.
- Кибер Бэкап: имя service unit на стенде (переменная BACKUP_SERVICE_PATTERN).
- curl на ISP: если nginx уже в https-режиме, HTTP-запрос вернёт 301 (норма);
подробности в check/zadanie3/isp.sh.
## Задание 3 (уточнения по ходу)
- ЦС «отечественные алгоритмы»: обычный openssl RSA/EC — гост-подписи не умеет.
Уточнить у экзаменатора, оправдывает ли RSA критерий (или требуется
ГОСТ-пакет, например crypto-pro/ViPNet — что доступно на стенде?).
- nginx: пакет и наличие рестаров ok (ПРОВЕРИТЬ на РЕД ОС 8).
- Обратный прокси: HQ-SRV/BR-SRV резолвятся с ISP только через статические
маршруты (office nets за маршрутизаторами) — с ISP curl пробовать до запуска.
- atop: какой конфиг-файл читает служба на РЕД ОС 8 (/etc/sysconfig/atop?
/etc/atop/atop.conf?) и как называется параметр интервала.
- cups-pdf: есть ли пакет в репозитории РЕД ОС 8; имя pdf-принтера по умолчанию
(обычно pdf); доступность порта 631 извне (файрвол/SELinux).
- fail2ban: доступен ли пакет на РЕД ОС 8 (нужен EPEL?), формат порта в jail
(2027) и backend systemd.
- Кибер Бэкап 18: откуда брать дистрибутив на стенде (ISO/файл-сервер).
- Плейбук из Additional.iso/playbook: какие переменные/инвентарь ожидает,
где создаёт отчёты PC-INFO (path в плейбуке может отличаться).
- import.sh: точно интерактивен? Если использует свой механизм вопросов —
подготовить ответы заранее (cat answers | import.sh) — изучить на стенде.
- HQ-CLI: update-ca-trust на РЕД ОС 8; есть ли поддержка ipp-подключения
принтера без GUI (lpadmin/lpoptions).

156
README.md
View file

@ -1,93 +1,109 @@
# net
# exam-net — скрипты подготовки к ДЭ 09.02.06 (Сетевое и системное администрирование)
Автоматизация настройки стенда по заданиям 1–3 (источник — `tasks.md`).
Скрипты запускаются на соответствующих машинах (ISP, HQ-RTR, BR-RTR, BR-FW,
HQ-SRV, BR-SRV, HQ-CLI), все решения по адресации вынесены в переменные
в начале каждого скрипта.
## Getting started
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
## Add your files
- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
- [ ] [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command:
Структура:
```
cd existing_repo
git remote add origin http://192.168.0.185/kioroglop/net.git
git branch -M main
git push -uf origin main
tools/subnet-calc.sh калькулятор подсетей (python3)
zadanie1/ скрипты задания 1 (сетевая инфраструктура)
zadanie2/ скрипты задания 2 (администрирование ОС)
zadanie3/ скрипты задания 3 (эксплуатация инфраструктуры)
QUESTIONS.md что проверить на стенде (имена пакетов/служб и т.д.)
MANUAL.md шаги, которые выполняются вручную
```
## Integrate with your tools
## 1. Как скопировать репозиторий на машину
- [ ] [Set up project integrations](http://192.168.0.185/kioroglop/net/-/settings/integrations)
На любой Linux-машине стенда (РЕД ОС 8):
```bash
dnf install -y git # если git ещё нет
git clone https://git.belmpk.ru/kioroglo2410/net.git
cd net
```
## Collaborate with your team
## 2. Калькулятор подсетей
- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
- [ ] [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/)
```bash
bash tools/subnet-calc.sh 172.16.0.0/16 hq_srv=32 hq_cli=16 mgmt=8 br_srv=16 br_link=2h tunnel=2h
```
## Test and Deploy
- Числа — это АДРЕСА (включая адрес сети и broadcast). Суффикс `h` — число хостов
(`br_link=2h` → маска /30 для линка и туннеля).
- Вывод: минимальный префикс, адрес сети, маска, первый/последний адрес хоста,
broadcast — таблицей для отчёта и для заполнения переменных скриптов.
Use the built-in continuous integration in GitLab.
## 3. Порядок запуска скриптов
- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/)
- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
Задание 1:
```
isp.sh -> HQ-RTR -> BR-RTR -> BR-FW -> HQ-SRV -> BR-SRV -> HQ-CLI
```
***
**Перед каждым запуском:**
1. Откройте скрипт (`vim zadanie1/isp.sh`) — заполните блок «ПЕРЕМЕННЫЕ»
в начале файла (адреса, интерфейсы, имена пакетов по заданиям).
2. Скрипт сам проверит заполнение и перечислит пустые переменные.
3. Запускайте от root: `sudo bash zadanie1/hq-rtr.sh` (или bash от root).
4. Все скрипты можно запускать повторно — конфиги перезаписываются,
строки не дублируются.
# Editing this README
Порядок в заданиях 2 и 3 зависит от связей; ориентировочно:
- задание 2: `br-srv.sh` (samba/policy) -> `hq-srv.sh` (RAID/NFS/web) ->
`hq-cli.sh` (NFS/chrony) -> `isp.sh` (chrony-сервер) -> роутеры (DNAT).
Перед этим вручную — ввод HQ-CLI в домен (MANUAL.md) и ssh-copy-id для ansible.
- задание 3: `hq-srv.sh` (ЦС, atop, cups, fail2ban) -> доставка сертификатов
(MANUAL.md) -> `isp.sh` (реверс-прокси, HTTPS после доставки cert) ->
`hq-cli.sh` (доверие CA, принтер) -> `br-srv.sh` (import.sh, плейбук).
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
## 4. Какие переменные обязательны
## Suggestions for a good README
Каждый скрипт в начале содержит блок переменных с комментариями. Пустые
(`""`) при запуске приведут к сообщению «Заполните переменные...» и exit 1.
Универсальные, которые заполняются на почти всех машинах:
- `*_IF` — имя сетевого интерфейса (`ip -br link` чтобы посмотреть);
- `*_ADDR`, `*_NET` — адреса из вашего расчёта (формат `адрес/префикс`);
- `*_GW` — шлюзы (адреса соседних роутеров);
- в задании 3 в `isp.sh` — `TLS_CERT_FILE`/`TLS_KEY_FILE` после доставки
сертификатов (MANUAL.md).
Порядок заполнения адресов: сначала `tools/subnet-calc.sh`, потом скрипты
в порядке раздела 3.
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
## 5. Скрипты проверки (check/)
## Name
Choose a self-explaining name for your project.
После каждого задания запускайте на соответствующей машине проверку:
```
check/zadanie1/hq-rtr.sh # и т.п. — имя машины == машина, где запускаем
```
- Скрипт только читает состояние (искл. — временный файл в NFS в одной
проверке). Вывод `[OK]/[FAIL]/[ПРОПУЩЕНО]` сохраняется в
`check_<машина>_<задание>.txt` рядом — приложите к отчёту.
- Заполните переменные в начале (адреса/интерфейсы); пустая переменная →
пункт `[ПРОПУЩЕНО]`, скрипт не падает.
- Код возврата не 0, если есть FAIL.
- Отдельные пункты требуют root (sshd -T, iptables, vtysh, samba-tool) —
видят `[ПРОПУЩЕНО (нужен root)]` без него.
## Description
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
## 6. Что собой представляет ручной шаг
## Badges
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
Не всё автоматизируется честно (пароль админа домена, интерактивные установщики,
GUI). Такие места помечены в скриптах `ДЕЛАЕТСЯ ВРУЧНУЮ` и подробно описаны
в `MANUAL.md`. Порядок сохраняется вручную, а команды самопроверки — в конце
каждого скрипта.
## Visuals
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
## 7. Проверка результата
## Installation
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
- Каждый скрипт заканчивает блоком «=== Самопроверка ... ===» — там и в
интерактиве печатаются команды проверки (ping, dig, chronyc, lpstat,
fail2ban-client status, docker ps и т.д.).
- `bash -n <скрипт>` — проверка синтаксиса правок, которую вы делаете
при заполнении переменных.
## Usage
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
## 8. Проверить частые неточности
## Support
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
## Roadmap
If you have ideas for releases in the future, it is a good idea to list them in the README.
## Contributing
State if you are open to contributions and what your requirements are for accepting them.
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
## Authors and acknowledgment
Show your appreciation to those who have contributed to the project.
## License
For open source projects, say how it is licensed.
## Project status
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
- РЕД ОС 8: имена пакетов/служб могут отличаться от указанных по умолчанию
(dnsmasq? frr? dhcp? nfs-utils?) — по пунктам смотри QUESTIONS.md;
соответствующие значения вынесены в переменные.
- Часовой пояс — везде переменная `EXAM_TZ`, поставь пояс места экзамена.

135
TROUBLESHOOT.md Normal file
View file

@ -0,0 +1,135 @@
# TROUBLESHOOT.md — шпаргалка: частые проблемы и решения
Правило работы: сначала запустите check-скрипт своей машины (он скажет, ЧТО
сломано), затем откройте соответствующий раздел ниже. Все команды безопасны,
кроме отмеченных ОСТОРОЖНО.
## 0. Универсальная диагностика (всегда начинать с этого)
```
ip -4 -br a && ip route # адреса и маршруты
ping -c2 <адрес соседа> # линк жив?
ss -tlnp # что слушает по TCP (нужен root)
ss -ulnp # что слушает по UDP (нужен root)
systemctl status <служба> --no-pager # прямая сводка о службе
journalctl -eu <служба> --no-pager | tail -30 # почему служба упала
```
## 1. Сеть / NetworkManager
| Симптом | Причина | Решение |
|---|---|---|
| «Connection activation failed» | нет кабеля, пустой блок [connection], конфликт профилей | `nmcli con show`, `nmcli dev status`; перезаписать профиль и `nmcli con up <имя>` |
| NM не видит файл .nmconnection | права файла не 600 | `chmod 600 <файл>`, затем `nmcli con reload` |
| Адрес есть, пингов нет | не туда воткнуто; нет маршрута по умолчанию; VLAN-порт не в trunk | проверять `ip route`; на HQ-SW порт к роутеру должен быть trunk с VLAN 100/200/999 |
| Резолвинг не работает | пустой resolv.conf / недоступен DNS | `cat /etc/resolv.conf`, `ping <DNS>`; `systemctl restart NetworkManager` после смены |
## 2. GRE
| Симптом | Причина | Решение |
|---|---|---|
| Туннель есть, пинга нет | в remote указан не тот адрес (нужен адрес роутера в сети ISP) | на ОБЕИХ сторонах `ip tunnel show`; сверить remote/local |
| Пинг от роутера к роутеру есть, от сервера нет | нет маршрутов к офисным сетям | пропишите офисные сети в OSPF (network + passive-interface) или статикой |
| Не переживает перезагрузку | профиль без autoconnect | `nmcli con modify gre1 connection.autoconnect yes` |
## 3. OSPF (frr)
| Симптом | Причина | Решение |
|---|---|---|
| Сосед есть, но офиса не видны | забыли `network <офисная_сеть> area 0` | `vtysh -c 'show running-config'` — сравнить со списком сетей |
| Сосед в 2WAY, не Full | обычной broadcast-сети DR/BDR; в point-to-point туннеле | проще на gre: `ip ospf network point-to-point` на обеих сторонах |
| Соседей нет совсем | network-предложение не совпадает с реальной сетью; интерфейс в passive | проверить network-записи; `passive-interface default` НЕ должен включать туннель |
| MD5 не работает | другой пароль/номер ключа/нет ip ospf authentication | на обоих: `ip ospf authentication message-digest` и ОДИНАКОВЫЙ ключ+пароль |
| OSPF не слушает frr | не включены демоны | ПРОВЕРИТЬ /etc/frr/daemons: zebra=yes, ospfd=yes, `systemctl restart frr` |
## 4. NAT / Интернет
| Симптом | Причина | Решение |
|---|---|---|
| Пинг IP 77.88.8.7 не идёт из офиса | нет MASQUERADE; ip_forward=0 | `iptables -t nat -L POSTROUTING -nv`; `cat /proc/sys/net/ipv4/ip_forward` |
| После reboot правила NAT пропали | iptables не сохранён | `iptables-save > /etc/sysconfig/iptables`, `systemctl enable iptables` (ПРОВЕРИТЬ имя) |
| Пинг IP есть, имена не резолвятся | нет DNS / NAT-адресации | `ping ya.ru`; проверка DNS-конфигурации (раздел 7) |
## 5. DHCP
| Симптом | Причина | Решение |
|---|---|---|
| Клиент не получает адрес | служба dhcpd не активна; client не в нужной сети; range заполнен | `systemctl status dhcpd` (ПРОВЕРИТЬ имя), `nmcli con up <интерфейс>` снова |
| dhcpd не стартует | ошибка конфига (range вне сети, нет subnet) | `dhcpd -t`; `journalctl -eu dhcpd` |
## 6. SSH (порт 2027)
| Симптом | Причина | Решение |
|---|---|---|
| Connection refused | sshd не перезапущен после смены порта; SELinux; firewall | `ss -tlnp \| grep 2027`; `getenforce` → `semanage port -a -t ssh_port_t -p tcp 2027`; `firewall-cmd --add-port=2027/tcp --permanent && firewall-cmd --reload` |
| Permission denied | AllowUsers не содержит пользователя; MaxAuthTries? | `sudo sshd -T | grep -E 'port|allowusers|maxauthtries|banner'` |
| Баннер не показывается | баннер-файл не существует/путь другой | путь в `sshd -T` должен существовать с текстом |
## 7. DNS (dnsmasq)
| Симптом | Причина | Решение |
|---|---|---|
| dig пустой / REFUSED | служба/ports/listen-address | `systemctl status dnsmasq`; `ss -ulnp \| grep 53`; listen-address должен включать 127.0.0.1 и адрес сервера |
| A есть, PTR нет | dnsmasq не выдаёт reverse по hosts | `dig -x <IP>`; при необходимости добавить reverse-зону явно (см. QUESTIONS.md) |
| Внешние имена не резолвятся | нет `server=<адрес>` (форвардер) | `dig +short ya.ru @127.0.0.1`; добавить server-строку, рестарт |
## 8. RAID/mdadm
| Симптом | Причина | Решение |
|---|---|---|
| после reboot нет md0 | нет ARRAY-строки в /etc/mdadm.conf; initramfs старый | строка ARRAY по UUID, затем `dracut -f` |
| mdadm: device busy | диски смонтированы/грязные | размонтировать; `wipefs -a /dev/vdX` ОСТОРОЖНО (только array-диски!) |
| /raid не монтируется | неверный UUID в fstab | `blkid /dev/md0`; сверить с fstab; `mount -a` покажет ошибку |
## 9. NFS
| Симптом | Причина | Решение |
|---|---|---|
| mount: access denied | сеть клиента не в exports | `exportfs -v`; поправить строку; `exportfs -ra` |
| mount: connection refused | службы rpcbind/nfs-server не активны | `systemctl enable --now rpcbind nfs-server` (ПРОВЕРИТЬ имена); `ss -tlnp \| grep 2049` |
| Permission denied при записи | права ФС каталога | `ls -l /raid/nfs`, выставить владельца/права |
## 10. chrony
| Симптом | Причина | Решение |
|---|---|---|
| Stratum 10 | нет синхронизации с upstream | `chronyc sources -v`; доступен ли upstream; порт 123/udp |
| Клиенты не синхронизируются | нет allow <сеть> на сервере; firewall | добавить `allow <a.b.c.d/prefix>`, рестарт chronyd |
## 11. Docker
| Симптом | Причина | Решение |
|---|---|---|
| docker: command not found | пакет не установлен (или podman alias) | `dnf list installed \| grep -i dock`; соответствие пакету РЕД ОС 8 (ПРОВЕРИТЬ) |
| permission denied | docker требует root | `sudo docker ...` |
| compose: no such image | образ не загружен | `docker load -i <tar>`, затем `docker compose up -d` |
| 8080 не отвечает | контейнер упал | `docker ps -a`, `docker logs <id>`, `ss -tlnp | grep 8080` |
## 12. Nginx / apache / mariadb
| Симптом | Причина | Решение |
|---|---|---|
| nginx -t: [emerg] ... строка X | ошибка в exam-proxy.conf | поправить строку X; после правки `systemctl reload nginx` |
| 502 Bad Gateway | бэкенд недоступен с ISP (маршруты!) | `curl -v <бэкенд-IP:порт>` с ISP; если нет — статические маршруты или OSPF |
| 401 всё время | битый htpasswd | `printf "%s:%s\n" WEB "$(openssl passwd -apr1 'P@ssw0rd')" > файл` |
| виртуальный хост показывает дефолт | нет Host-маршрутизации | проверять server_name и какой блок ловит (nginx -t покажет; curl -H "Host: ...") |
| страница 500 | ошибки PHP/подключения к БД | `tail /var/log/httpd/error_log` (ПРОВЕРИТЬ путь на РЕД ОС 8); сверить учётные данные БД в index.php |
## 13. Samba DC
| Симптом | Причина | Решение |
|---|---|---|
| user create: password policy | пароль короче/проще политики | `samba-tool domain passwordsettings show`; ИСПОЛЬЗОВАТЬ пароль под политику |
| realm join fails | DNS BR-SRV не прописан на клиенте | `echo "nameserver <BR-SRV>" > /etc/resolv.conf`; тест `dig <домен>` |
| getent passwd hquser1 пусто | sssd/winbind не настроен/внизу | `systemctl status sssd`; логи; соглашение о формате имён группы ('hq' vs 'hq@домен') |
| sudo файл игнорируется | права не 440 / неверное имя группы | `chmod 440 /etc/sudoers.d/...`; имя группы сверить с getent |
## 14. fail2ban
| Симптом | Причина | Решение |
|---|---|---|
| не запускается | backend не видит журнал | в jail: `backend = systemd` (если используете journald) |
| IP не банится | maxretry/bantime не применились, jail не active | `sudo fail2ban-client status sshd`; проверьте порт 2027 в jail; `fail2ban-client reload` |
## 15. Сертификаты / https
| Симптом | Причина | Решение |
|---|---|---|
| certificate expired / not yet valid | уехало системное время | `timedatectl`; chrony должен тянуть время (задание 2) |
| unable to verify | клиент не доверяет корневому CA | root.crt в /etc/pki/ca-trust/source/anchors, `update-ca-trust` |
| браузер: CERT_AUTHORITY_INVALID | нет SAN или не доверие к CA | `openssl x509 -in cert -noout -ext subjectAltName`; домен ДОЛЖЕН быть в SAN |
## 16. Прочее
- Перезагрузка после большинства скриптов улучшает сходимость (особенно VLAN
и туннели). Ловить проблемы после reboot — пройтись check-скриптами.
- git clone падает по сертификату — на экзамене допустимо
`git config --global http.sslVerify false` (временно) или scp репозитория.
- Пустой DISPLAY? — всё по консоли, виртуальности GUI отсутствуют.
Если что-то сломалось не из этого списка: запустите check-скрипт машины,
посмотрите журналы (`journalctl -eu <служба> | tail -30`) и поиском по этому
файлу — похожие симптомы.