Как настроить iptables на машине с DMZ для переадресации порта 12345 на другой компьютер, подключенный к тому же маршрутизатору? Является ли iptables неправильным инструментом для этой работы?

У меня есть домашний сервер в демилитаризованной зоне моего маршрутизатора, на котором размещен сервис на порту 12345. Я перенес эту службу на порт 12345 более мощного компьютера в моей домашней сети и выполнял ssh -fNR 12345:localhost:12345 <home-server> при каждой загрузке. Служба работает по пользовательскому протоколу, т. Е. Я не могу использовать HTTP-прокси.

Решения, которые я нашел, как правило, предполагают, что компьютер с iptables является маршрутизатором (два интерфейса и т.д.). (например: https://serverfault.com/a/140626/15756, https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-iptables, так далее)

Команды пробовали из разных уроков:

  • iptables -A FORWARD -p tcp -d 192.168.1.5 --dport 12345 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  • iptables -t nat -A PREROUTING -p tcp --dport 12345 -j DNAT --to 192.168.1.5:12345
  • выше также w/iptables -t nat -A POSTROUTING -j MASQUERADE
  • вышеупомянутое w/iptables -A FORWARD -p tcp -d 192.168.1.5 --dport 12345 -j ACCEPT

1 ответ1

1

В вашей ситуации настройка "DMZ" на самом деле является не чем иным, как очень широким правилом переадресации портов (DNAT) на маршрутизаторе. Если вы хотите, чтобы один порт был перенаправлен в другое место, обычно вы можете просто добавить правило переадресации портов к маршрутизатору, как обычно, - и оно будет иметь приоритет над правилом DMZ.

Если ваш маршрутизатор позволяет это, вы должны сделать это на маршрутизаторе. Это не только уменьшит нагрузку на текущую DMZ-машину, просто обойдя ее, но вы также избежите проблемы с заколкой, описанной ниже.


То, что вы пытаетесь достичь на своей DMZ-машине, по-прежнему не отличается от переадресации портов вашего маршрутизатора (то есть простого DNAT).

Но поскольку у вас есть только один интерфейс, основная проблема, с которой вы сталкиваетесь, - это та же проблема "закрепления NAT", что и при доступе к службам переадресации портов изнутри; только наоборот. (Ваш маршрутизатор отправляет пакеты на машину DMZ, но получает пакеты от другой машины, и ничего не совпадает.)

Обходной путь для этого обычно требует правила SNAT (маскарад) и приводит к тому, что конечный компьютер думает, что все соединения исходят от вашего DMZ-компьютера (исходные IP-адреса источника теряются).


Вторая проблема заключается в том, что в настоящее время неизвестно: 1) действительно ли на вашей DMZ-машине включена IP-маршрутизация (переадресация) (вы должны это проверить), и 2) какие правила брандмауэра у нее уже есть (вы тоже должны это проверить - вы упомянули добавление правил, но вы не упоминаете проверку или удаление старых).

Неважно, один это интерфейс или два, вы все равно запрашиваете у DMZ-машины маршрутизацию IP-пакетов, и поэтому для sysctl net.ipv4.conf.all.forwarding должно быть установлено значение 1.

Правила iptables хранятся в списке (цепочке), проверяемых сверху вниз. Использование -A добавляет правило в конец указанной таблицы / цепочки. Вы всегда должны смотреть на свой текущий набор правил (как показано с помощью iptables-save или хотя бы iptables [-t nat] -S), чтобы убедиться, что правила находятся в правильном порядке, и так далее.

В сети нет черного ящика. Вы можете использовать инструменты захвата пакетов, такие как Wireshark или tcpdump, чтобы увидеть, какие пакеты приходят и какие пакеты выходят. Может быть, ваша DMZ-машина уже правильно перенаправляет все эти пакеты в другую систему - но ответы не приходят? Это другая проблема с другим решением.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .