这是我的用例:
我在负载均衡器后面有一堆主机,客户端通过负载均衡器进行 SSH 连接。负载均衡器在内部创建一个新连接,因此与终端主机的连接具有负载均衡器的 IP 地址。为了知道是谁发起了请求,负载均衡器被设置为在标头中转发客户端 IP 地址。我并不完全熟悉转发的工作原理,但根据我的理解,在标头中添加了一个神奇的数字,后面是字段的长度,然后是包含 ClientIP 的字段本身。
有没有办法告诉 SSHD 检索转发的客户端 IP?如果细节有点令人困惑,我很抱歉,我不熟悉网络部分,但我的团队有这个用例,想知道如何让 SSHD 从 TCP 数据包中检索 CIP(客户端 IP)。
答案1
如果负载平衡在 DSR 模式下运行,则 sshd 进程将只能看到客户端 IP,而看不到负载平衡器的 IP。我假设您的网络设置中存在某些因素阻止使用 DSR,因此您必须使用其他方法。
存在不同的协议层,客户端 IP 可插入到标头中。
- IP层:这不是一个好主意,因为 IPv4 和 IPv6 之间完全不同。
- TCP 层:可以工作,但我没有看到这样的选项TCP 选项的官方列表。
- HTTP 层:
X-Forwarded-For
被广泛用于此,但由于是 HTTP 专用的,所以不能将其与 ssh 一起使用。
使用 tcpdump 或 wireshark 等工具,您可以检查流量以找出用于传达客户端 IP 的标头。适合在服务器上运行的 tcpdump 命令可能如下所示tcpdump -pni eth0 -s0 -Uw /tmp/ssh-traffic.pcap 'port 22'
然后可以使用 tcpdump 或 wireshark 分析输出文件。