Перейти к основному содержимому

Развёртывание Oxidized + Nginx-proxy

·414 слов·2 минут
Блог о Сетях, Инфраструктуре и DevOps
Автор
Блог о Сетях, Инфраструктуре и DevOps
DevOps, Infrastructure Engineer, Expert Cyber Security

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

Интерфейс Oxidized

Настройка пользователей на сетевом оборудовании с правами чтения:

# 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

Related

Как устроен IPSec VPN
·768 слов·4 минут
Тестирование скорости сети с помощью iperf
·225 слов·2 минут
Как обновить прошивку на MikroTik
·425 слов·2 минут