140 lines
9.3 KiB
Markdown
140 lines
9.3 KiB
Markdown
# 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 —
|
||
приложить как доказательство.
|