一、内网穿透目的
实现公网上,访问到windows上启动的web服务
二、内网穿透的环境准备
公网服务器、windows11的电脑、frp软件(需要准备两个软件,一个是安装到公网服务器上的,一个是安装到windows上的)
- frp下载地址
- 下载版本
1.此版本(老版本)供参考,比较新的版本,配置文件是与老版本不一样的
2.公网服务器上的版本,与windows上的版本是需要对应起来的
三、公网服务器的配置安装
-
将Linux版本放到 公网服务器
/usr/local/frpInstall
目录下frpInstall的文件夹需自己创建的
-
更改文件的读写权限、用户和用户组
#添加文件的用户、用户组为 root(超级管理员)
csudo chown -R root:root frp_0.33.0_linux_amd64.tar.gz
#更改文件的读写权限为可读可写
cchmod 777 frp_0.33.0_linux_amd64.tar.gz
-
文件解压缩
ctar -zxvf frp_0.33.0_linux_amd64.tar.gz
-
更改配置文件
进入解压缩文件,服务端的配置文件为
frps.ini
,将其打开,替换为c[common] # frp监听的端口,默认是7000,可以改成其他的 bind_port = 7000 # 授权码,请改成更复杂的 # 这个token之后在客户端会用到 token = 123456 # frp管理后台端口,请按自己需求更改 dashboard_port = 7500 # frp管理后台用户名和密码,请改成自己的 dashboard_user = admin dashboard_pwd = admin enable_prometheus = true # 访问公网的web端口,按自己需求更改 vhost_http_port = 8080
-
安装服务端并执行启动
c#放到指定文件夹,以能够用systemctl去启动frp sudo mkdir -p /etc/frp sudo cp frps.ini /etc/frp sudo cp frps /usr/bin sudo cp systemd/frps.service /usr/lib/systemd/system/ # 检测是否能使用systemctl启动frps sudo systemctl enable frps #启动frps状态 sudo systemctl start frps #查看frps状态 systemctl status frps.service
-
防火墙开放端口
-
检测服务端frp安装是否成功
访问
http://公网ip:7500/
,出现下图时,代表服务端搭建成功
四、windows客户端的配置安装
-
解压客户端软件包,并更改配置文件
c[common] server_addr = 公网ip server_port = 7000 token = 123456 [web_8800] type = http local_ip = 127.0.0.1 local_port = 80 custom_domains = 公网ip remote_port = 8080
-
启动客户端
在软件包所在页面,文件夹路径上,输入
cmd
,在弹出的黑窗口中执行frpc.exe
五、代理
访问 公网ip:8080
映射到windows上127.0.0.1:80
六、frp实现多端口穿透
上面步骤实现的是单个端口,那如何实现多端口同时穿透,例实现 公网ip:9001
映射到windows上的127.0.0.1:80
,同时实现 公网ip:9002
映射到windows上的127.0.0.1:8092
1.只需更改客户端配置文件frpc.ini
,其他如上
c
[common]
server_addr = 公网ip
server_port = 7000
token = 52010
[web_80]
# 类型是tcp,而不是http,
# 原理(参考):frp会直接将其当作tcp数据包处理,只处理到了传输层(tcp)
type = tcp
# 本地ip
local_ip = 127.0.0.1
# 本地端口
local_port = 80
# 远程访问的端口
remote_port = 9001
[web_8080]
type = tcp
local_ip = 127.0.0.1
local_port = 8092
remote_port = 9002
2.注意点
①frps.ini
配置文件中vhost_http_port = 8080
,对应的端口号8080
,在多端口穿透中是没用的可以去掉,如果没去掉,多端口映射的客户端配置文件frpc.ini
中,remote_port
配置的端口号不要与8080
相同。
②此使用tcp的映射方式,不能监听1024以下的端口(服务端非root是不允许监听1024以下的端口),也即remote_port
不能配置1024
以下端口
③此使用tcp的映射方式,对romote_port
有要求,如果将其设置为8999
,此穿透会失败,设置的只有大于等于 9001
才可以,具体规则大家自己尝试获取。
七、frp实现监听web的80端口
-
服务端
frps.ini
配置c[common] server_addr = 公网ip server_port = 7000 token = 123456 [web_8800] type = http local_ip = 127.0.0.1 local_port = 80 custom_domains = 公网ip remote_port = 80
-
服务端
frps.service
更改
原因:根据frp的systemd配置默认使用nobody用户运行,而非root是不允许监听1024以下的端口。所以,把frp的systemd配置里面的"User=nobody"注释掉,此解决方式针对通过
http
方式进行的监听,tcp还是存在此问题 -
客户端
frpc.ini
配置c[common] server_addr = ip公网 server_port = 7000 token = 52010 [web_80] type = http local_ip = 127.0.0.1 local_port = 80 custom_domains = ip公网 remote_port = 80