使用FRP内网穿透工具使处于内网中的电脑能够像访问公网电脑一样方便,项目一直开源
实战:将内网IP3389端口通过公网服务器19.19.19.19对外暴露为6000
即用MSTC访问19.19.19.19:6000来远程连接内网ip:3389
服务器需要开启6000端口。
操作
内网电脑与服务器上下载软件:https://github.com/fatedier/frp/releases
1. 服务端配置
1.1 解压,删除客户端相关的文件frpc.ini,frpc.exe.
1.2 编辑配置文件frps.ini:
[common]
bind_port = 7000 #客户端与服务器连接端口
token = 12345679 #客户端与服务器token相同才可以连接,此项可以删除,但容易被别人利用
1.3 通过启动服务端
frps -c frps.ini
防火墙要开启7000
2. 客户端配置
2.1 解压,可删除服务端相关文件frps.ini,frps.exe
2.2 编辑配置文件frpc.ini:
[common]
server_addr = 19.19.19.19
server_port = 7000
token = 12345679 #客户端与服务器token相同才可以连接
[RDP]
type = tcp
local_ip = 0.0.0.0
local_port = 3389
remote_port = 6000 #通过公网IP对外暴露的端口
2.3 启动客户端
CMD运行frpc.exe
完成,即可以用 19.19.19.19:6000来访问远程桌面了
2.4 设置开机启动和后台运行
对服务端与客户端设置后台运行和开机自启。借助 winsw 工具可以将frpc、frps注册为windows系统中的服务。
下载winsw最新版,为了方便将其重命名为winsw.exe, 将该文件和frpc.exe放在一起,然后新建winsw.xml写入以下内容:
<service>
<id>frp</id>
<name>frp</name>
<description>用frp发布本地电脑网站到外网</description>
<!-- 客户端用下面两行 -->
<executable>frpc</executable>
<arguments>-c frpc.ini</arguments>
<!-- 服务器端用下面两行-->
<executable>frps</executable>
<arguments>-c frps.ini</arguments>
<logmode>reset</logmode>
</service>
然后使用winsw install即可将frpc安装为系统服务。
客户端要把服务启动失败策略弄一下,省得服务端失效时,客户端不再尝试恢复
其它服务配置方法
域名访问
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080 #对外暴露的端口号
# frpc.ini
[common]
server_addr = 19.19.19.19
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com #域名要解析至19.19.19.19
过浏览器访问 http://www.yourdomain.com:8080
安全地暴露内网服务
对于某些服务来说如果直接暴露于公网上将会存在安全隐患。使用 stcp(secret tcp) 类型
即客户电脑、公网电脑、内网电脑都要开启frp。
内网
# frpc.ini
[common]
server_addr = 19.19.19.19
server_port = 7000
[secret_ssh]
type = stcp
sk = abcdefg # 只有 sk 一致的用户才能访问到此服务
local_ip = 127.0.0.1
local_port = 22
客户端电脑上
# frpc.ini
[common]
server_addr = 19.19.19.19
server_port = 7000
[secret_ssh_visitor]
type = stcp
role = visitor # stcp 的访问者
server_name = secret_ssh # 要访问的 stcp 代理的名字
sk = abcdefg
bind_addr = 127.0.0.1 # 绑定本地端口用于访问 ssh 服务
bind_port = 6000
点对点穿透
点对点内网穿透
frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景。
使用方式同 stcp 类似,需要在两边都部署上 frpc 用于建立直接的连接。
目前处于开发的初级阶段,并不能穿透所有类型的 NAT 设备,所以穿透成功率较低。穿透失败时可以尝试 stcp 的方式。
frps 除正常配置外需要额外配置一个 udp 端口用于支持该类型的客户端:
bind_udp_port = 7001
启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[p2p_ssh]
type = xtcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
在要访问这个服务的机器上启动另外一个 frpc,配置如下:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[p2p_ssh_visitor]
type = xtcp
# xtcp 的访问者
role = visitor
# 要访问的 xtcp 代理的名字
server_name = p2p_ssh
sk = abcdefg
# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 6000
通过 ssh 访问内网机器,假设用户名为 test:
ssh -oPort=6000 test@127.0.0.1