Приложение для управления отдельными настройками Mikrotik?
Хочется странного. Но логичного. Надо чтобы было приложение Linux GTK ( + Android) которое бы смогло делать одну простую и понятную вещь - делать Enable/Disable правила Mangle. Это надо для включения-выключения VPN на роутере для отдельных IP.
Т.е. нужен по сути сильно-сильно упрощенный функционал WinBox для совсем маленьких. Кнопка Вкл/Выкл (+ настройка авторизации конечно и настройка команды). Я конечно могу это реализовать через api или ssh скрипт и написать программу, но во 1-х лень, а во 2-х может кто-то уже подобное делал? Может кто-то встречался с подобным?
Такими извращениями никто не занимается. Есть винбокс, им и работаем. Нет винбокса - ssh в помощь. И да, совсем маленьким - длинк. В микротик только взрослым дядям.
чатгпт знает ответ. Пример на питоне, но можно пораспрашивать и про другие языки, конечно.
Короткий ответ: используем API
import routeros_api
# Connect to MikroTik
connection = routeros_api.RouterOsApiPool(
host='192.168.88.1',
username='admin',
password='yourpassword',
port=8728, # default API port
plaintext_login=True
)
api = connection.get_api()
# 1. Access the mangle resource
mangle = api.get_resource('/ip/firewall/mangle')
# 2. Find the rule by comment (or any identifier)
rules = mangle.get(comment='my-mangle-rule') # adjust to your comment
if rules:
rule_id = rules[0]['.id']
# 3. Disable the rule
mangle.set(id=rule_id, disabled='yes') # Use 'no' to enable
print("Mangle rule disabled.")
else:
print("Rule not found.")
muhamuha, я все это знаю, я же говорю, CLI приложение написать труда большого нет, но хочется же чтобы какой то UX был, а я его не умею. Если у кого то была такая задача, нафига я буду изобретать?
Кстати, в твоем коде ошибка, должно быть как то так:
spoiler
import routeros_api
import sys
import pprint
HOST = '192.168.1.1'
USERNAME = 'user'
PASSWORD = '********'
API_PORT = 8728
USE_SSL = False
MANGLE_RULE_COMMENT = 'VPN4AlexS23U'
connection = None
try:
print(f"Connecting to MikroTik device at {HOST}:{API_PORT}...")
connection = routeros_api.RouterOsApiPool(
host=HOST,
username=USERNAME,
password=PASSWORD,
port=API_PORT,
plaintext_login=True,
use_ssl=USE_SSL
)
api = connection.get_api()
print("Connection successful.")
mangle = api.get_resource('/ip/firewall/mangle')
print(f"Searching for mangle rule with comment: '{MANGLE_RULE_COMMENT}'...")
rules = mangle.get(comment=MANGLE_RULE_COMMENT)
if rules:
rule_data = rules[0]
if 'id' in rule_data:
rule_id = rule_data['id']
rule_dis = rule_data['disabled']
print(f"Found rule with ID: {rule_id}")
# ON/OFF the found rule
if rule_dis == "true":
print("Enabling the rule...")
mangle.set(id=rule_id, disabled='no')
print("Mangle rule enabled successfully.")
else:
print("Disabling the rule...")
mangle.set(id=rule_id, disabled='yes')
print("Mangle rule disabled successfully.")
else:
print("Error: The found rule does not have a valid '.id' key.", file=sys.stderr)
print("Full rule data for debugging:", file=sys.stderr)
pprint.pprint(rule_data, stream=sys.stderr)
sys.exit(1)
else:
print(f"Error: Rule with comment '{MANGLE_RULE_COMMENT}' not found on the device.", file=sys.stderr)
sys.exit(1)
except routeros_api.exceptions.RouterOsApiError as e:
print(f"An API error occurred: {e}", file=sys.stderr)
sys.exit(1)
except Exception as e:
print(f"An unexpected error occurred: {e}", file=sys.stderr)
sys.exit(1)
finally:
if connection:
print("Disconnecting from MikroTik.")
connection.disconnect()
Я что-то подобное делал: добавил в home assistant, вывел выключатель QoS в интерфейс. Интеграция с гитхаба умеет много чего по сравнению со стандартной, в том числе и переключать мангл. Но вариант специфичный, подойдёт не каждому.
Drno, мне нужна простая и понятная прога на Linux и Ведро, что я и написал в вопросе, желательно на несколько килобайт, а ты предлагаешь ставить абсолютно бесполезного, глючного и небезопасного монстра только ради одной функции вкл/выкл VPN? Где логика то?
Drno, что значит "раздельную маршрутизацию"? Split tunneling что-ли?
Да и потом, сделать что угодно можно. Но задача такова, какова она есть, и больше она не какова. Надо чтобы пользователи внутри сети включали и выключали себе правило ибо им так проще и не надо клиентов VPN ставить и заморачиваться со списком адресов (который, к слову в любом случае будет неполным). Надо VPN - включил, не надо - выключил.
AlexVWill, и кстати - в Ваем вопросе нигде не было указано что это для офиса и для конечных пользователей...
ну сделайте на пайтоне скрипт который будет нужное по API дергать, самое жеж простое...