[技术干货] 【ECS】如何确定远程连接Windows主机的客户端源IP地址

【背景描述】

需要确定远程连接的客户端源ip地址,以便添加到安全组或防火墙白名单,但客户端本地外网出口IP不固定,有时访问的目标地址不同会有不同的出口IP。比如常用的ip地址查询网站https://www.ip138.com/和https://www.ipip.net/查询的本地IP可能就不一样,远程连接的本地出口IP可能和前面搜出来的都不同。此时最直接的方法是在目标服务器里抓包,查看连接的源ip地址即可确定。但对于没有抓包工具的Windows服务器,且遇到远程等端口无法建立连接的情况下就较为困难了。

【适用场景】:

适用于目标为Windows系统的服务器,且远程等端口监听正常,需要确定客户端源IP地址。

【操作步骤】:

1、在资源监视器里查看

若服务器里有可以访问的端口,比如本来就可以远程连接(3389端口),或可以访问到的网站(80、443端口),此时可以远程连接或访问网站,然后再在目标服务器的资源监视器里查看连接IP即可。

如下图所示,在Windows附件或搜索里搜索打开“资源监视器”。

       1.png


      在“网络”下的“TCP连接”里,可以看到目标服务器本地端口“3389”的连接“远程地址”,也就是客户端连接源ip地址。

     2.png


2、通过命令提示符查看

同样先远程连接上目标服务器或访问目标网站,然后再在目标服务器的命令提示符(cmd)里查看连接IP。

打开命令提示符输入如下命令回车执行:

netstat -ano |findstr 3389

      3.png


如上图,第二行为远程建立的连接,其中第三列为“外部地址”,也就是我们要找的客户端连接出口ip地址。

3、修改或增加端口转发确定

若云端服务器里没有直接可以访问的端口,比如3389端口现在就不能远程上(如客户端本地IP被某些防火墙拦截3389端口),且目标服务器本身也没有其他可以连接的端口。此时连接根本不能建立,上述查看连接状态的方法就不能直接查看了。

若从服务器内部查看3389端口是监听的,或从云平台内网或通过其他网络环境可以远程上服务器,说明远程服务是没有问题。此时可以把远程端口修改为非3389端口尝试连接上,然后再在服务器的资源监视器或命令提示符里查看远端连接IP即可。

3.1、修改远程端口确定

cmd命令提示符里运行:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 3390 /f

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp" /v PortNumber /t REG_DWORD /d 3390 /f

      4.png


重启服务器即可把远程端口修改为3390,然后用3390端口远程上服务器,cmd里执行netstat -ano |findstr 3390即可确定。

    5.png


3.2、增加端口转发确定

可以通过netsh interface portproxy端口转发命令,将3390的端口转发到3389端口:

netsh interface portproxy add v4tov4 listenaddress=192.168.0.169 listenport=3390 connectaddress=192.168.0.169 connectport=3389

注:192.168.0.169为目标服务器内网ip地址。

       6.png


相当于增加了一个3390的远程端口,然后用3390端口远程连接,netstat -ano |findstr 3390查看下远端IP即可。

       7.png


补充删除端口转发命令如下:

       netsh interface portproxy del v4tov4 listenaddress=192.168.0.169 listenport=3390