内网穿透的功能
目的:利用云服务器映射本地电脑可以通过域名进行访问本地电脑建设的网站和进行远程桌面访问本地电脑(远程桌面,远程文件,SSH等等)。
当然,你可以使用花生壳几步就可以进行访问,但是免费的会有限制,本着白嫖原则,研究了一下frp进行内网映射。

frp是什么
简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP、TCP、UDP等众多协议。我们今天仅讨论TCP和UDP相关的内容。
准备工作
阿里云轻量级服务器,可以安装宝塔面板进行管理,但是放行端口的时候一定要两边都进行放行
域名:可以申请域名然后进行备案,也不贵,一年几十块钱就可以搞定
PC :安装Apache,确定网页输入localhost:8080可以看见网页内容

一, 在云服务器安装frp服务端
实现过程,SSH连接到VPS之后运行命令 arch 查看处理器架构,根据架构下载不同版本的frp
查看结果,如果是“X86_64“即可选择”amd64”,远程登陆之后下载frp
wget https://github.com/fatedier/frp/releases/download/v0.24.1/frp_0.24.1_linux_amd64.tar.gz
tar -zxvf frp_0.24.1_linux_amd64.tar.gz
cp -r frp_0.24.1_linux_amd64 frp
cd frp
vim frps.ini注意,版本可以自己选,根据构架选择相应版本并进行下载(当然你也可以下载到本地修改好再上传也都行,仓库地址:frp各版本下载传送门自己去看下
# 配置frps文件:
[common]
bind_port = 7000 #客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
dashboard_port = 7500 #服务器端仪表板的端口,可以查看服务器状态。
token = 123456 #登录令牌口令,这个也是配置客户端要用到的。
dashboard_user = admin #表示打开仪表板页面登录的用户名。
dashboard_pwd = admin #表示打开仪表板页面登录的密码。
vhost_http_port = 80 #反向代理HTTP主机时使用。
vhost_https_port = 10443 #反向代理HTTPS主机时使用。这些将就着看下吧。实际还不止这些,你要是有耐心可以直接去仓库哪里看看。我frp配置传送门去看下吧。
进入frp文件夹启动frp服务器:./frps -c frps.ini 显示success

然后输入你的公网ip:7500 显示下列 登陆就输入上面配置的账号和密码,显示frp控制面板

服务端在后台运行
我们的服务端仅运行在前台,如果Ctrl+C停止或者关闭SSH窗口后,frps均会停止运行,因而我们使用 nohup命令将其运行在后台。
nohup后台程序管理或关闭相关命令可自行查询资料,上面这个连接中也有所提及。
nohup ./frps -c frps.ini &
输出如下内容即表示正常运行,选择后台启动。在linux中使用如下命令进行后台启动。然后运行的日志会输出到当前目录的nohup.log文件中
nohup: ignoring input and appending output to 'nohup.out'
此时可先使用Ctrl+C关闭nohup,frps依然会在后台运行,使用jobs命令查看后台运行的程序jobs
在结果中我们可以看到frps正在后台正常运行
[1]+ Running nohup ./frps -c frps.ini &
此时访问 x.x.x.x:7500 依然可以打开仪表板界面,至此,服务端即设置完成,你可以关闭SSH窗口了。
二、安装需要映射出去的电脑端的frp客户端
电脑这边下载的是frp_0.37.0_windows_amd64,可以去上面的版本链接中下载
# 配置frpc.ini
[common]
server_addr = **.***.**.** #自己的公网ip
server_port = 7000 #客户端和服务端连接的端口,
token = 123456
[web] #映射建立的网站,代理处内网里面的网站
type = http
local_ip = 127.0.0.1 #需要代理出去的ip
local_port = 8080 #内网的web端口
custom_domains = frp.g*st.top #绑定的域名
pool_count=10
[ssh] #ssh *** -p 6000
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 #remote_port外部端口
[rdp] #远程桌面连接
type = tcp
local_ip = 127.0.0.1
local_port = 3389 #需要代理出去访问的端口,这里是3389
remote_port = 7389 #这里就是转发出去的端口,访问的代理端口 远程桌面访问:云服务器公网IP:7389
[smb] #SMB,即Windows文件共享所使用的协议,默认端口号445,协议TCP,本条规则可实现远程文件访问。
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002启动客户端:进入frp文件夹启动frp服务器:./frpc -c frpc.ini 显示success

客户端后台运行及开机自启
frpc运行时始终有一个命令行窗口运行在前台,影响美观,我们可以使用一个批处理文件来将其运行在后台,而且可以双击执行,每次打开frpc不用再自己输命令了。
在任何一个目录下新建一个文本文件并将其重命名为“frpc.bat”,编辑,粘贴如下内容并保存。
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd C:\frp
frpc -c frpc.ini
exit
将cd后的路径更改为你的frpc实际存放的目录。
之后直接运行这个 .bat 文件即可启动frpc并隐藏窗口(可在任务管理器中退出)。
至于开机启动,把这个 .bat 文件直接扔进Windows的开机启动文件夹就好了 :)
至此,客户端配置完成,之后就是你自己根据需要在frpc.ini后追加规则即可。
三、映射本地电脑远程桌面访问
在云服务器的frps和本地PC中的frpc都能succcess时
远程桌面访问

自此,映射本地电脑远程桌面访问已经实现,只要能弹出输入你的凭证就证明frp配置无误,其他远程登陆问题,包括创建用户,开启远程桌面等设置问题,请查阅远程桌面连接问题。
四、映射本地网站到域名中进行访问
上面确保本地能访问到这个页面,然后通过域名进行访问。

访问成功云服务也边会有日志显示

如果没有记录显示,首先就是确保云服务器和宝塔那边上述对应的端口是否放行了
我们访问网页成功frps面板这边会有流量传输显示

至此,通过域名访问本地服务器的网站功能也已经实现。
本文章,为功能实现日志记录,方便以后查阅使用。强烈建议大家在使用frp直接测试内网穿透前,先在局域网内测试好相关功能的正常使用,并配置好可能会影响的Windows防火墙等内容,在内网调试通过后再使用frp进行内网穿透测试。