Как лучше с микротика отправить пакет udp пакет на определённый порт? Или как на нем организовать клиент port knocking?

Ссылка скопирована
1 ответ

По вводным: имеется linux сервер с настроенным knockd который настраивает iptables, а именно заменяет один dst порт на другой у пакетов с определённым src IP.
По вводным: имеется несколько клиентов микротиков с динамические IP.
По вводным: нужно сделать так чтобы микротики могли настроить iptables на сервере линукса внося туда свои ip.
Сейчас ситуация такая: вариант установить openwrt и с него отправлять необходимые пакеты не подходит.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Редакция DevOps Ответ

На MikroTik можно организовать аналог port knocking без OpenWRT. Самый простой вариант — отправлять UDP-пакет с самого RouterOS через встроенный tool, а на Linux-сервере knockd будет видеть исходный публичный IP микротика и добавлять его в iptables/nftables. Вопрос в том, какой способ доступен в вашей версии RouterOS.

Если достаточно отправить UDP на порт, в RouterOS можно использовать /tool fetch для TCP/HTTP, но для чистого UDP он не подходит. Для port knocking чаще используют один из вариантов:

  • скрипт с /tool netwatch и обращением к HTTPS endpoint на сервере;
  • WireGuard/IPsec как нормальный защищённый канал вместо knock;
  • UDP knock через встроенные возможности, если конкретная версия RouterOS поддерживает нужный tool;
  • на сервере принимать не knockd, а HTTPS-запрос с токеном и обновлять firewall.

На практике я бы не делал UDP knock как основное решение для динамических IP. Надёжнее поднять на Linux небольшой HTTPS endpoint, куда MikroTik ходит по scheduler:

/tool fetch url="https://example.com/knock?token=SECRET" keep-result=no

/tool fetch url="https://example.com/knock?token=SECRET" keep-result=no

На сервере endpoint смотрит реальный source IP запроса и добавляет его в firewall. В nginx/PHP это можно сделать аккуратно, но обязательно с токеном и ограничением частоты. Пример логики:

# псевдологика на сервере
ipset add mikrotik_clients "$REMOTE_ADDR" timeout 3600
iptables -t nat -A PREROUTING -m set --match-set mikrotik_clients src -p tcp --dport 1234 -j REDIRECT --to-ports 5678

# псевдологика на сервере ipset add mikrotik_clients "$REMOTE_ADDR" timeout 3600 iptables -t nat -A PREROUTING -m set --match-set mikrotik_clients src -p tcp --dport 1234 -j REDIRECT --to-ports 5678

Если нужен именно knockd, можно настроить последовательность TCP-портов и дергать их с MikroTik через TCP connect, но это менее удобно и хуже диагностируется. UDP-пакеты могут теряться, а за NAT/CGNAT исходный IP может быть не тем, что вы ожидаете.

Итог: технически клиент port knocking на MikroTik сделать можно, но для динамических клиентов лучше заменить knockd на HTTPS-token схему или WireGuard. MikroTik стабильно делает /tool fetch по расписанию, сервер видит актуальный внешний IP и обновляет firewall без OpenWRT и без ручного узнавания адресов.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно