mirror of
https://github.com/fatedier/frp.git
synced 2026-05-15 08:05:49 -06:00
[GH-ISSUE #4471] [Feature Request] locaIP和ServerIP相同如何映射? #3534
Labels
No labels
In Progress
WIP
WaitingForInfo
bug
doc
duplicate
easy
enhancement
future
help wanted
invalid
lifecycle/stale
need-issue-template
need-usage-help
no plan
proposal
pull-request
question
todo
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/frp#3534
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Mrqqeat on GitHub (Oct 5, 2024).
Original GitHub issue: https://github.com/fatedier/frp/issues/4471
Describe the feature request
serverAddr = "101.42.123.123"
serverPort = 6688
proxies
name = "test-tcp"
type = "tcp"
localIP = "101.42.123.123"
localPort = 3000
remotePort = 3000
我想要此条frpc的配置能够运行。
Q:为什么要localIP和serverIp相同呢?
A:正常来说,是内网部署服务,然后映射到外网访问。但是某些特殊的服务端部署和给客户端访问的是同一个IP。
比如一个游戏服务端,部署服务是从数据库读的一个IP进行部署,而服务端给客户端连接的IP也是这条记录的这个IP。
这就导致部署IP和客户端访问IP是一个IP,所以肯定得用外网IP,不然客户端没办法访问,但是用外网IP那怎么部署呢,只能添加一个虚拟网络修改IP为外网这个IP然后部署到这个IP的网络上,于是就有了内网[101.42.123.123]映射到外网[101.42.123.123]的操作,但是frpc读取这样的配置会报错。有没有解决方法或者其他方案呢。
因为服务端都是编译好的,所以也没办法修改服务端。
Describe alternatives you've considered
No response
Affected area
@horizon86 commented on GitHub (Oct 6, 2024):
你这个操作就很离奇,你是两个IP不在一个机器上?路由规则是分不清外网[101.42.123.123]和内网[101.42.123.123]的,你两个IP一样,当你访问101.42.123.123时,具体访问哪个就看你路由规则是怎么写的
@Mrqqeat commented on GitHub (Oct 6, 2024):
都在一个机器上,emmmm但是如果frpc分不清外网[101.42.123.123]和内网[101.42.123.123]就没办法了。
因为服务端只能部署在[101.42.123.123]这个内网,不能部署在[192.168.xx.xx]这种内网上,原因就是给客户端的就是部署的IP,如果部署到192.168.xx.xx,那给客户端的IP也是192.168.xx.xx,客户端肯定连不上,所以给客户端的必须是外网,所以就得建个和外网IP一样的内网来进行部署到这个网络下。只能怪这个服务端神奇了 ,明明映射就可以解决非要这么部署emmm而且部署和客户端还用的同一IP。
后面发来不用非要映射内网的[101.42.123.123],映射内网的[192.168.xx.xx]也可以,但是如果建立了内网[101.42.123.123],那么就没办法把[101.42.123.123]作为serverAddr了,希望frpc还是能解决一下这个问题。
后面临时的解决方法是有个朋友有公网,部署到朋友电脑上,用他的路由器映射出去了,路由器没这个限制。
@horizon86 commented on GitHub (Oct 6, 2024):
既然在一个机器上,内网[101.42.123.123]和外网[101.42.123.123]是一张网卡的IP吗?那为什么还需要映射?
@Mrqqeat commented on GitHub (Oct 6, 2024):
不是一个网卡,内网的[101.42.123.123]只是建的一个Microsoft KM-TEST 环回适配器,只是一个虚拟的内网网络,只有本机能访问,但是就是有这么个适配器的存在,所以frpc就没法映射到外网的[101.42.123.123]上面了。
@horizon86 commented on GitHub (Oct 6, 2024):
我觉的你还是没描述清楚,所以你并没有一个可以被外网访问的[101.42.123.123]?我本来的理解是,你有一台公网的机器A,IP是[101.42.123.123],是可以被外网访问的,然后你在局域网中也设置了一个IP是[101.42.123.123]的机器B,用来部署游戏服务器。你希望访问公网机器A可以访问到你的游戏服务器?
但是看你之前的描述,你的公网服务器和内网机器是一台;而看你现在的描述,你并没有任何可以公网访问的机器?
@Mrqqeat commented on GitHub (Oct 6, 2024):
你的理解没问题,是我描述的问题,我有个云服务器部署了frps,就是[101.42.123.123]。
然后我自己的电脑架设了游戏服务器,想别人通过我的云服务器链接到我自己的电脑的游戏服务器。
问题就是我自己电脑没办法把内网映射到我的云服务器[101.42.123.123]上面,原因就是因为我自己电脑建的这个TEST环回适配器IP也是[101.42.123.123],就导致frpc识别错误从而不能正常映射。
@Mrqqeat commented on GitHub (Oct 6, 2024):
如果你给自己电脑的网络创建一个适配器,将IPV4地址改成一个云服务器的IP,那frps的serverAddr将不能再使用那个云服务器的IP映射了。就会导致冲突,原因可能是frps把这个适配器和真正的外网IP混淆了。
但是路由器就没这个限制,所以frps如果能解决这个问题或者加个更详细的区分,那自由度应该会更高
@horizon86 commented on GitHub (Oct 6, 2024):
所以你的朋友的电脑也弄了一个虚拟网卡,虚拟网卡的IP就是路由器的WAN侧IP?路由器没这个问题是因为路由器和你朋友的电脑可以主动通信,并且用的是内网IP(192.168.x.x)。这么看起来,游戏服务器是listen了0.0.0.0,那我猜测可以这么实现:
你在windows(先假定你用了windows)里面把101.42.123.123的路由规则删了(理论上应该有一条网关是
在链路上,网络目标是101.42.123.123的路由规则),然后frp的localIP就写127.0.0.1或者是你的192.168.x.x,localPort就是游戏的port,serverIP就写正常的[101.42.123.123]比如我的电脑路由表有一条这个:route print -4
你应该找到类似:
然后删除这条路由规则
P.S. 路由器可以用的根本原因在于路由器可以主动使用内网IP访问你的电脑,但是云服务器不可以,如果让frp支持的话,需要frp手动去绕开路由规则,而考虑到frp本身“跨平台”的设计思想,大概不会做和操作系统深度绑定的这么hack的操作,当然支持肯定更好。
@xqzr commented on GitHub (Oct 8, 2024):
通过一些 NAT 来满足...
@fatedier commented on GitHub (Oct 9, 2024):
你应该尽量考虑通用的解决方案,这个项目不太会做非常特殊的事情。