Подключитесь к сервису soap через прокси на разных портах
Мне нужно подключиться с сервера к серверу веб-службы, чтобы использовать SOAP
обслуживание, но из-за ограничений на месте я не могу подключиться напрямую.
Тем не менее они дали мне прокси-сервер, который может, но он работает на службе на другом порту:
[webserver]
----- [proxy:48650]
----- [webservice:8601]
Примечание (если бы это еще не было ясно): я упростил имена хостов как их очень длинные корпоративные вещи и излишне усложнил бы вопрос.
Большая проблема в том, что WSDL
веб-сервиса содержит много рефералов с абсолютным URL (так webservice:8601
). Включения идут более чем на 1 уровень (поэтому загрузка WSDL и поиск / замена не дадут мне намного больше).
Я добавил правило /etc/hosts
на веб-сервере:
127.0.0.1 webservice
Основная идея заключается в том, чтобы каким-то образом прокси-порт 8601 на localhost и заставить мыльный клиент думать, что он действительно подключается к веб-сервису (через прокси-сервер).
SSH tunnel
это, к сожалению, не вариант прокси, те же соображения безопасности. Я не могу установить SSH соединение с прокси.
iptables
Это возможно, но я могу найти набор правил, который берет порт на локальном хосте (8601) и перенаправляет его на внешний хост / другой порт (прокси:48650). Большинство из них для входящего трафика.
Я трачу много времени на это и впадаю в отчаяние. Есть ли здесь кто-нибудь, кто может дать мне несколько советов / решений?
Довольно пожалуйста?
1 ответ
Удалите запись из файла hosts и используйте iptables для DNAT трафика.
На вашей локальной машине:
iptables -t nat -A OUTPUT -d webservice -p tcp --dport 8601 -j DNAT --to proxy:48650
ИЛИ на промежуточном маршрутизаторе вам необходимо использовать PREROUTING
цепь вместо OUTPUT
цепь:
iptables -t nat -A PREROUTING -d webservice -p tcp --dport 8601 -j DNAT --to proxy:48650
ПРИМЕЧАНИЕ. Вы должны использовать IP-адрес прокси в --to
аргумент; Iptables не будет делать разрешение имен там. Вы можете использовать хостинг webservice
в качестве аргумента -d
хоть.