1

У нас есть веб-сервер под управлением Ubuntu 12.04 LTS, Tomcat 7 и Oracle Java. До сих пор мы обслуживали веб-приложение по IPv4-адресу через порты 80 и 443 (80 перенаправляет на 443).

Я пытаюсь сделать так, чтобы Tomcat обслуживал то же приложение на тех же портах и через IPv6. ОС настроена для IPv6 правильно, у нее есть собственные адреса IPv6 с глобальной областью действия.

Что не работает, так это то, что Tomcat/Java не прослушивает IPv6. Вот вывод команды netstat -tlpn:

tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN      957/sshd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2686/java
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      1058/postgres
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1243/master
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      2686/java
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      2686/java
tcp6       0      0 :::2222                 :::*                    LISTEN      957/sshd
tcp6       0      0 :::5432                 :::*                    LISTEN      1058/postgres
tcp6       0      0 ::1:25                  :::*                    LISTEN      1243/master

Как видите, Java прослушивает только соединения tcp, в то время как postgres и ssh также принимают соединения tcp6 на тех же портах, что и с IPv4.

Я обнаружил свойство java.net.preferIPv4Stack = true в скрипте запуска Tomcat, но когда я установил для него значение false, tomcat начал слушать ТОЛЬКО на локальном tcp6, порт 8005. Мне также нужно слушать ::: 443 и ::: 80. Также он исчез из соединений IPv4, но я считаю, что ::: может связывать как IP v4, так и v6.

Я должен отметить, что я не программист на Java, моя ответственность - только сам сервер. Также я не хочу много экспериментировать, так как это рабочий сервер.

Любая помощь очень ценится! ура

1 ответ1

0

После нескольких часов исследований я обнаружил, что проблема заключается в authbind. Он может привязывать tomcat к портам ниже 1024 только для IPv4 и не работает для IPv6 (это должно быть в более новых ядрах, но на этом компьютере используется ядро 3.2).

Когда я включил authbind в /etc /default /tomcat7 и изменил свой server.xml для прослушивания на 8080, а затем перенаправления на 443 и прослушивания на 8443, tomcat начал прослушивать IPv6 так, как должен.

Перенаправление портов через iptables также возможно только для IPv4, так как ip6tables поставляется с поддержкой nat и перенаправлением только из ядра 3.7.

Затем я использовал демон xinetd для перенаправления трафика с 80 на 8080 и с 443 на 8443. Теперь все работает как надо.

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