Как привязать клиент веб-сервиса к указанному IP-адресу (сетевому интерфейсу) с помощью Apache CXF?

Мои проблемы: есть один сервер RHEL по умолчанию с двумя настроенными сетевыми картами:

  • eth0 с IP 10.100.0.1
  • eth1 с IP 10.100.100.1

Кроме того, на Red Hat установлен jboss-6.0.0.20101110-CR1, а на этом JBoss развернут EAR, который представляет собой простой сервлет, прослушивающий входящие данные, и после некоторой обработки приложение пересылает обработанные данные в другой веб-сервис на другом хост (например, 10.200.0.1), используя инфраструктуру Apache CXF (такой прокси с некоторой обработкой).

Теперь проблемы с конфигурацией.

Когда JBoss нужно прослушивать входящие данные на eth0, IP 10.100.0.1, нужно запустить run.sh с ключом «-b»: run.sh -b 10.100.0.1, что просто и понятно.

Но я хочу расширить свою проблему: я хочу заставить JBoss вызывать веб-службу на другом хосте с 10.100.100.1 в качестве исходного IP-адреса для сетевого трафика. Как это сделать? Есть ли какой-либо переключатель/свойство/что угодно, которые выполняют эту работу?

Резюме:

JBoss привязывается к eth0 для прослушивания входящих данных на 10.100.0.1 и вызывает веб-сервис с исходным IP-адресом 10.100.100.1 на 10.200.0.1.

Пожалуйста, помогите мне, любые идеи действительно оценены. Я хочу избежать любой конфигурации перенаправления iptables/xinted :-)

С уважением,

Мариуш

PS. Я обнаружил еще одну похожую проблему (но связанную с собственным JBoss WS...) в моей компании: один из наших поставщиков программного обеспечения изменил jbossws-native-core.jar JBoss5, чтобы заставить это поведение, добавив строку:

bootstrap.setOption("localAddress", новый InetSocketAddress(localAddress, 0));

в NettyClient.java, когда localAddress предоставляется с ключом -D и считывается методом getProperty() в коде. Но также я хочу избежать каких-либо модификаций компонентов JBoss...


person Mariusz    schedule 23.12.2010    source источник


Ответы (1)


Если JBoss прослушивает только один IP-адрес, это все, что он сможет легко ответить с того же IP-адреса. Я бы посоветовал вам решить эту проблему с помощью маршрутизации, а не взлома в java. Я предполагаю, что, поскольку он уже работает, 10.200.0.1 на самом деле доступен как через eth0, так и через eth1.

Я предлагаю сделать его доступным только через eth1, а затем заставить jboss слушать оба интерфейса. Затем Jboss с радостью выберет исходный адрес, необходимый для маршрутизации трафика.

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

person Karl P    schedule 02.02.2011