前提条件
想要使用frp实现内网穿透的前提是一定要有一个公网IP的电脑,性能不重要,重要的是得有公网IP,一般有两种选择,一种是免费的云服务器,一种是公司总部的网络有公网IP,如果需要花钱云服务器,那真不如直接买支持内网穿透的服务来得合算,现在也基本上没有长期免费的云服务器了,所以不用花时间去网上找了。
frp分为客户端和服务端,服务端安装在具有公网IP的电脑上,如果电脑位于公网IP路由器的局域网内,那么是需要在路由器上先做端口映射的,客户端装在你web应用的电脑上,一般两者不在同一个网络里,比如你的服务端在上海,你的客户端可以在全国的任何一个地方。
其他人访问你的web服务时,需不需要安装frp客户端了?是不需要安装的,只要你的服务端和客户端安装好frp并成功运行,连接起来了,其他人在任何地方都是可以访问的。
frp版本的选择
frp版本较多,如果是win10及以上系统,那么下载最新版本的frp就可以了,如果是win7系统,那么能使用的最后一个版本是0.44版本,需要注意客户端和服务端的版本要一致,否则无法连接成功。
frp可以从https://gofrp.org/zh-cn/ 进行下载,中文的网站,有文档说明和历史版本,但是0.44版的参数的新版不一样,就需要问问deepseek怎么配置了。
根据自己的操作系统来下载相对应的版本,我这里服务器端是win7的,就得下载windows版本的
解压开后里面包含客户端和服务端,建议在实际运行时,删除不必要的文件,以免出错。
frp的服务端配置
frp的配置文件是.ini,新版本的是.toml,参数也是不一样的,服务端的名称是frps.exe和frps.ini配置如下:
[common]
bind_addr = 0.0.0.0
bind_port = 6060
token = 密码
tcp_mux = true
基本上属于极简配置,bind_port是你需要监听的端口,token是密码,需要和客户端一致,tcp_mux表示端口复用,第一次配置时很折腾,不知道哪些起作用,需要多试几次,配置完成后保存,然后运行服务端,使用cmd进行运行
frps.exe -c frps.ini
运行后会出现日志信息,看是否运行成功,如果不成功,就把日志复制到deepseek中看看原因为啥不成功,我遇到的问题是更改了监听端口无效,一直监听的是7000端口,后来发现需要写上bind_addr = 0.0.0.0这一句,不然就是使用的默认监听端口。
如果服务端运行没有问题的话,就可以在有公网IP的路由器上做端口映射了,这个应大家都会,直接填就行了,除了映射上面的6060监听端口外,还需要映射你的应用端口,比如你想通过8088端口来访问web服务,那么就映射个8088。
frp的客户端配置
客户端配置什么在于你要开放哪些服务,客户的名称是frpc.exe和frpc.ini,建议也是删除不必要的其他文件,配置内容如下:
[common]
server_addr = 公网IP
server_port = 6060
token = 密码
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 443
remote_port = 8088
像上面的配置,就是把https的访问映射到了8088端口上了,配置完成后保存,然后命令行运行命令如下:
frpc.exe -c frpc.ini
同样也注意看日志,连接成功会有提示,服务端的命令行窗口中也会有信息显示的,如果一切正常,打开浏览器就能通过公网IP:端口号来进行访问了。
frp需要注意的问题
1、配置文件中的空格,=号前后的有没有都可以,但每一句的最后不要有空格,也不要有空行,避免出现问题。
2、反病毒软件查杀的问题,那只能添加到信任文件中了,它只是正常的软件引起的误杀。
3、命令行窗口能不能关闭,不能关闭,只要关闭服务就断开了,不能使用了。
4、命令行窗口只能一直开着吗,目前是这样子,只能一直开着,先重启几次能稳定运行后,可以使用winsw软件把frp客户端和服务端都转换成系统服务,这样就不需要打开命令行窗口了。
5、有没有图形化的配置软件了,服务端没有,毕竟服务端的配置很简单,客户端有,名字是frpmgr,你要找相对应的版本,需要确保frp的版本一致,如果是简单使用,则不需要。
6、WattToolKit工具,这个软件如果开启加速功能,会导致客户端无法正常访问,就因为这个折腾了好久,客户端和服务端都运行正常,但就是无法访问,后来才发现是它导致的。
winsw的使用
为避免每次使用都打开命令行窗口,可以使用winsw注册成系统服务,就省事多了,下载地址是
https://github.com/winsw/winsw,一般win7和win10上都会有.net 4.6,那就直接下winsw_net461.exe这个文件就可以了,它还需要一个和它同名的xml配置文件,手动编写一下。
winsw在服务端xml文件如下:
<service>
<id>frps</id>
<name>frps</name>
<description>frps服务端,实现公网访问web的应用</description>
<executable>E:\frp\frps.exe</executable>
<arguments>-c E:\frp\frps.ini</arguments>
<onfailure action="restart" delay="60 sec" />
</service>
winsw在客户端的xml文件如下:
<service>
<id>frpc</id>
<name>frpc</name>
<description>frpc客户端,实现公网访问web的应用</description>
<executable>E:\frp\frpc.exe</executable>
<arguments>-c E:\frp\frpc.ini</arguments>
<onfailure action="restart" delay="60 sec" />
</service>
winsw在命令行中可使用的命令如下,用来进行安装、启动、卸载等,直接复制就可以使用了
// 安装服务
WinSW-net461.exe install
// 卸载服务
WinSW-net461.exe uninstall
// 启动服务
WinSW-net461.exe start
// 停止服务
WinSW-net461.exe stop
// 重启服务
WinSW-net461.exe restart
// 查看状态
WinSW-net461.exe status
使用winsw后,可以方便的查看它记录的日志,对于问题的处理比较有帮助,安装成功后,可以在这里用命令行操作,也可以在控制面板的系统服务中进行手动的重启停止等操作。
结束
对于内网映射的这个需求,能实现的方法有很多,问一下deepseek会给出不少的方案,我也是不知道选哪个好,要么不安全,要么限速,要么操作复杂等,最主要的是你得有一个公网IP,不然好些是无法实现的,以前购买过极点云,一年费用200多,那个用起来也很方便,其次是购买个阿里云、腾讯云之类的ECS云服务器,但是看了下价格,一年最便宜的也得好几百了,不必为了这个事情单独购买它去,毕竟咱们还是以省钱、可控为主!