我必须在防火墙环境中进行研讨会,这阻止我展示我想要的所有内容,因此我正在寻找解决方法。
我将演示一款在 Windows 上运行的软件。在研讨会期间,参与者需要使用浏览器从手机连接到该软件。
Windows Phone
+-------------------+ +------------------+
| | | |
| Demo software | | |
| | | |
| | | |
| :8080 | <--------+ Browser |
| | | |
| | | |
+-------------------+ +------------------+
问题是所有车间机器都装有防火墙,并且不可能(由于我所在车间的组织非常严格)在防火墙上打开一个漏洞。
因此,我考虑在每台车间机器上运行某种代理(幸运的是,这是允许的)。该代理将连接到外部的某种服务器,使用某个自动生成的 ID 注册自身并开始等待数据。
然后,手机将连接到服务器http://server.xxx/proxyid
,服务器将根据代理 ID 将其请求路由到适当的代理(通过已建立的连接,因此数据将能够通过防火墙)。然后,代理将联系演示软件中的 Web 服务器,获取响应并将其传回服务器,服务器将响应转发给手机。
Firewall
+
|
Windows |
+---------------------+ |
| | |
| +-------------+ | | server.xxx
| | Demo SW | | | +------------------------+
| | | | | | |
| | :8080 | | | | |
| +--------+----+ | | | |
| ^ | | | |
| | | | | |
| +--------+----+ | | | |
| | Proxy | | | | |
| | +------------> |:80 |
| | ID | | | | |
| +-------------+ | | +------------------------+
| | | ^
+---------------------+ | |
| |
| |
+ |
Phone |
+-----------------------------------+
| Browser | |
| +--------------+----------------+ |
| | http:://server.xxx/ID | |
| | | |
| +-------------------------------+ |
+-----------------------------------+
是否有任何构建模块可以让我把这个解决方案组合在一起,这样我就不必对其进行编程了?最好服务器部分也可以在 Windows 上运行(某种 Linux 也可以)。
答案1
这并不是你所追求的,也许我还会想到其他的东西,但这是你应该知道的。
SSH 端口转发
你需要在计算机 B 上安装一个 SSH 服务器。因此你可以在计算机 A 上执行
SSH 类似于 telnet,但更安全,并具有 TCP 端口转发功能。您可以忽略它的 telnet 方面
ssh 是系统管理员熟悉的工具,但一般技术人员也熟悉。
您可以在Windows中通过cygwin安装ssh。
A$ssh user@compB
假设你可以做到这一点。
A 位于防火墙后面。B 没问题。
答-----------B
虽然防火墙后面可以建立传出连接
从 A 运行
A$ssh -R 1234:127.0.0.1:5678 -R 2345:127.0.0.1:5642 user@compB
可以作为一个命令完成,也可以分解为两个单独的命令
A$ssh -R 1234:127.0.0.1:5678 user@compB
和
A$ssh -R 2345:127.0.0.1:5642 user@compB
这-R 1234:127.0.0.1:5678
-R 表示在目标公司(公司 B)上打开端口,并且可以在端口 5678 处连接到公司 B,然后它将转到公司 A,并转发到端口 1234(仍在公司 A 上)
所以你可能想做
-R 80:127.0.0.1:8080
问题是,你想要一个有 ID 的东西,而我对此不确定
不过我可以说的是你可以在 CompB 上打开多个端口
所以不仅仅是端口 80
端口 81、端口 82
因此 CompB 上的端口 81 可以转发到 CompA 上的端口 1234
CompB 上的端口 82 可以转发到 CompA 上的端口 4252
ETC
您可能想要说 -gR 或 -R *:80.... 因为如果没有 -g,在 CompB 上打开的端口将只允许来自 CompB 的连接,即它只会监听 127.0.0.1,所以在您的情况下使用 -g,因为您想要另一台计算机['电话'计算机] 的客户端连接到 CompB..即 -g 是因为您想要另一台计算机的客户端程序连接到 CompB(并转发到 CompA),而不是 CompB 上的客户端程序连接到 CompB(并转发到 CompA)。
但有一点...您将 ssh.exe 从防火墙后面的计算机(CompA)连接到计算机 B。
CompB 上打开一个端口...用于新的 tcp 连接。您的 http 或任何客户端连接到 CompB,然后到达您从中运行 ssh.exe 的 CompA。然后您可以转发到您想要的任何计算机
当你写 -R 1234:127.0.0.1:5678 时,127.0.0.1 可能会更改为其他计算机。这样客户端的请求就会转发到其他计算机
-R 与 -L 相反,尽管您不需要 -L。
SSH-D
问题是......从表面上看,您的最终目的地似乎是一个网络服务器。
由于您只想转发一个特定的网站,因此可以使用 -R
但是你也应该知道一个 -D 选项,它使得 SOCKS 代理能够处理 HTTP
稍微有点障碍是 -D 是局部的......即从这个意义上讲它有点像 -L。
但你可以在 CompA 上设置 SOCKS 代理,
然后从 A 向 compB 执行 ssh -R。因此,任何连接到 B 的人都会被转发到 A 上的 SOCKS 代理,然后可以访问他们想要的任何 Web 服务器。
此链接的答案试图 SSH 反向袜子隧道但(截至撰写本文时),将 socks 代理放在了错误的计算机上。此答案是正确的。
https://stackoverflow.com/questions/842021/ssh-d-port-usernameserver-com-but-in-reverse
但这样一来,您就无法为不同的人提供不同的网络服务器了。
为此,请坚持 -R
在你的情况下,将 -R 与 -D 结合起来可能是不必要的,除非你真的想访问其他网站,在这种情况下你需要 SOCKS 代理(-D)和 -R
无论哪种方式,这些都不需要 ID,而是需要不同的端口,端口决定了一旦到达运行 ssh.exe 的防火墙后面的计算机 [计算机],要转发到哪个 IP:PORT。
答案2
对于此类问题,我们总是会选择使用 Microsoft 远程桌面方式进行演示。演示环境运行在您办公室的一台连接到互联网的 PC 上,所有必需的端口均已打开。这意味着人们可以在任何设备上使用他们的 Web 浏览器导航到您的服务器的 Web 前端。
为了展示演示,您可以使用 RDP 客户端(每个操作系统至少有一个)连接并登录到您的演示 PC/服务器并查看服务器的 Windows 后端。
通常他们甚至不需要在防火墙上打开端口,除非他们的防火墙非常严格(只为传出流量打开几个端口,例如端口 80 和 443)。但 RDP(3389)通常是少数已打开的端口之一。