Skip to content

небольшой сервис для быстрого переключения маршрутов средствами маршрутизатора под управлением RouterOS

Notifications You must be signed in to change notification settings

Haw41k/gw-switch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GW Switch

Gateway switch - небольшой сервис для быстрого переключения маршрутов средствами маршрутизатора под управлением RouterOS. Пользователь может самостоятельно зайти на страницу сервиса и выбрать нужный маршрут для его IP, например через VPN.

Есть 2 режима работы:

  1. route-tables - создание правил маршрутизации для IP пользователя (режим по умолчанию)
  2. ip-lists - добавление IP пользователя в нужный список фаервола (address-list)

Сборка и запуск приложения (для работы требуется минимум 11 версия java):

  1. Делаем копию репозитория в нужный каталог:
    • git clone https://github.com/Haw41k/gw-switch.git
  2. В каталоге скачанного проекта используем mvnw (Maven Wrapper):
    • mvnw spring-boot:run для запуска сервиса без упаковки в JAR.
    • mvnw package для упаковки приложения в JAR. Последующий запуск java -jar [путь к jar файлу].
    • После сборки файлы будут находиться в каталоге target
  3. Для работы потребуется конфигурационный файл, который нужно поместить в домашний каталог пользователя:
    • [домашний каталог пользователя]/gw-switch/config/application.yml

Пример конфигурационного файла:

gw-switch:
  # режим работы сервиса: ip-lists или route-tables, по умолчанию route-tables
  mode: route-tables
  
  # раз в сутки (00:00) чистит правила или списки, по умолчанию false.
  auto-clean: true
  
  # активирует защищённое соединение с маршрутизатором, по умолчанию false
  # требует от маршрутизатора использования валидного сертификата
  tls-enabled: true
  
  # сервис помечает комментарием созданные им записи, используется при автоочистке.
  # по умолчанию значение "gw-switch"
  comment: gw-switch
  
  routers:
  - ip: 192.168.50.10
    user: api
    password: api
    gateways:
    # id - имя таблицы машрутизации
    # name - название в интерфейсе пользователя
    - id: rtab-1
      name: gw1
    - id: rtab-2
      name: gw2

Сервис по умолчанию запускается на 8080 порту, для изменения, в конфигурацию нужно добавить:

server:
  port: [порт]

Для работы с reverse proxy требуется передача http заголовка: X-Forwarded-For

Рекомендации:

Для работы с API стоит создать отдельного пользователя и отдельную группу для него, с политиками: read, write, api

настройка TLS:

Для работы с API через TLS потребуется валидный сертификат, либо можно использовать самоподписанный сертификат, который нужно добавить в хранилище JDK (JRE).

Самый простой способ сделать самоподписанный сертификат на стороне RouterOS:

  1. Создаём CA:
    • /certificate/add name=local-ca common-name=mikrotik key-usage=key-cert-sign days-valid=3650
  2. Подписываем CA:
    • /certificate/sign local-ca
  3. Сертификат должен быть Trusted, если такой отметки нет то делаем:
    • /certificate/set local-ca trusted=yes
  4. Создаём рабочий сертификат:
    • /certificate/add name=tls-cert common-name=mikrotik-tls subject-alt-name=IP:<IP маршрутизатора>
  5. Подписываем его при помощи CA:
    • /certificate/sign tls-cert ca=local-ca
  6. Сертификат должен быть Trusted, если такой отметки нет то делаем:
    • /certificate/set tls-cert trusted=yes

Теперь настраиваем сервис защищённый API:

/ip/service/set api-ssl certificate=tls-cert disabled=no

После всех настроек нужно экспортировать сертификат CA:

/certificate/export-certificate local-ca

Подробнее о работе с сертификатами в RouterOS.

Скачиваем наш CA сертификат, после чего добавляем его в хранилище JDK, используя штатную утилиту keytool:

keytool -importcert -alias <имя под которым будет храниться сертификат> -cacerts -file <путь к файлу>

Для доступа к хранилищу используйте пароль по умолчанию changeit. После импорта можно использовать защищённое соединение.

У каждой версии JDK своё хранилище доверенных центров сертификации (вы можете рядом держать несколько версий). По этому будьте внимательны, сертификат должен быть установлен в той версии, при помощи которой вы запускаете приложение.

  • Утилита KeyTool: <путь до JDK>/bin/keytool
  • Файл хранилища: <путь до JDK>/lib/security/cacerts

About

небольшой сервис для быстрого переключения маршрутов средствами маршрутизатора под управлением RouterOS

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published