运用frp工具实现内网穿透

资料

内网穿透: wiki百科[https://baike.baidu.com/item/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/8597835?fr=aladdin 百度百科[https://zh.wikipedia.org/wiki/NAT%E7%A9%BF%E9%80%8F]

frp官方文档 https://github.com/fatedier/frp

准备

1.一个带公网IP的云主机,后边将会把内网的主机映射到这个 IP 地址

2.frp下载 https://github.com/fatedier/frp/releases (注意:服务端与本地端的frp版本最好一致)

3.WinWS https://github.com/kohsuke/winsw/releases (实现window命令行的开机启动与后台运行)

前言

什么是frp

FRP(Fast Reverse Proxy)是一个可用于实现内网穿透的反向代理应用,他的特点是开源,高性能,支持TCP,UDP,HTTP,HTTPS等协议。

以下是我用腾讯云(基于Ubuntu的Linux主机)为服务端,Win10为本地端,使用frp工具搭载内网穿透服务的过程。

我目前完成的内网穿透只实现了本地主机搭建web服务与搭建远程屏幕服务,更多的服务与需求可访问frp官网来配置对应ini文件实现。

过程

Linux云服务端

下载 frp_0.31.2_linux_amd64.tar.gz 到任意目录内(这里选择了官网最新的0.31.2版本)

解压文件 sudo tar -zxvf frp_0.31.2_linux_amd64.tar.gz

打开文件 cd frp_0.31.2_linux_amd64

删除不需要的文件 sudo rm -rf frpc frpc.ini frpc_full.ini

(frpc对应的文件是配置在内网主机端的,frps对应的文件是配置在服务端的,所以这里选择删除了frpc有关文件)

用vim/vi编辑frp服务端配置文件frps.ini sudo vi frps.ini

(vim/vi使用提示:按i进入编辑模式,按Esc退出编辑模式,按Shift+:后输入wq再按Enter完成编辑,具体操作自行百度Google学习。)

这里使用标准配置

 # frps.ini
 [common]
 bind_port = 7000   #用于正常连接服务
 vhost_http_port = 8080    #用于搭建web服务

配置参考,frp:Github官网

至此服务端配置完成

在此目录下运行程序 ./frps -c ./frps.ini

命令行出现start frps success代表运行成功

Windows10本地端

下载 frp_0.31.2_windows_amd64.zip]到任意目录

解压

打开后删除不必要的文件,本地端对应删除frps相关文件,并保留frpc相关文件文件

配置frpc.ini文件

 # frpc.ini
 [common]
 server_addr = x.x.x.x    #这里填你的云服务器的IP地址
 server_port = 7000       
 ​
 [web]  #搭建web服务
 type = http
 local_port = 80
 custom_domains = www.yourdomain.com     #有域名填你的域名,没有域名填云服务器的IP地址
 ​
 [RDP]   #搭建远程桌面服务
 type = tcp
 local_ip = 127.0.0.1     #不确定local_IP可通过cmd输入ipconfig来确定
 local_port = 3389
 remote_port = 7001

配置参考,frp:Github官网

配置完成,现在在此目录下运行cmd,输入frpc.exe运行文件,看到success代表运行成功!

注意!!如果本地端和服务端连接失败,很有可能是服务端的端口没有开放。

这里我用的 sudo /sbin/iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT 来开放的所需要连接的端口

实现功能

上述搭建服务只为暂时性的,关闭命令行或者cmd后也会关闭服务。

所以我们要用到Linux和Windows对应的开机运行与后台运行工具。

Linux

这里用到Linux的systemctl start

编辑配置文件sudo vi /etc/systemd/system/frps.service注意修改文件目录

 [Unit]
 Description=frps daemon
 After=syslog.target  network.target
 wants=network.target
 ​
 [Service]
 Type=simple
 ExecStart=/usr/xiaoyao/frp_0.31.2_linux_amd64/frps -c /usr/xiaoyao/frp_0.31.2_linux_amd64/frps.ini   #请注意这里对应修改文件所在目录!!!
 Restart= always
 RestartSec=1min
 ​
 [Install]
 wantedBy=multi-user.target

配置参考:知乎@药师

ExecStart 请根据自己下载软件的目录修改!

保存配置后启动服务可以让frps服务在后台运行

启动服务systemctl start frps

注: 重启服务可用 systemctl restart frps

window

这里使用WinSW工具,下载地址:https://github.com/kohsuke/winsw/releases

这里选择的版本是 WinSW.NET461.exe

将程序改名为winsw.exe便于运行

将软件下载到存放frpc的文件夹里,新建winsw.xml文件,写入以下配置

 <service>
     <id>frp</id>
     <name>frp</name>
     <description>用于实现内网穿透的服务,目标IP:</description>
     <executable>frpc</executable>
     <arguments>-c frpc.ini</arguments>
     <logmode>reset</logmode>
 </service>

配置参考:Google

在该目录下管理员方式运行 cmd 窗口并执行 winsw install 即可将 frp 安装为系统服务(注意该目录,管理员)

安装完成后关闭cmd,按Win+R后输入services.msc,找到frp服务,右键启动该服务。

实现服务

web:

Windows开启web服务:自行Google

远程访问你的web网页:打开你手机的浏览器输入你的域名加上:8080即可访问,示例 xiaoyaovo.cn:8080程桌面连接)

手机上下载DR Client后 添加电脑 输入你的IP地址加上:7001即可访问,示例 49.**.**.160:7001

其他

这篇文章我是大概2月份写的,由于域名没有备案好,就一直放在本地,现在可以上传到个人博客了,也是挺开心!


我啥也不会!