[GH-ISSUE #2529] 让后面的应用程序能获取到真实IP #2010

Closed
opened 2026-05-05 13:17:58 -06:00 by gitea-mirror · 5 comments
Owner

Originally created by @huangguiniab on GitHub (Aug 14, 2021).
Original GitHub issue: https://github.com/fatedier/frp/issues/2529

The solution you want

我想让后端的任何应用程序都能获得到真实IP
Alternatives considered

How to implement this function

这只是我的一个想法而已,大佬们觉得有没有可能付诸实现,这个是我从折腾NAT得到的灵感
首先用超级用户来运行frpc,frpc创建一张假网卡。
一个TCP连接传入frps,frps读取到IP来源位置,然后把IP来源和数据打包在一起,传递给frpc,frpc解析数据,从假网卡传入连接到后端应用,后面的应用程序会认为自己暴露在公网下,这样使得任何必须要识别来源IP的应用程序,比如BT下载,网页服务器,游戏服务器都可以通过frp代理。
往回传就给每一个IP都设置一个静态路由,这样操作系统就会把数据包发往假网卡,出口就不需要伪装了,因为怎么伪装出口的IP都变不了。
Application scenarios of this function

说实话,连我自己都觉得这个太过复杂,但是这样可以让任何,应用程序都可以拿到真正的来源IP,应该还会有更简单办法,但是我这个实在太复杂了,大佬们分析一下,有没有可能性

Originally created by @huangguiniab on GitHub (Aug 14, 2021). Original GitHub issue: https://github.com/fatedier/frp/issues/2529 <!-- From Chinese to English by machine translation, welcome to revise and polish. --> **The solution you want** <!--A clear and concise description of the solution you want. --> 我想让后端的任何应用程序都能获得到真实IP **Alternatives considered** <!--A clear and concise description of any alternative solutions or features you have considered. --> **How to implement this function** <!--Implementation steps for the solution you want. --> 这只是我的一个想法而已,大佬们觉得有没有可能付诸实现,这个是我从折腾NAT得到的灵感 首先用超级用户来运行frpc,frpc创建一张假网卡。 一个TCP连接传入frps,frps读取到IP来源位置,然后把IP来源和数据打包在一起,传递给frpc,frpc解析数据,从假网卡传入连接到后端应用,后面的应用程序会认为自己暴露在公网下,这样使得任何必须要识别来源IP的应用程序,比如BT下载,网页服务器,游戏服务器都可以通过frp代理。 往回传就给每一个IP都设置一个静态路由,这样操作系统就会把数据包发往假网卡,出口就不需要伪装了,因为怎么伪装出口的IP都变不了。 **Application scenarios of this function** <!--Make a clear and concise description of the application scenario of the solution you want. --> 说实话,连我自己都觉得这个太过复杂,但是这样可以让任何,应用程序都可以拿到真正的来源IP,应该还会有更简单办法,但是我这个实在太复杂了,大佬们分析一下,有没有可能性
Author
Owner

@fatedier commented on GitHub (Aug 16, 2021):

获取到真实IP 是一个非常常见的需求,X-Forward-For 以及 Proxy Protocol 等都是在网关层面解决类似问题的常见的方法。
如果有类似的需求,最好是能够对接这两种方案,这样可以适配更多的网关,而不仅仅是 frp。

<!-- gh-comment-id:899177587 --> @fatedier commented on GitHub (Aug 16, 2021): 获取到真实IP 是一个非常常见的需求,X-Forward-For 以及 Proxy Protocol 等都是在网关层面解决类似问题的常见的方法。 如果有类似的需求,最好是能够对接这两种方案,这样可以适配更多的网关,而不仅仅是 frp。
Author
Owner

@huangguiniab commented on GitHub (Aug 18, 2021):

我觉得您说的挺有道理的,但是您所说的协议也只支持http和h2,我的需求是开minecraft服务器,游戏的协议他原生就不支持这玩意,我的服务器插件都是靠IP地址来识别玩家名字的,现在我使用自建zerotier,因为它可以把IP报文一起给转发掉,但是这要求另外一边也要安装zerotier,这就很不舒服。现在的frp仅仅只是简单的接收tcp包,转发而已,不伪装自己的来源ip,我们的后端程序,他只认"来源IP",您应该能理解我的意思吧

<!-- gh-comment-id:901023872 --> @huangguiniab commented on GitHub (Aug 18, 2021): 我觉得您说的挺有道理的,但是您所说的协议也只支持http和h2,我的需求是开minecraft服务器,游戏的协议他原生就不支持这玩意,我的服务器插件都是靠IP地址来识别玩家名字的,现在我使用自建zerotier,因为它可以把IP报文一起给转发掉,但是这要求另外一边也要安装zerotier,这就很不舒服。现在的frp仅仅只是简单的接收tcp包,转发而已,不伪装自己的来源ip,我们的后端程序,他只认"来源IP",您应该能理解我的意思吧
Author
Owner

@huangguiniab commented on GitHub (Aug 18, 2021):

您想一想,现在的frp,除了使用http协议那两个获取真正IP的方法,TCP隧道能有什么方法能获取真正ip的办法吗。我不是开发者,我无能为力,但是那些基于TCP的更底层的应用程序,他只认所谓的来源IP,这就是让我很头疼的地方

<!-- gh-comment-id:901024785 --> @huangguiniab commented on GitHub (Aug 18, 2021): 您想一想,现在的frp,除了使用http协议那两个获取真正IP的方法,TCP隧道能有什么方法能获取真正ip的办法吗。我不是开发者,我无能为力,但是那些基于TCP的更底层的应用程序,他只认所谓的来源IP,这就是让我很头疼的地方
Author
Owner

@fatedier commented on GitHub (Aug 18, 2021):

Proxy Protocol 可以支持 TCP,且是一个很通用的协议。

<!-- gh-comment-id:901034403 --> @fatedier commented on GitHub (Aug 18, 2021): Proxy Protocol 可以支持 TCP,且是一个很通用的协议。
Author
Owner

@fatedier commented on GitHub (Aug 18, 2021):

你前面的想法,可以通过自己实现一个本地的桥接应用,获取 Proxy Protocol 协议内容,之后去转发给你的本地的其他服务。

<!-- gh-comment-id:901035176 --> @fatedier commented on GitHub (Aug 18, 2021): 你前面的想法,可以通过自己实现一个本地的桥接应用,获取 Proxy Protocol 协议内容,之后去转发给你的本地的其他服务。
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#2010
No description provided.