ssh 隧道远程转发, 能够获取到访问者的IP吗?

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
ouleiqi
帖子: 16
注册时间: 2021-11-24 10:22
系统: UbuntuLTS 20.04

ssh 隧道远程转发, 能够获取到访问者的IP吗?

#1

帖子 ouleiqi » 2022-05-25 17:13

问题:
把访问公网机器上的5900端口,转发到内网机器上的3389端口。

现在使用 ssh的远程转发方式可以正常访问,如下:

代码: 全选

 ssh -CNfR *:5900:localhost:3389 -p 2222 root@xxx.xxx.xxx.xxx
但是内网机器需要记录真实的访问者的IP地址。

ssh 可以做到吗? 或者有没有其他的解决方案,感谢 -_-
头像
astolia
论坛版主
帖子: 6450
注册时间: 2008-09-18 13:11

Re: ssh 隧道远程转发, 能够获取到访问者的IP吗?

#2

帖子 astolia » 2022-05-26 10:40

如果用ssh的话,加-v参数,ssh -vCNfR *:5900:localhost:3389 -p 2222 root@xxx.xxx.xxx.xxx
日志里会有这么一行
debug1: client_request_forwarded_tcpip: listen port 5900, originator 1.2.3.4 port 48016
或者你用防火墙规则,记录访问5900端口的地址也行
ouleiqi
帖子: 16
注册时间: 2021-11-24 10:22
系统: UbuntuLTS 20.04

Re: ssh 隧道远程转发, 能够获取到访问者的IP吗?

#3

帖子 ouleiqi » 2022-05-30 10:16

问题没有描述清楚, 要求内网机器记录访问者的真实IP,也就是客户端的IP透传。

目前已解决,回来说下解决方法:
IP包流向:客户端 ---> Haproxy(网关上) ---> autossh 穿透 ----> Nginx (内网机器) ---> 3389 端口。

Haproxy、Nginx 都配置 proxy_protocol tcp stream (理论上都可以使用Nginx,未测试)

此时内网机器3389端口直接就可以拿到 客户端的IP了。

引用:
代理协议 (Proxy protocol),是HAProxy的作者Willy Tarreau于2010年开发和设计的一个Internet协议,通过为tcp添加一个很小的头信息,来方便的传递客户端信息(协议栈、源IP、目的IP、源端口、目的端口等)。
问题中描述的配置不方便贴出来。

关于透传IP的配置,可参考这个类似的案例:
https://rangotec.com/archives/460
回复