Мне нужно подключиться с сервера к серверу веб-службы, чтобы использовать SOAP
но из-за действующих ограничений я не могу подключиться напрямую.
Тем не менее, они предоставили мне прокси-сервер, который может, но он работает в службе на другом порту:
[webserver]
----- [proxy:48650]
----- [webservice:8601]
Примечание (если это еще не ясно): я упростил имена хостов как их очень длинные корпоративные вещи и без необходимости усложнил бы вопрос.
Большая проблема в том, что WSDL
веб-сервиса содержит много рефералов с абсолютным URL-адресом (поэтому webservice:8601
). Включаемые элементы идут более чем на 1 уровень (так что загрузка WSDL и выполнение поиска / замены не продвинут меня дальше).
Я добавил правило к /etc/hosts
на веб-сервере:
127.0.0.1 webservice
Основная идея состоит в том, чтобы каким-то образом проксировать порт 8601 на localhost и заставить мыльный клиент думать, что он действительно подключается к веб-сервису (через прокси).
An SSH tunnel
К сожалению, прокси-сервер не работает по тем же причинам. Я не могу установить SSH-соединение с прокси.
iptables
есть возможность, но я могу найти набор правил, который берет порт на localhost (8601) и перенаправляет его на внешний хост / другой порт (прокси: 48650). Большинство из них предназначены для входящего трафика.
Я тратил на это много времени и уже отчаялся. Есть ли здесь кто-нибудь, кто может дать мне несколько советов / решений?
Довольно, пожалуйста?
Удалите запись из файла 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
хотя.