У меня такая ситуация:
Один интерфейс (устройство), идентифицированный 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 (который является виртуальным интерфейсом), но это не вопрос.
Итак, мой главный вопрос:
Можно ли перенаправить трафик (изменить пакеты), идущий от I1 к I2: P2 в коммутатор / маршрутизатор что он проходит, так что пункт назначения будет I3: P3 и I3 мог бы тогда ответить таким же образом (маскироваться под I2: P2), не замечая I1?
Я предполагаю, что это может быть невозможно, и перенаправление на этом уровне связано с (виртуальными) мостами. Если да, то можно ли добиться того же результата в противном случае? Я могу модифицировать только переключатель и интерфейсы I2, I3 (НЕ I1).
Вы можете сделать это изменение только на своем I1
устройство и используя там iptables NAT или подобное.
Если вы настроили отдельные IP-подсети в своей текущей локальной сети, чтобы x
и y
находятся в разных подсетях, то вы можете выполнить эту манипуляцию с адресатом в маршрутизаторе, потому что тогда пакеты будут проходить через маршрутизатор.
Очевидно, вы находитесь в том же сегменте сети, и, как вы догадались, в этом случае трафик НЕ проходит через маршрутизатор.
Есть два места, где вы можете внести необходимые корректировки:
Исходное устройство (I1), где вам нужно только DNAT исходящих пакетов:
iptables -t nat -A OUTPUT -p tcp -d I2 --dport P2 -j DNAT --to I3:P3
Второе устройство (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