[GH-ISSUE #2156] 远程请求记录真实的 IP 地址 #1717

Closed
opened 2026-05-05 13:06:08 -06:00 by gitea-mirror · 13 comments
Owner

Originally created by @heyzqq on GitHub (Dec 18, 2020).
Original GitHub issue: https://github.com/fatedier/frp/issues/2156

The solution you want
远程请求时,都是由本地 127.0.0.1 发起的,无法获取真实 IP。

Alternatives considered
比如 SSH 登陆,如果能记录登陆的真实 IP 地址,哪怕是内网的地址也好,因为看日志无法分辨是谁在尝试登陆。

Originally created by @heyzqq on GitHub (Dec 18, 2020). Original GitHub issue: https://github.com/fatedier/frp/issues/2156 **The solution you want** 远程请求时,都是由本地 127.0.0.1 发起的,无法获取真实 IP。 **Alternatives considered** 比如 SSH 登陆,如果能记录登陆的真实 IP 地址,哪怕是内网的地址也好,因为看日志无法分辨是谁在尝试登陆。
Author
Owner

@heyzqq commented on GitHub (Dec 18, 2020):

# last
root    pts/1        127.0.0.1        Sun Dec 13 00:38 - 00:38  (00:00)
root    pts/2        127.0.0.1        Sat Dec 12 15:26 - 15:58  (00:32)
<!-- gh-comment-id:747800078 --> @heyzqq commented on GitHub (Dec 18, 2020): ``` # last root pts/1 127.0.0.1 Sun Dec 13 00:38 - 00:38 (00:00) root pts/2 127.0.0.1 Sat Dec 12 15:26 - 15:58 (00:32) ```
Author
Owner

@Dagsi commented on GitHub (Dec 18, 2020):

日志能够记录到也好

<!-- gh-comment-id:747850903 --> @Dagsi commented on GitHub (Dec 18, 2020): 日志能够记录到也好
Author
Owner

@heyzqq commented on GitHub (Dec 19, 2020):

日志能够记录到也好

嗯,有时候拉黑名单需要。

<!-- gh-comment-id:748430816 --> @heyzqq commented on GitHub (Dec 19, 2020): > 日志能够记录到也好 嗯,有时候拉黑名单需要。
Author
Owner

@heyzqq commented on GitHub (Dec 19, 2020):

哥们多了解点网络别做梦了

既然服务器能拿到 IP,那 frps 应该也是有办法拿到的吧。

<!-- gh-comment-id:748438819 --> @heyzqq commented on GitHub (Dec 19, 2020): > 哥们多了解点网络别做梦了 既然服务器能拿到 IP,那 frps 应该也是有办法拿到的吧。
Author
Owner

@heyzqq commented on GitHub (Dec 19, 2020):

你还是没有明白,frps 是可以知道,你也可以直接处理 frps 的日志,但是

frps -> frpc 之间不会传输 frps 端接收的客户端 IP,即使 frps 通过某些手段加上了 IP 字段传输给 frpc ,frpc 也没有办法把这个 IP 让 ssh 知道,也就是,你 last,或者 ssh log 中的永远只是 127.0.0.1,你这都扯到网络层面了,所以,别做梦了,我说的够明白了,这是个不可能的事情,你要改,就要连 ssh 的源码一起改掉,哦当然,万事没有绝对,iptables + pcap 之类,粘一粘应该能做出你想要的东西

哦哦,明白了。就是即使知道 IP,也没办法利用 IP 在本地 SSH 去限制(那在装 frps 的服务器应该可以限制吧)

# FRPS logs
[ssh] get a new work connection: [121.47.XXX.XXX:23107]

还有一个就是,有些需求需要获取访问用户的真实 IP 地址的(比如网站需要记录识别唯一用户),这种不知道在 HTTP 头能不能获取到

<!-- gh-comment-id:748491728 --> @heyzqq commented on GitHub (Dec 19, 2020): > 你还是没有明白,frps 是可以知道,你也可以直接处理 frps 的日志,但是 > > frps -> frpc 之间不会传输 frps 端接收的客户端 IP,即使 frps 通过某些手段加上了 IP 字段传输给 frpc ,frpc 也没有办法把这个 IP 让 ssh 知道,也就是,你 last,或者 ssh log 中的永远只是 127.0.0.1,你这都扯到网络层面了,所以,别做梦了,我说的够明白了,这是个不可能的事情,你要改,就要连 ssh 的源码一起改掉,哦当然,万事没有绝对,iptables + pcap 之类,粘一粘应该能做出你想要的东西 哦哦,明白了。就是即使知道 IP,也没办法利用 IP 在本地 SSH 去限制(那在装 frps 的服务器应该可以限制吧) ``` # FRPS logs [ssh] get a new work connection: [121.47.XXX.XXX:23107] ``` 还有一个就是,有些需求需要获取访问用户的真实 IP 地址的(比如网站需要记录识别唯一用户),这种不知道在 HTTP 头能不能获取到
Author
Owner

@yuyulei commented on GitHub (Dec 21, 2020):

可以在 HTTP 头获取源 IP,可以参考 nginx 的方式。

<!-- gh-comment-id:748739546 --> @yuyulei commented on GitHub (Dec 21, 2020): 可以在 HTTP 头获取源 IP,可以参考 nginx 的方式。
Author
Owner

@yuyulei commented on GitHub (Dec 21, 2020):

@heyzqq 如果是想拿到 ssh 请求方的源 IP,一般日志里确实没有,但是打开 debug 日志后,可以在 frps 的日志里看到对应信息,随便给了个示例图如下:
image

其中红色涂掉的地址,是用户连接的本地和远端地址,其中后面那个就是用户的 IP。

不知道这样是否已经满足你的要求?其他类型(ssh 外)的代理也是类似的。

注:最后关于 debug 日志,通常是开发人员自己排查问题时候打开的。

<!-- gh-comment-id:748769799 --> @yuyulei commented on GitHub (Dec 21, 2020): @heyzqq 如果是想拿到 ssh 请求方的源 IP,一般日志里确实没有,但是打开 debug 日志后,可以在 frps 的日志里看到对应信息,随便给了个示例图如下: ![image](https://user-images.githubusercontent.com/18277081/102742922-241aff00-4391-11eb-9b58-90b8c07087a9.png) 其中红色涂掉的地址,是用户连接的本地和远端地址,其中后面那个就是用户的 IP。 不知道这样是否已经满足你的要求?其他类型(ssh 外)的代理也是类似的。 注:最后关于 debug 日志,通常是开发人员自己排查问题时候打开的。
Author
Owner

@heyzqq commented on GitHub (Dec 21, 2020):

可以在 HTTP 头获取源 IP,可以参考 nginx 的方式。

好的谢谢,下次有遇到可以试试。

<!-- gh-comment-id:748914773 --> @heyzqq commented on GitHub (Dec 21, 2020): > 可以在 HTTP 头获取源 IP,可以参考 nginx 的方式。 好的谢谢,下次有遇到可以试试。
Author
Owner

@shunf4 commented on GitHub (Jan 10, 2021):

能不能把用户的 IP 放到 info 级的日志里?要不然 info 日志里只能看到大量重复的

[ssh] get a new work connection: [127.0.0.1:....]

信息量实在很小。

<!-- gh-comment-id:757516075 --> @shunf4 commented on GitHub (Jan 10, 2021): 能不能把用户的 IP 放到 info 级的日志里?要不然 info 日志里只能看到大量重复的 > [ssh] get a new work connection: [127.0.0.1:....] 信息量实在很小。
Author
Owner

@zngw commented on GitHub (Jan 11, 2021):

同样希望frps中能记录连接者的ip,最近老是被人暴力破解,一天几千次的 get a new work connection,但又看不是是谁连过来的。后面安装了iptraf,与frps的日志配合查是谁来连接了

<!-- gh-comment-id:757621820 --> @zngw commented on GitHub (Jan 11, 2021): 同样希望frps中能记录连接者的ip,最近老是被人暴力破解,一天几千次的 get a new work connection,但又看不是是谁连过来的。后面安装了iptraf,与frps的日志配合查是谁来连接了
Author
Owner

@yuyulei commented on GitHub (Jan 12, 2021):

http/https 可以通过获取源 IP ,官方文档中有提到,这里不重复。
针对 非 http/https 的请求临时补充了日志,可以通过 frps 的日志查看类似

[ssh] get a user connection: xx.xx.xx.xx:xxxx

作为过渡方案。

<!-- gh-comment-id:758367040 --> @yuyulei commented on GitHub (Jan 12, 2021): http/https 可以通过获取源 IP ,官方文档中有提到,这里不重复。 针对 非 http/https 的请求临时补充了日志,可以通过 frps 的日志查看类似 ``` [ssh] get a user connection: xx.xx.xx.xx:xxxx ``` 作为过渡方案。
Author
Owner

@rainbend commented on GitHub (Jan 29, 2021):

Hi @heyzqq 可以试试 https://github.com/arugal/frp-notify, 利用 server manager plugin 将连接信息发送到钉钉

<!-- gh-comment-id:769894479 --> @rainbend commented on GitHub (Jan 29, 2021): Hi @heyzqq 可以试试 https://github.com/arugal/frp-notify, 利用 server manager plugin 将连接信息发送到钉钉
Author
Owner

@heyzqq commented on GitHub (Jan 31, 2021):

Hi @heyzqq 可以试试 https://github.com/arugal/frp-notify, 利用 server manager plugin 将连接信息发送到钉钉

谢谢,了解一下。

<!-- gh-comment-id:770338930 --> @heyzqq commented on GitHub (Jan 31, 2021): > Hi @heyzqq 可以试试 https://github.com/arugal/frp-notify, 利用 server manager plugin 将连接信息发送到钉钉 谢谢,了解一下。
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#1717
No description provided.