Knockd на DD‑WRT: скрытый доступ к роутеру
TL;DR
Knockd — это демон «стука по портам», который позволяет скрыть сервисы роутера, открывая доступ только после правильной последовательности пакетов. В статье показано, как установить и настроить knockd на DD‑WRT, реализовать удалённый Wake‑On‑Lan, запускать «стук» с Android и компьютера, а также даны рекомендации по безопасности и отладке.
Быстрые ссылки
Обзор
Последствия для безопасности
Требования и рекомендации
Начало работы
Автозапуск
Stук с Android
Замечания и дополнительные материалы

Have you ever wanted to have that special “dorm knock” with your router, as to have it only “open the door” when the secret knock has been recognized? How-To Geek explains how to install the Knock daemon on DD-WRT.
Image by Bfick and Aviad Raviv
Если вы ещё не читали, рекомендую предыдущие статьи серии:
- Turn Your Home Router Into a Super-Powered Router with DD-WRT
- How To Install Additional Software On Your Home Router (DD-WRT)
- How to Remove Advertisements with Pixelserv on DD-WRT
Предполагается, что вы знакомы с этими темами. Руководство техническое — осторожность при моддинге роутера обязательна.
Обзор
Традиционно для общения с удалённым сервисом требуется устанавливать полноценное сетевое соединение, что увеличивает поверхность атаки. Демон knockd — это сетевой «сниффер», который отслеживает пакеты и реагирует на заранее заданную последовательность попыток подключения к портам. Поскольку сам TCP/UDP-соединение не обязателен для распознавания «стука», поверхность атаки уменьшается при сохранении нужной функциональности. По сути, мы заранее «условим» роутер реагировать на определённую последовательность пакетов.
В этой статье мы:
- Покажем, как использовать knockd для пробуждения компьютера в локальной сети с помощью Wake‑On‑Lan.
- Поясним, как инициировать последовательность со смартфона Android и с компьютера.
Примечание: инструкции по установке пакетов могли устареть; видео‑серия автора даёт исторический обзор настройки. Представление может быть простым, но техническая часть остаётся полезной.
Последствия для безопасности
Вопрос «насколько безопасен knockd?» обсуждается давно. Главное правило:
Knock — это слой безопасности через затемнение (security by obscurity). Его следует использовать как дополнение к надёжным средствам — шифрованию, ограничению доступа по спискам, VPN — но не как единственное средство защиты.
Важно: не храните в открытом виде ключи/пароли рядом с конфигами, следите за правами на файлы и логами.
Требования, допущения и рекомендации
- Нужен роутер с DD‑WRT и пакетным менеджером opkg (Opkg-enabled DD‑WRT).
- Подготовьтесь — настройка иногда занимает время и требует внимательности.
- Рекомендуется иметь DDNS‑учётную запись для внешнего динамического IP.
Начало работы
Установка и базовая конфигурация
Установите демон knockd на роутере, открыв терминал и выполнив:
opkg update ; opkg install knockdПосле установки нужно задать последовательности и команды, которые будут выполняться при срабатывании. Отредактируйте конфиг knockd.conf:
vi /opt/etc/knockd.confПример содержания файла конфигурации:
[options]
logfile = /var/log/knockd.log
UseSyslog
[wakelaptop]
sequence = 56,56,56,43,43,43,1443,1443,1443
seq_timeout = 30
command = /usr/sbin/wol aa:bb:cc:dd:ee:22 -i $( nvram get lan_ipaddr | cut -d . -f 1,2,3 ).255
tcpflags = synПояснения:
- Секция options задаёт глобальные параметры демона. Пример включает логирование в syslog и в файл. Можно использовать оба, но имеет смысл выбирать один источник логов для простоты.
- Секция wakelaptop — пример последовательности, которая запускает WOL для устройства с MAC aa:bb:cc:dd:ee:22. В команде предполагается классическая маска сети /24 (т. е. broadcast …255).
Чтобы добавить другие сценарии — скопируйте блок wakelaptop и измените sequence, command и опции.
Советы по конфигурации последовательностей
- seq_timeout — максимальное время (секунды) между первыми и последними «стуками» в серии.
- Порты в sequence перечисляются через запятую. Можно повторять портные группы, использовать TCP или UDP (опция tcpflags).
- Учитывайте, что промежуточные NAT/фильтры у провайдера могут блокировать некоторые порты.
Автозапуск
Чтобы запускать knockd при старте роутера, добавьте команду в ваш init‑скрипт (например, geek-init из руководства OPKG):
knockd -d -c /opt/etc/knockd.conf -i "$( nvram get wan_ifname )"Эта команда запускает демон на WAN‑интерфейсе, чтобы он прослушивал пакеты из интернета.
Stук с Android
В мобильную эпоху удобно иметь приложение для отправки «стуков». Приложение StavFX Knocker позволяет создавать профили и виджеты на рабочем столе.
Пошагово:
- Установите приложение Knocker из Google Play и, по желанию, оцените его в маркете.
- Запустите приложение. Вы увидите главный экран с примерами профилей.
- Долгое нажатие на примерный значок позволяет отредактировать его; в меню можно добавить новый профиль.
Пример: интерфейс добавления профиля в Knocker: 
Заполнение полей для WOL‑последовательности: 
- По желанию смените иконку долгим нажатием.
- Сохраните профиль и одиночным тапом запустите «стук».
- Можно создать виджет для быстрого доступа.
Важно: мобильное приложение не ограничивает количество повторов для порта — гибкость для разных сценариев.
Stук с Windows/Linux
Простейший инструмент — telnet. На Windows он может быть не установлен по умолчанию; следуйте официальным инструкциям Microsoft для установки клиента telnet.
Причина, по которой в примере порты заданы тройками, — поведение telnet: когда telnet не может подключиться к порту, он автоматически пытается ещё два раза. Таким образом, одно выполнение telnet на портовой группе фактически выполняет три «стука». Из‑за этого и выбран seq_timeout = 30 секунд — нужно дождаться таймаута telnet между группами.
Пример для последовательности из статьи (от командной строки):
- На Windows установите telnet.
- Выполните:
telnet geek.dyndns-at-home.com 56
telnet geek.dyndns-at-home.com 43
telnet geek.dyndns-at-home.com 1443Если всё настроено правильно, knockd распознает последовательность и выполнит команду.
Диагностика и устранение неполадок
Если роутер не реагирует на «стуки», проверьте следующее:
- Просмотр логов — knockd ведёт лог, который можно смотреть в реальном времени. Если вы настроили logfile, запустите на роутере:
tail -f /var/log/knockd.logБрандмауэры и фильтры — провайдер, корпоративная сеть или публичная Wi‑Fi могут блокировать нужные порты. Попробуйте использовать стандартные порты (80, 443, 3389) для проверки доступности.
Тестирование внутри LAN — до привлечения внешних факторов проверьте работу внутри сети. Запустите knockd на LAN‑интерфейсе:
knockd -d -i "$( nvram get lan_ifnameq )" -c /opt/etc/knockd.confЗатем направьте клиент на внутренний IP роутера.
Совет: так как knockd прослушивает интерфейс, а не IP, можно держать экземпляр демона постоянно работающим на LAN‑интерфейсе. Приложение Knocker поддерживает два хоста, что упрощает профили.
- Учитывайте «сторону» — из LAN нельзя «постучать» на WAN‑интерфейс в приведённой конфигурации. Если необходимо поддерживать оба направления, запускайте демон дважды — на WAN и на LAN.
Пример конфигурации (шаблон)
Ниже шаблон для быстрого копирования:
[options]
logfile = /var/log/knockd.log
UseSyslog
[wakelaptop]
sequence = 56,56,56,43,43,43,1443,1443,1443
seq_timeout = 30
command = /usr/sbin/wol aa:bb:cc:dd:ee:22 -i $( nvram get lan_ipaddr | cut -d . -f 1,2,3 ).255
tcpflags = synПросто продублируйте блокы и измените sequence/command для новых целей.
Когда это не сработает
- Провайдер или промежуточный NAT блокирует указанные порты.
- Пакеты изменяются или падают на межсетевых экранах, DPI (Deep Packet Inspection) или прокси.
- Если в сети используются Carrier‑Grade NAT, внешний публичный IP может быть общий и «стуки» не попадут к вашему роутеру.
- Неправильные права на выполнение команд или отсутствие бинарников (wol, другие утилиты) на роутере.
Альтернативные подходы
- VPN‑авторизация: скрывать сервисы за VPN — гораздо более надёжный метод доступа к локальным сервисам.
- SSH с ключами и нестандартным портом + fail2ban: вместо открытия сервисов по «стуку» держать их закрытыми и использовать SSH с ключами.
- Port knocking через более надёжные схемы: SPA (Single Packet Authorization) — однострочные авторизаторы с криптографической проверкой.
Ментальные модели и эвристики
- Модель «замка и ключа»: knockd — это «ключ», который не выдаётся явно, но реагирует на правильную последовательность.
- Эвристика риска: добавляйте knockd как дополнительный слой, но основной доступ организуйте через шифрованные, аутентифицированные каналы (VPN/SSH).
Факт‑бокс: ключевые числа
- seq_timeout по умолчанию в примере: 30 секунд.
- Повторение одной порто‑группы в примере: 3 раза (из‑за поведения telnet).
- Порт примера WOL в конфиге: 1443 (пример, можно использовать любой доступный порт).
Playbook: быстрая последовательность действий
- Установить opkg и выполнить opkg update; opkg install knockd.
- Отредактировать /opt/etc/knockd.conf (создать шаблон из примера).
- Проверить наличие утилиты wol и права на её запуск.
- Запустить knockd из терминала вручную для отладки: knockd -d -i “lan_ifname” -c /opt/etc/knockd.conf.
- Сгенерировать «стук» из LAN и проверить логи.
- Добавить автозапуск в init‑скрипт для WAN‑прослушивания.
- Наладить профили в Knocker (Android) и протестировать извне.
Чеклист для ролей
Администратор:
- Установил knockd и проверил конфиг.
- Настроил логирование и проверил доступ к /var/log/knockd.log.
- Убедился, что команда/скрипт, вызываемый knockd, имеет корректные права.
Пользователь (удалённый доступ):
- Создал профиль в Knocker с правильным адресом и портами.
- Проверил доступность внешнего IP/DDNS и наличие проброса/маршрутов.
Диагностика и откат
Если команда, выполняемая knockd, вызывает проблемы:
- Остановите демон: killall knockd или по PID.
- Временно переименуйте /opt/etc/knockd.conf в .bak и запустите knockd с минимальным конфигом.
- Просмотрите /var/log/knockd.log и системный журнал.
- Восстановите предыдущую рабочую версию конфигурации.
Критерии приёмки
- При корректной последовательности в логе должно появиться соответствующее срабатывание и выполнение команды.
- Wake‑On‑Lan должен успешно проснуться внутри LAN после срабатывания последовательности.
- Отсутствие лишних ошибок в /var/log/knockd.log при старте демона.
Замечания
Приведённый пример можно реализовать и другими способами, но цель — дать основу для более сложных сценариев. Планируется вторая часть статьи, где будет показано скрытие VPN‑сервиса за knockd — следите за обновлениями.
Через механизмы «стука» можно динамически открывать порты, включать/отключать сервисы, удалённо пробуждать компьютеры и многое другое. Используйте knockd как инструмент в составе многоуровневой стратегии защиты.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента