Commit 43c5c8f8 authored by Vitaly Lipatov's avatar Vitaly Lipatov

CLAUDE.md: add documentation for DNS, NFS, Fail2ban, Proxmox

- DNS: ns1.etersoft.ru structure, zone files, nameservers - NFS: servers, 16 groups workaround, FS-Cache setup - Fail2ban: eterban integration with priv.etersoft.ru - Proxmox: VM management, SPICE connection hints - SSH: ALT Linux sshd_config path, StreamLocalBindUnlink - Various admin workflow notes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
parent 0f7b1be7
...@@ -16,7 +16,7 @@ etersoft-admin-essential is a collection of 340+ system administration scripts f ...@@ -16,7 +16,7 @@ etersoft-admin-essential is a collection of 340+ system administration scripts f
- `hdd/` - RAID, SSD failure handling, LVM caching, disk diagnostics - `hdd/` - RAID, SSD failure handling, LVM caching, disk diagnostics
- `mail/` - Mail queue management, account archival, spam handling - `mail/` - Mail queue management, account archival, spam handling
- `router/` - Network failover, traffic monitoring - `router/` - Network failover, traffic monitoring
- `dns/` - Domain management via NetBreeze/NIC - `dns/` - Domain management (NetBreeze/NIC для регистрации, BIND на ns1.etersoft.ru для зон)
**System Management:** **System Management:**
- `ansible/playbooks/` - Ansible playbooks for desktop upgrades, system setup, package management - `ansible/playbooks/` - Ansible playbooks for desktop upgrades, system setup, package management
...@@ -55,3 +55,212 @@ Playbooks are in `ansible/playbooks/`. Inventory is typically linked from `/root ...@@ -55,3 +55,212 @@ Playbooks are in `ansible/playbooks/`. Inventory is typically linked from `/root
```bash ```bash
ansible-playbook -i /root/.ansible/hosts ansible/playbooks/NAME.yml ansible-playbook -i /root/.ansible/hosts ansible/playbooks/NAME.yml
``` ```
- Ты помощник системного администратора и выполняешь задачи по моему указанию. Ведёшь себя осмотрительно и спрашиваешь при выполнении команд.
- Подключение к удалённым серверам либо без пользователя и потом sudo su -, либо сразу root@
- Используй всегда команды epm, если применимо. sudo перед epm не нужен, он сам повысит привилегии.
- Используй serv для управления сервисами, если применимо
- Для управления сервисами по возможности используй serv
- epm не надо предварять sudo
## NFS
### Серверы
- **aspetos** (homeserver, srvserver) — /home, /srv
- **spacer** (ftpserver) — /var/ftp/pub, /var/ftp/pvt, /var/ftp/tmp
### Проблема 16 групп
NFS v3 AUTH_SYS передаёт максимум 16 групп. Решение — включить `--manage-gids` на сервере:
```bash
# Создать drop-in для systemd
mkdir -p /etc/systemd/system/nfs-mountd.service.d
cat > /etc/systemd/system/nfs-mountd.service.d/manage-gids.conf << "EOF"
[Service]
ExecStart=
ExecStart=/usr/sbin/rpc.mountd --manage-gids
EOF
systemctl daemon-reload
systemctl restart nfs-mountd nfs-server
```
Настроено на: spacer
### FS-Cache (локальный кэш NFS)
Ускоряет повторное чтение файлов (до 12x). Настройка на клиенте:
```bash
# Установить
epm install cachefilesd
# Настроить лимиты в /etc/cachefilesd.conf (~10GB):
# brun 50%
# bcull 45%
# bstop 40%
# Запустить
serv cachefilesd on
serv cachefilesd start
# Перемонтировать с опцией fsc (remount не работает!)
umount /srv
mount -o fsc /srv
# Добавить fsc в /etc/fstab
```
Настроено на: white (/srv)
- Ты же администратор, а не разработчик. Сам не исправляй код сервисов и API
- epm rl для вывода репозиториев
- epm search ищет и по epm play тоже
- ты и так на builder (он же builder64)
- А что с ssh@builder?
- Надо сразу bug_add_comment с временем!
- Если тебе поручают задачи про сборку пакетов, отправляй к сборщику пакетов
## DNS
### Серверы
- **ns1.etersoft.ru** (91.232.225.10) — глобальный DNS, BIND
- **dhcp** — локальный DNS
### Доступ к ns1.etersoft.ru
SSH на порту 32 (не 22):
```bash
ssh -p 32 root@ns1.etersoft.ru
```
### Структура на ns1
- Конфиги: `/etc/bind/`
- `eterhost.conf` — зоны хостинга (azbyka)
- `ns4.etersoft.ru.conf` — slave зоны
- Зонные файлы: `/var/lib/bind/zone/`
- Git репозиторий: `/var/lib/bind/` (коммитить изменения после правок)
### Nameservers для хостинга
- ns1.azbyka.ru (91.232.225.10)
- ns2.azbyka.ru
### Изменение DNS записи
```bash
# 1. Редактировать зонный файл
ssh -p 32 root@ns1.etersoft.ru
vi /var/lib/bind/zone/DOMAIN.ru
# 2. Обязательно увеличить serial (формат YYYYMMDDNN)
# 3. Проверить синтаксис
named-checkzone DOMAIN.ru /var/lib/bind/zone/DOMAIN.ru
# 4. Перезагрузить зоны
rndc reload
# 5. Закоммитить изменения
cd /var/lib/bind
git add zone/DOMAIN.ru
git commit -m "DOMAIN.ru: описание изменений"
```
### Проверка
```bash
dig @ns1.etersoft.ru DOMAIN.ru A +short
dig @8.8.8.8 DOMAIN.ru A +short # проверка распространения
```
### Формат отчёта (для Телеграм)
```
Выполнено для {domain} на {ns-хост}:
- Serial: старый → новый
- A: старый_ip → новый_ip
- AAAA: удалена (или старый → новый)
```
## SSH
### ALT Linux sshd_config
Путь: `/etc/openssh/sshd_config` (не /etc/ssh/)
## Fail2ban
- На builder64 fail2ban следит за Failed password в sshd
- Через eterban передаёт блокировки на priv.etersoft.ru (шлюз)
- Блокировка распространяется на всю сеть Etersoft
## LXC контейнеры на Proxmox (PVE)
- `/dev/pts/ptmx` с правами 000 — не работает PTY для пользователей. Решение: бага Etersoft #15713
- Ошибки при обновлении filesystem из-за /proc, /sys — workaround там же
## Proxmox VM на gefest
Документация: https://wiki.office.etersoft.ru/Proxmox.Использование
### Создание клона VM
- Сервер: **gefest**
- Шаблоны: в разделе TestTemplates
- Именование: `USER-BUGNUMBER-OS` (например: lav-18725-ALTp11)
- Целевой узел: gefest
- Пул ресурсов: Testing
- Режим: "Связанная копия" для тестирования, "Полное клонирование" для шаблонов
### CLI команды
```bash
# Список VM
qm list
# Клонирование
qm clone VMID NEWID --name "NAME" --pool Testing --target gefest
# Запуск/остановка
qm start VMID
qm stop VMID
# SPICE консоль (получить .vv файл)
pvesh create /nodes/gefest/qemu/VMID/spiceproxy
```
### Доступ к VM
- Логин: `test` (или `guest` на старых)
- Пароль: `123` (или `1234`, `12345` если ОС требует длиннее)
- Консоль: SPICE (virt-viewer) или noVNC в браузере
### Запуск GUI приложений через SSH
Если на целевой машине есть графическая сессия пользователя:
```bash
# Найти DISPLAY из процессов
ssh lav@HOST "for pid in \$(pgrep -u lav); do d=\$(grep -z '^DISPLAY=' /proc/\$pid/environ 2>/dev/null | tr '\0' '\n'); [ -n \"\$d\" ] && echo \"\$d\" && break; done"
# Запустить приложение с найденным DISPLAY
ssh lav@HOST "DISPLAY=:0.0 приложение &"
```
Работает потому что процесс наследует ~/.Xauthority пользователя.
### SPICE консоль через CLI
```bash
ssh lav@lav 'DATA=$(ssh root@gefest "pvesh create /nodes/gefest/qemu/VMID/spiceproxy --proxy gefest.office.etersoft.ru --output-format=json")
cat > ~/tmp/claude/vm.vv << EOF
[virt-viewer]
password=$(echo "$DATA" | jq -r ".password")
host=$(echo "$DATA" | jq -r ".host")
toggle-fullscreen=Shift+F11
secure-attention=Ctrl+Alt+Ins
release-cursor=Ctrl+Alt+R
title=$(echo "$DATA" | jq -r ".title")
delete-this-file=0
host-subject=$(echo "$DATA" | jq -r ".\"host-subject\"")
ca=$(echo "$DATA" | jq -r ".ca")
proxy=http://gefest:3128
tls-port=$(echo "$DATA" | jq -r ".\"tls-port\"")
type=spice
EOF
DISPLAY=:0.0 remote-viewer ~/tmp/claude/vm.vv'
```
Запускать с `run_in_background: true` (не использовать `&`).
Важно: `proxy=http://gefest:3128` — короткое имя, и обязателен `host-subject`.
### Правила
- Не работать в чужих VM без спроса
- Выключать VM когда не используется
- Удалять VM когда больше не нужна
- Не использовать гибернацию (может зависнуть навсегда)
- Использовать снапшоты для возможности отката
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment