本文及资源最后更新时间 2020-07-05 by sky995
frp内网穿透教程 frp内网穿软件 frp内网穿透工具
内网穿透介绍
互联网上两个不同的主机进行通信首先需要知道对方IP。根据IP协议,只有分配了公网IP的设备才能在互联网上通信和传输数据。而中国人口/设备众多,分配到的IPv4资源又少,因此绝大部分情况是通过路由器/交换机转换公网IP后才上网。
位于路由器/交换机后的设备一般是内网设备,分配的IP地址以192.168/172.16/10.0开头,属于内网IP。要让内网设备对外提供服务,就需要进行内网穿透。
注意:内网穿透和内网渗透仅有一字之差,但两者是完全不同的概念。内网渗透属于安全领域,指的是通过技术手段攻入(企业)内网,进而控制内网设备。
frp介绍
frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。
frp 项目官网是 https://github.com/fatedier/frp,中文官方文档地址是:https://github.com/fatedier/frp/blob/master/README_zh.md。除了安装过程,中文文档对使用过程已经介绍的非常详细,如遇到问题,建议先查看官方文档。
其他内网穿透工具
除了开源的frp,本人所知还有如下内网穿透/远控工具:
- ngrok:ngrok 也是很知名的内网穿透工具,自从2.x版本不再开源,名气在下降。ngrok官网也提供免费穿透隧道,但国内连接速度较慢。NATAPP、Sunny-Ngrok等工具基于ngrok二次开发而来;
- ZeroTier:号称零配置的内网穿透工具,提供与企业 SDN 交换机同等的高级网络虚拟化和管理功能,可以跨本地和广域网连接任何设备和程序。然而由于ZeroTier的服务器在国外,国内连接速度经常很感人,需要自行搭建Moon来解决;
- 花生壳/向日葵:相信大部分折腾过路由器的人都听说过花生壳DDNS,可能也知道向日葵远控软件。花生壳和向日葵是贝锐科技旗下的产品,注册账户后可免费体验内网穿透功能;
- TeamViewer:TeamViewer是国内外知名的远程控制、远程会议软件,额外提供文件上传下载等实用功能,比QQ远程协助好用一万遍。虽然个人版免费,但是现在TeamViewer商业化道路一去不复往,用起来越来越恶心,本人现在已经很少用;
- SAKURA FRP:基于frp的免费内网穿透工具,也有收费服务。对于这家的行为,网民褒贬不一。如果你没有自己的服务器,可以尝试一下这家。
个人认为,如果有外网服务器(包括NAT VPS),frp是最好的选择。如果只想远程控制一下电脑,TeamViewer就可以。
下面介绍frp内网穿透教程。
frp内网穿透教程
frp分服务端和客户端,本节分别做介绍。
部署frp服务端
服务端建议部署在国内VPS、国内NAT VPS、国外CN2 GIA VPS上,以提供良好的访问体验。
1. 打开 frp下载页面,下载最新版的 frp_0.33.0_linux_amd64.tar.gz
,然后上传到服务器(windows上传请参考:Bitvise连接Linux服务器教程,mac系统上传请参考:Mac电脑连接Linux教程),也可以ssh连接到服务器后用wget下载:
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
绝大部分服务器系统都是64位,因此本教程直接让你下载amd64的压缩包。如果你用的树莓派等特殊服务器,请换成相应架构的安装包。
2. 服务器上解压安装包:tar -zxvf frp_0.33.0_linux_amd64.tar.gz
;
3. 进入解压后的目录:cd frp_0.33.0_linux_amd64
,然后用vim/nano等编辑器编辑frps.ini
文件(可以下载到本地,编辑好后再上传上去),填入下面的内容:
<span class="pun">[</span><span class="pln">common</span><span class="pun">]</span> <span class="com"># frp监听的端口,默认是7000,可以改成其他的</span><span class="pln"> bind_port </span><span class="pun">=</span> <span class="lit">7000</span> <span class="com"># 授权码,请改成更复杂的</span><span class="pln"> token </span><span class="pun">=</span> <span class="lit">12345678</span> <span class="com"># frp管理后台端口,请按自己需求更改</span><span class="pln"> dashboard_port </span><span class="pun">=</span> <span class="lit">7500</span> <span class="com"># frp管理后台用户名和密码,请改成自己的</span><span class="pln"> dashboard_user </span><span class="pun">=</span><span class="pln"> admin dashboard_pwd </span><span class="pun">=</span><span class="pln"> admin enable_prometheus </span><span class="pun">=</span> <span class="kwd">true</span> <span class="com"># frp日志配置</span><span class="pln"> log_file </span><span class="pun">=</span> <span class="str">/var/</span><span class="pln">log</span><span class="pun">/</span><span class="pln">frps</span><span class="pun">.</span><span class="pln">log log_level </span><span class="pun">=</span><span class="pln"> info log_max_days </span><span class="pun">=</span> <span class="lit">3</span>
4. 设置和启动frp服务:
<span class="pln">mkdir </span><span class="pun">-</span><span class="pln">p </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">frp cp frps</span><span class="pun">.</span><span class="pln">ini </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">frp cp frps </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">bin cp systemd</span><span class="pun">/</span><span class="pln">frps</span><span class="pun">.</span><span class="pln">service </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">systemd</span><span class="pun">/</span><span class="pln">system</span><span class="pun">/</span><span class="pln"> systemctl enable frps systemctl start frps</span>
注意:这些命令执行成功的前提是进入了解压后的frp目录下(黑窗口执行过
cd frp_0.33.0_linux_amd64
命令)
5. 防火墙放行端口:
<span class="com"># 添加监听端口</span><span class="pln"> firewall</span><span class="pun">-</span><span class="pln">cmd </span><span class="pun">--</span><span class="pln">permanent </span><span class="pun">--</span><span class="kwd">add</span><span class="pun">-</span><span class="pln">port</span><span class="pun">=</span><span class="lit">7000</span><span class="pun">/</span><span class="pln">tcp </span><span class="com"># 添加管理后台端口</span><span class="pln"> firewall</span><span class="pun">-</span><span class="pln">cmd </span><span class="pun">--</span><span class="pln">permanent </span><span class="pun">--</span><span class="kwd">add</span><span class="pun">-</span><span class="pln">port</span><span class="pun">=</span><span class="lit">7500</span><span class="pun">/</span><span class="pln">tcp firewall</span><span class="pun">-</span><span class="pln">cmd </span><span class="pun">--</span><span class="pln">reload</span>
注意:
1. 如果是ubuntu或者centos 6,请使用ufw/iptables工具放行端口;
2. 7000和7500两个端口记得改成和frps.ini配置的一样
6. 浏览器打开“http://服务器IP:后台管理端口” ,输入用户名和密码可以查看连接状态:
frp管理后台
如果用的NAT VPS,端口应改成映射后的公网端口
服务端配置好后,接下来介绍客户端配置。
配置frp客户端
1. 首先还是打开 frp下载页面,下载最新版的客户端。根据客户端平台不同,请按照下面对应关系下载:
- windows系统:32位系统下载frp_0.33.0_windows_386.zip,64位系统下载 frp_0.33.0_windows_amd64.zip,如果不知道系统多少位,下载32位的总没错;
- mac系统:下载 frp_0.33.0_darwin_amd64.tar.gz;
- linux系统:32位系统下载 frp_0.33.0_linux_386.tar.gz,64位系统下载 frp_0.33.0_linux_amd64.tar.gz,不知道请下载32位的;
- 树莓派/路由器等:32位系统下载 frp_0.33.0_linux_arm.tar.gz,64位系统下载 frp_0.33.0_linux_arm64.tar.gz,如果不知道系统多少位,直接下载32位的。
2. 解压缩下载的压缩包,进入文件夹内;
3. 编辑frpc.ini,按照自己的需求设置转发。下面是一个示例:
<span class="pl-en"><span class="com"># 服务端配置</span> <span class="pun">[</span><span class="pln">common</span><span class="pun">]</span></span> <span class="pl-k"><span class="pln">server_addr</span></span> <span class="pun">=</span> <span class="pun">服务器</span><span class="pln">ip </span><span class="com"># 请换成设置的服务器端口</span> <span class="pl-k"><span class="pln">server_port</span></span> <span class="pun">=</span> <span class="lit">7000</span><span class="pln"> token </span><span class="pun">=</span> <span class="lit">12345678</span> <span class="com"># 配置ssh服务</span> <span class="pl-en"><span class="pun">[</span><span class="pln">ssh</span><span class="pun">]</span></span> <span class="pl-k"><span class="pln">type</span></span> <span class="pun">=</span><span class="pln"> tcp </span><span class="pl-k"><span class="pln">local_ip</span></span> <span class="pun">=</span> <span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span> <span class="pl-k"><span class="pln">local_port</span></span> <span class="pun">=</span> <span class="lit">22</span> <span class="pl-k"><span class="pln">remote_port</span></span> <span class="pun">=</span> <span class="pun">自定义的远程服务器端口,例如</span><span class="lit">2222</span> <span class="com"># 配置http服务,可用于小程序开发、远程调试等</span> <span class="pun">[</span><span class="pln">web</span><span class="pun">]</span><span class="pln"> type </span><span class="pun">=</span><span class="pln"> http local_ip </span><span class="pun">=</span> <span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span><span class="pln"> local_port </span><span class="pun">=</span> <span class="lit">8080</span><span class="pln"> subdomain </span><span class="pun">=</span><span class="pln"> test</span><span class="pun">.</span><span class="pln">hijk</span><span class="pun">.</span><span class="pln">pw remote_port </span><span class="pun">=</span> <span class="pun">自定义的远程服务器端口,例如</span><span class="lit">8080</span>
注意:
1. 一个服务端可以同时给多个客户端使用
2. [ssh]这样的名称必须全局唯一,即就算有多个客户端,也只能使用一次,其他的可以用[ssh2]、[ssh3]等;
3. 除了type为http/https,端口只能被一个服务使用
4. 如果用的nat vps,remote_port请改成映射后的端口
4. 登录服务器,防火墙放行监听的端口:
<span class="pln">firewall</span><span class="pun">-</span><span class="pln">cmd </span><span class="pun">--</span><span class="pln">permanent </span><span class="pun">--</span><span class="kwd">add</span><span class="pun">-</span><span class="pln">port</span><span class="pun">=</span><span class="lit">2222</span><span class="pun">/</span><span class="pln">tcp firewall</span><span class="pun">-</span><span class="pln">cmd </span><span class="pun">--</span><span class="pln">permanent </span><span class="pun">--</span><span class="kwd">add</span><span class="pun">-</span><span class="pln">port</span><span class="pun">=</span><span class="lit">8080</span><span class="pun">/</span><span class="pln">tcp firewall</span><span class="pun">-</span><span class="pln">cmd </span><span class="pun">--</span><span class="pln">reload</span>
nat vps放行的端口应该是系统内部端口
5. 接下来以windows为例,介绍运行方法:按“win键 + r”(win键是ctrl和alt中间有windows图标的那个按键)-》输入cmd、回车 -》使用cd命令进入解压文件夹,例如 cd Desktop\
frp_0.33.0_windows_amd64
(切换到其他分区,例如D盘,请使用 cd /d d:
的形式) -》 ./frpc.exe -c frpc.ini
;
内网的linux机器,可参考服务端的方式部署成服务并设置开机启动
6. 登录frp管理后台,应该可以看到客户端已经连上来了:
frp查看客户端连接
总结
frp是一款非常棒的开源、免费的内网穿透工具,对于有vps的网友,建议使用frp部署内网穿透服务,从而远程访问内网的设备和数据。