![通过不同端口上的代理连接到 soap 服务](https://linux22.com/image/638990/%E9%80%9A%E8%BF%87%E4%B8%8D%E5%90%8C%E7%AB%AF%E5%8F%A3%E4%B8%8A%E7%9A%84%E4%BB%A3%E7%90%86%E8%BF%9E%E6%8E%A5%E5%88%B0%20soap%20%E6%9C%8D%E5%8A%A1.png)
我需要从服务器连接到 Web 服务服务器以使用服务SOAP
,但由于存在限制,我无法直接连接。
但是他们确实给了我一个可以使用的代理服务器,但是它在不同端口上的服务上运行:
[webserver]
----- [proxy:48650]
-----[webservice:8601]
注意(如果还不清楚):我已将主机名简化为其非常长的公司名称,并且会不必要地使问题复杂化。
最大的问题是,WSDL
webservice 包含大量具有绝对 URL 的引用(因此webservice:8601
)。包含深度超过 1 级(因此下载 WSDL 并进行搜索/替换不会对我产生太大帮助)。
我在网络服务器上添加了一条规则/etc/hosts
:
127.0.0.1 webservice
基本思想是以某种方式代理本地主机上的 8601 端口,并让 soap-client 认为它实际上正在连接到 web 服务(通过代理)。
不幸的是,由于同样的安全原因, AnSSH tunnel
不是代理选项。我无法与代理建立 SSH 连接。
iptables
是可能的,但我可以找到一组规则,这些规则将本地主机 (8601) 上的端口重定向到外部主机/不同的端口 (代理:48650)。它们大多数用于传入流量。
我在这上面浪费了很多时间,现在越来越绝望了。这里有人能给我提供一些提示/解决方案吗?
好吗?
答案1
从主机文件中删除该条目并使用 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
。