Перенаправление чисто локальной сети на другой интерфейс и порт (Linux)

Перенаправление чисто локальной сети на другой интерфейс и порт (Linux)

У меня следующая ситуация:
один интерфейс (устройство), идентифицированный IP-адресом 192.168.1.x (I1), который подключается через какой-то сервис к другому интерфейсу с IP-адресом 192.168.1.y (I2) к порту (P2) в той же локальной сети. Теперь я хочу перенаправить все кадры/пакеты (данные в целом), которые отправляются с I1 на I2:P2, на другое устройство с IP-адресом 192.168.1.z (I3) и портом (P3) в той же локальной сети.

Что я пробовал:
Я посмотрел, iptablesно в конечном итоге понял, что они (особенно таблицы nat) работают только с пакетами, идущими во внешнюю сеть (WAN). Исключением является случай, когда правила установлены на подключающемся устройстве (I1), тогда эти команды оболочки справляются с задачей:

iptables -t nat -A OUTPUT -p tcp -d I2 --dport P2 -j DNAT --to I3:P3
iptables -t nat -A INPUT -p tcp -s I3 --sport P3 -j SNAT --to I2:P2

Поскольку я хотел применить правила на локальном маршрутизаторе, я попытался проверить, проходит ли через него связь между I1 и I2:
iptables -t raw -I PREROUTING -s I1 -d I2 -j LOG
И, вероятно, нет, поскольку я не смог найти никаких журналов с двумя IP-адресами (файл журнала находился по адресу/var/log/сообщения).

Я начал понимать, что связь по локальной сети проходит через коммутатор с использованием MAC-адресов и не может быть там перехвачена, это правда? Я предполагаю, что «коммутатор» физически находится (в) том же корпусе, что и маршрутизатор.

Наконец, я думаю, что мне, возможно, даже не понадобится перенаправление, и я просто запущу нужные службы на I2 (который является виртуальным интерфейсом), но это уже не вопрос.

Итак, мой главный вопрос:
Возможно ли перенаправить трафик (изменить пакеты), идущий отИ1кИ2:П2вкоммутатор/маршрутизаторчерез который он проходит, так что пунктом назначения будетИ3:П3и I3 мог бы тогда отреагировать таким же образом (замаскироваться под I2:P2), и I1 этого не заметил бы?

Я предполагаю, что это может быть невозможно, и перенаправление на этом уровне связано с (виртуальными) мостами. Если так, можно ли достичь того же результата иным способом? Я могу только изменить коммутатор и интерфейсы I2, I3 (НЕ I1).

решение1

Судя по всему, вы находитесь в одном сегменте сети, и, как вы догадались, в этом случае трафик НЕ проходит через маршрутизатор.

Есть два места, где вы можете внести необходимые изменения:

  1. Исходное устройство (I1), на котором вам нужно только DNAT-преобразовать исходящие пакеты:

    iptables -t nat -A OUTPUT -p tcp -d I2 --dport P2 -j DNAT --to I3:P3
    
  2. Второе устройство (I2), где вам нужны как DNAT, так и SNAT, а также должна быть включена пересылка пакетов:

    iptables -t nat -A PREROUTING -p tcp -s I1 -d I2 --dport P2 -j DNAT --to-destination I3:P3
    iptables -t nat -A POSTROUTING -p tcp -s I1 -d I3 --dport P3 -m conntrack --ctstate DNAT -j SNAT --to-source I2
    

решение2

Эту модификацию можно выполнить только на своем I1устройстве, используя iptables NAT или что-то подобное.

Если вы настроили отдельные IP-подсети в своей текущей локальной сети так, что xи yнаходятся в разных подсетях, то вы можете выполнить эту манипуляцию назначения на маршрутизаторе, поскольку тогда пакеты будут проходить через маршрутизатор.

Связанный контент