Слушать конкретный IP-адрес в Knockd

Вопрос или проблема

В 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-адресу.

Шаги по настройке:

  1. Создайте интерфейс MACVTAP, связанный с вашим физическим интерфейсом (eth0):

    ip link add link eth0 macvtap0 type macvtap
  2. Удалите IP-адрес 124.124.124.124 с основного интерфейса:

    ip address del 124.124.124.124/<ваша_маска_сети> dev eth0
  3. Назначьте 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 и настройка алиасов интерфейса — предоставляют безопасные и эффективные решения. Выбор между ними будет зависеть от ваших конкретных потребностей и текущей сетевой конфигурации.

Оцените материал
Добавить комментарий

Капча загружается...