net/README.md

140 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# exam-net — скрипты подготовки к ДЭ 09.02.06 (Сетевое и системное администрирование)
Автоматизация настройки стенда по заданиям 1–3 (источник — `tasks.md`).
Скрипты запускаются на соответствующих машинах (ISP, HQ-RTR, BR-RTR, BR-FW,
HQ-SRV, BR-SRV, HQ-CLI), все решения по адресации вынесены в переменные
в начале каждого скрипта.
Структура:
```
tools/subnet-calc.sh калькулятор подсетей (python3); каталог — под доп. инструменты
zadanie1/ скрипты задания 1 (сетевая инфраструктура)
zadanie2/ скрипты задания 2 (администрирование ОС)
zadanie3/ скрипты задания 3 (эксплуатация инфраструктуры)
check/ скрипты проверки стенда после каждого задания
QUESTIONS.md что проверить на стенде (имена пакетов/служб и т.д.)
TROUBLESHOOT.md шпаргалка: частые проблемы и способы их решения
MANUAL.md шаги, которые выполняются вручную
tasks.md текст заданий (КИМ)
example.sh старый пример стиля — можно игнорировать
```
## 1. Как скопировать репозиторий на машину
На любой Linux-машине стенда (РЕД ОС 8):
```bash
dnf install -y git # если git ещё нет
git clone https://git.belmpk.ru/kioroglo2410/net.git
cd net
```
## 2. Калькулятор подсетей
```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
```
- Числа — это АДРЕСА (включая адрес сети и broadcast). Суффикс `h` — число хостов
(`br_link=2h` → маска /30 для линка и туннеля).
- Вывод: минимальный префикс, адрес сети, маска, первый/последний адрес хоста,
broadcast — таблицей для отчёта и для заполнения переменных скриптов.
## 3. Порядок запуска скриптов
Задание 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. Все скрипты можно запускать повторно — конфиги перезаписываются,
строки не дублируются.
Порядок в заданиях 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, плейбук).
## 4. Какие переменные обязательны
Адресация вычисляется автоматически по схеме из `tools/subnets.py` —
вверху файлов настроек остаётся одна (или две) переменных:
| Файлы | Переменная | Описание |
|---|---|---|
| `zadanie1/hq-*.sh` | `HQ_BASE="10.10.100.0/24"` | базовая сеть HQ: VLAN100=+0/27, VLAN200=+32/28, VLAN999=+48/29; роутер=+1, сервер=+2 |
| `zadanie1/br-*.sh` | `BR_BASE="10.10.200.0/24"` | базовая сеть BR: BR-SRV=+0/28, линк к BR-FW=+32/30; BR-FW=+1, BR-SRV=+2, BR-RTR=+1 на линке |
| `zadanie1/hq-srv.sh` | `HQ_CLI_IP=""` | единст­венную непрогнозируемую: адрес HQ-CLI после выдачи DHCP (вписать потом) |
| `zadanie1/isp.sh` | `HOSTNAME_FQDN` | имя ISP — уже проставлено типовое `isp.au-team.irpo` |
Константы заданий (не править без нужды): линки ISP 172.16.1.0/28 и
172.16.2.0/28 (ISP=.1, роутер=.2), туннель GRE 10.10.10.0/30 (.1/.2),
DNS 8.8.8.8, порт SSH 2027, пароли P@ssw0rd, часовой пояс Asia/Yekaterinburg.
Интерфейсы: enp0s3=1-й NIC (WAN/к-ISP/серверные), enp0s8/enp0s9 = LAN.
Проверить свою схему можно командой:
```
python3 tools/subnets.py hq 10.10.100.0/24 && python3 tools/subnets.py br 10.10.200.0/24
```
## 5. Скрипты проверки (check/)
После каждого задания запускайте на соответствующей машине проверку:
```
check/zadanie1/hq-rtr.sh # и т.п. — имя машины == машина, где запускаем
```
- Скрипт только читает состояние (искл. — временный файл в NFS в одной
проверке). Вывод `[OK]/[FAIL]/[ПРОПУЩЕНО]` сохраняется в
`check_<машина>_<задание>.txt` рядом — приложите к отчёту.
- Заполните переменные в начале (адреса/интерфейсы); пустая переменная →
пункт `[ПРОПУЩЕНО]`, скрипт не падает.
- Код возврата не 0, если есть FAIL.
- Отдельные пункты требуют root (sshd -T, iptables, vtysh, samba-tool) —
видят `[ПРОПУЩЕНО (нужен root)]` без него.
## 6. Что собой представляет ручной шаг
Не всё автоматизируется честно (пароль админа домена, интерактивные установщики,
GUI). Такие места помечены в скриптах `ДЕЛАЕТСЯ ВРУЧНУЮ` и подробно описаны
в `MANUAL.md`. Порядок сохраняется вручную, а команды самопроверки — в конце
каждого скрипта.
## 7. Проверка результата
- Каждый скрипт настройки заканчивает блоком «=== Самопроверка ... ===» —
команды проверки (ping, dig, chronyc, lpstat, fail2ban-client status,
docker ps и т.д.).
- `bash -n <скрипт>` — проверка синтаксиса правок, которую вы делаете
при заполнении переменных.
- `check/<машинa>.sh` — полный отчёт (см. раздел 5).
## 8. Как я (ассистент) могу посмотреть состояние ваших машин
Двух путей — по выбору:
- **SSH-доступ** (проще всего, напрямую): машины должны быть доступны
с этой рабочей станции по сети (пароль/ключ). Тогда я смогу запускать
скрипты и читать вывод как на месте.
- **Без SSH, через git (достаточно для проверки):** запускаете check-скрипт
на машине, логи `check_<машина>_<задание>.txt` складываете в папку
`reports/` в репо и коммитите; я прочитаю их здесь и скажу, что чинить.
Быстро: `git add reports && git commit -m "логи проверки" && git push`.
## 9. Если что-то не работает
- Сначала check-скрипт соответствующей машины — он покажет, что именно FAIL.
- Затем откройте `TROUBLESHOOT.md` — частые проблемы и решения по темам
(сеть, GRE, OSPF, NAT, DHCP, SSH, DNS, mdadm, NFS, chrony, docker, nginx,
samba, fail2ban, сертификаты).
- Журналы службы: `journalctl -eu <служба> --no-pager | tail -30`.
- Имена пакетов/служб, которые могут отличаться на РЕД ОС 8 — смотри
`QUESTIONS.md`; соответствующие значения вынесены в переменные.
- Часовой пояс — везде переменная `EXAM_TZ`, поставь пояс места экзамена.
- Перед сдачей отчёта: `check_<машина>_<задание>.txt` из папки check —
приложить как доказательство.