【发布时间】:2012-08-13 23:31:24
【问题描述】:
我有一个通过反向 ssh 隧道在本地机器上运行的 Apache 网络服务器,即:
ssh -R *:80:local_machine:8080 用户名@gateway_machine
换句话说,所有来自 gateway_machine 上 80 端口的流量 被发送到 local_machine 上的 8080 端口。
出于监控目的,我想知道远程客户端的 IP 地址 连接到 gateway_machine。但是我的本地 Apache 服务器看到 所有来自 gateway_machine 的 IP 地址的流量。
我的问题:有什么方法可以设置在 gateway_machine 上运行的 ssh 服务器,这样 它将所有流量发送到具有实际远程 IP 地址的 local_machine ?
【问题讨论】:
-
尝试使用 -v(或 -vv 或 -vvv)并查看 ssh 客户端是否在其日志中显示这些连接
-
好主意,谢谢。我已经说服自己,没有“黑客”就没有办法做到这一点。虽然通过将 ssh -vvv 调试输出与 openssh 源进行比较,我发现这发生在 clientloop.c 中定义的“client_request_forwarded_tcpip()”函数中。似乎默认情况下 ssh 不会在 TCP/IP 标头中转发“originator_address”(远程客户端 IP)。这可以通过破解源来改变。如果我得到它的工作,我会在这里发布解决方案
-
你能在远程机器上运行别的东西吗?例如 HAProxy 或其他 Apache HTTPD?在这种情况下,您可能可以使用远程 Web 代理从端口 80 转发到 8080(远程)并从远程 8080 隧道到本地 8080。如果您使用 HTTP 代理执行此类操作,则可以将其配置为包含带有原始 IP 地址的 X-Forwarded-For 标头。
标签: ssh ssh-tunnel