Вопрос или проблема
В Knockd как мне прослушивать конкретный IP-адрес с интерфейса, на котором есть несколько IP-адресов?
Knockd предлагает возможность прослушивания по интерфейсу, но не по IP-адресу.
Пример
Интерфейс eth0 имеет 3 IP-адреса
123.123.123.123
124.124.124.124
125.125.125.125
Мой целевой прослушиваемый IP-адрес 124.124.124.124
, но если я запущу knockd с интерфейсом eth0, он будет слушать первый IP 123.123.123.123
.
Knockd прослушивает уровень канала, в модели OSI это уровень 2. Уровень 3 — это место, где находятся IP-адреса. Поэтому вы не сможете прослушивать только один IP-адрес.
Обходной путь — создать MACVTAP, тем самым создавая новое устройство уровня 2. Переместите IP-адрес 124.124.124.124 на этот интерфейс и запустите Knockd на новом интерфейсе, например, macvtap0.
ip link add link eth0 macvtap0 type macvtap
ip address del 124.124.124.124/<вставьте подсеть> dev eth0
ip address add 124.124.124.124/<вставьте подсеть> dev macvtap0
Примечание: создание macvtap приводит к созданию интерфейса с новым MAC-адресом. В зависимости от вашего интернет-провайдера это может создать проблему. Если это произойдет, добавьте маршрут для исходящего трафика из 124.124.124.124, чтобы маршрутизировать его через один из ваших других внешних IP-адресов. Таким образом, ваш вышестоящий провайдер увидит MAC-адрес физического устройства. (это самый простой способ, я знаю, что есть другие способы заставить исходящий трафик использовать основной MAC-адрес)
Knockd, когда ему дан адаптер, будет слушать только первый адрес на этом адаптере.
Обходной путь (по крайней мере для IPv4), который не требует полного TAP-устройства уровня 2, — это просто назначить нужный IP-адрес интерфейсу-алиасу.
Если вы используете стандартную систему ifup в /etc/network/interfaces, то что-то вроде:
auto eth0:1
iface eth0:1 inet static
address 124.124.124.124/24
post-up ip route add default via 124.124.124.1 dev eth0 onlink
dns-nameservers 9.9.9.9 9.9.9.10
dns-search yourdomain.ca
Используйте post-up только если вы указывали шлюз по умолчанию.
Следует отметить, что iptables и nft будут принимать правила на основе алиаса, но правила не будут работать. Однако правила, применяемые к “eth0”, также будут применяться ко всем алиасам.
Ответ или решение
Чтобы заставить Knockd прослушивать конкретный IP-адрес на интерфейсе с несколькими IP-адресами, требуется особая настройка, поскольку Knockd не поддерживает прослушивание по IP-адресу, а только по интерфейсу. Однако существуют подходы, которые могут помочь в достижении этой цели.
Понимание проблемы
Knockd работает на уровне канала, что соответствует уровню 2 в модели OSI. Это означает, что он не может фильтровать входящие пакеты на основании IP-адресов, так как IP-адреса находятся на уровне 3. Поэтому, когда вы запускаете Knockd на интерфейсе, который имеет несколько IP-адресов, он будет слушать трафик, приходящий на первый адрес, а не на тот, который вам нужен.
Решение 1: Использование MACVTAP
Одним из наиболее распространенных и эффективных способов для решения этой проблемы является создание виртуального устройства MACVTAP. Этот метод подразумевает создание нового канального устройства, которое будет прослушивать трафик по нужному IP-адресу.
Шаги по настройке:
-
Создайте интерфейс MACVTAP, связанный с вашим физическим интерфейсом (
eth0
):ip link add link eth0 macvtap0 type macvtap
-
Удалите IP-адрес
124.124.124.124
с основного интерфейса:ip address del 124.124.124.124/<ваша_маска_сети> dev eth0
-
Назначьте IP-адрес
124.124.124.124
новому интерфейсу MACVTAP:ip address add 124.124.124.124/<ваша_маска_сети> dev macvtap0
После этого вы сможете запустить Knockd на интерфейсе macvtap0
, что позволит прослушивать пакеты, адресованные к необходимому IP-адресу.
Обратите внимание: Создание MACVTAP может привести к тому, что ваш провайдер увидит новый MAC-адрес. Если это создаёт проблемы, вам может понадобиться настроить маршрутизацию для исходящего трафика, чтобы использовать исходный MAC-адрес.
Решение 2: Использование алиасов интерфейса
Альтернативным решением, особенно если вы не хотите использовать MACVTAP, является создание алиасов интерфейса. Это позволяет вам назначать IP-адреса вашему основному интерфейсу с использованием дополнительных логических интерфейсов.
Пример конфигурации:
Если вы используете стандартную конфигурацию если с файлом /etc/network/interfaces
, вы можете добавить алиас следующим образом:
auto eth0:1
iface eth0:1 inet static
address 124.124.124.124/24
post-up ip route add default via 124.124.124.1 dev eth0 onlink
dns-nameservers 9.9.9.9 9.9.9.10
dns-search yourdomain.ca
Обратите внимание на строку post-up
, которая добавляет маршрут по умолчанию для этого алиаса только если это необходимо (то есть предусмотрен шлюз).
Заключение
В конечном итоге, поскольку Knockd не поддерживает прямое прослушивание по IP-адресу, предлагаемые выше методы — создание виртуального интерфейса MACVTAP и настройка алиасов интерфейса — предоставляют безопасные и эффективные решения. Выбор между ними будет зависеть от ваших конкретных потребностей и текущей сетевой конфигурации.