Oxidized - cистема управления конфигурациями сетевого оборудования
В этой статье мы через Docker Compose соберём единый стек, включающий:
- систему бэкапов конфигураций сетевого оборудования Oxidized
- хранение конфигураций в Git
- отдельный Nginx-proxy, который ограничивает доступ по IP
- единую Docker-сеть
- удобную структуру каталогов и конфигураций
Структура проекта:
/opt/docker/oxidized-stack/
├── app
│ ├── config
│ ├── logs
│ ├── pid
│ ├── router.db
│ └── Routers.git
├── docker-compose.yml
└── nginx
└── conf.d
└── nginx.conf
Объединяем Nginx-proxy и Oxidized в один стек через docker-compose.yml:
mkdir -p /opt/docker/oxidized-stack/app
mkdir -p /opt/docker/oxidized-stack/nginx/conf.d/
nano /opt/docker/oxidized-stack/docker-compose.yml
version: "3.9"
services:
nginx-proxy:
image: nginx:latest
container_name: nginx-proxy
restart: always
ports:
- "80:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
networks:
- nginx-proxy
oxidized:
image: oxidized/oxidized:latest
container_name: oxidized
restart: always
environment:
CONFIG_RELOAD_INTERVAL: 900
volumes:
- ./app:/home/oxidized/.config/oxidized/
networks:
- nginx-proxy
networks:
nginx-proxy:
driver: bridge
Конфигурация Nginx:
nano /opt/docker/oxidized-stack/nginx/conf.d/nginx.conf
server {
listen 80 default_server;
server_name _;
return 200 'Site under construction';
add_header Content-Type text/plain;
}
server {
listen 80;
server_name oxidiz.asterisker.com;
allow 192.168.77.0/24;
deny all;
location / {
proxy_pass http://oxidized:8888;
}
}
Конфигурация Oxidized:
nano /opt/docker/oxidized-stack/app/router.db
# https://github.com/ytti/oxidized/blob/master/docs/Supported-OS-Types.md
# MikroTik_Office:routeros:192.168.88.1:22:Routers:username:password
# Cisco_Office:routeros:192.168.88.1:22:Routers:username:password:enable_password
### MSK
# Routers
MSK_MTK_CCR2116:routeros:192.168.88.17:22:Routers # логин и пароль берется из config
MSK_Cisco_C4431:ios:192.168.88.22:22:Routers:oxidized:Passw@rd:enable_Passw@rd
# ASA
MSK_Cisco_ASA_1:asa:192.168.88.16:22:ASA:oxidized:Passw@rd:enable_Passw@rd
# Switchs
MSK_HPE_A2530_1:procurve:192.168.88.3:22:Switchs:admin:Passw@rd
nano /opt/docker/oxidized-stack/app/config
---
username: oxidized # логин по умолчанию
password: P<pDr7GFaM#wGTY@ # пароль по умолчанию
model: routeros # промт (модель) по умолчанию
resolve_dns: true
interval: 14400
use_syslog: false
debug: false
run_once: false
threads: 30
use_max_threads: false
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: 0.0.0.0:8888
next_adds_job: false
vars: {}
groups: {}
group_map: {}
models: {}
pid: "/home/oxidized/.config/oxidized/pid"
crash:
directory: "/home/oxidized/.config/oxidized/crashes"
hostnames: false
stats:
history_size: 10
input:
default: ssh
debug: false
ssh:
secure: false
ftp:
passive: true
utf8_encoded: true
output:
default: git
git:
user: oxidized
email: admin@asterisker.com
repo: "/home/oxidized/.config/oxidized/devices.git"
source:
default: csv
csv:
file: "/home/oxidized/.config/oxidized/router.db"
delimiter: !ruby/regexp /:/
map:
name: 0
model: 1
ip: 2
port: 3
group: 4
username: 5
password: 6
vars_map:
enable: 7
gpg: false
model_map:
juniper: junos
cisco: ios
Запуск стека:
cd /opt/docker/oxidized-stack/
docker-compose up -d
docker-compose ps
docker-compose logs -f
Проверяем: http://oxidiz.asterisker.com
Настройка пользователей на сетевом оборудовании с правами чтения:
# MikroTik
/user add name="oxidized" password="Passw@rd" group=read
# Cisco IOS
username oxidized privilege 1 secret Passw@rd
# enable secret Passw@rd должен быть уже ранее установлен
# Cisco ASA
username oxidized password Passw@rd privilege 1
#This is your first login. Please set a new password before proceeding.
#Enter old password: Passw@rd
#Enter new password: Passw@rd
#Confirm new password: Passw@rd
# enable secret Passw@rd должен быть уже ранее установлен
# HPE
используем учетную запись admin с ролью manager