У меня есть сервер, на котором запущено веб-приложение, развернутое на Tomcat, и который находится в тестовой сети. Мы используем SuSE 11 sp1 и у нас есть правила перенаправления для входящих запросов. Например, мы не привязываем порт 80 к файлу Tomcat server.xml, вместо этого мы прослушиваем порт 9600 и имеем строку конфигурации в SuSEfirewall2 для перенаправления порта 80 на 9640. Это потому, что Tomcat не запускается как root и не может открыть порт 80.
Мое веб-приложение должно иметь возможность отправлять запросы на порт 80, поскольку именно этот порт оно будет использовать при развертывании. Какое правило я могу добавить, чтобы локальные запросы перенаправлялись iptables?
Я попытался посмотреть на этот вопрос: Как перенаправить один порт на другой на локальном компьютере с помощью iptables? но предложения там, похоже, мне не помогли.
Я попытался запустить tcpdump на eth0, а затем подключиться к моему локальному IP-адресу (не 127.0.0.1, а фактическому адресу), но я не заметил никакой активности. Я видел активность, если подключался с внешнего компьютера. Затем я запустил tcmpdump на lo, снова попытался подключиться, и на этот раз я увидел активность. Это заставляет меня думать, что любые запросы, отправленные на мой собственный IP-адрес локально, не обрабатываются iptables.
Для справки, это то, как сейчас выглядит моя таблица NAT:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 9640
REDIRECT tcp -- anywhere anywhere tcp dpt:xfer redir ports 9640
REDIRECT tcp -- anywhere anywhere tcp dpt:https redir ports 8443
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Прежде всего хочу сказать, что я не верю, что Tomcat, действующий как непривилегированный пользователь, не может привязать порт 80. Возможно, у вас недостаточно прав для этого пользователя. Что насчет перенаправления: вывод вашей таблицы неполный. Не могли бы вы предоставить вывод iptables -nvL -t nat? Я имею в виду, что здесь вы можете иметь правила отклонения по интерфейсу, и ваш вывод этого не показывает. Что насчет запросов от локального терминала: просто подумайте о том, что выбор маршрутизации зависит от таблицы маршрутизации, и какой интерфейс будет отправлять пакет, также зависит от таблицы маршрутизации. Итак, если ваше приложение связывает только интерфейс lo, вы получаете внутренний трафик от lo до lo