一、FRP内网穿透工具
1、FRP简介:
frp 是一个开源项目, 采用 C/S 模式,将服务端部署在具有公网 IP 的机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,
反向代理到处于内网的服务。 在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。
协议类型 | 描述 |
tcp | 单纯的TCP端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
udp | 单纯的UDP端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
http | 访问HTTP应用。 |
https | 访问HTTPS应用。 |
stcp | 安全的TCP内网代理,需要在被访问者和访问者的机器上都部署frpc,不需要在服务端暴露端口。 |
sudp | 安全的UDP内网代理,需要在被访问者和访问者的机器上都部署frpc,不需要在服务端暴露端口。 |
xtcp | 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。 |
tcpmux | 支持服务端TCP端口的多路复用,通过同一个端口访问不同的内网服务。 |
2、FRP配置:
注:从本地外网机器获取到的公网ip无法使用,需购买云服务器,如购买阿里云、腾讯云服务器,将服务端部署到云服务器上,客户端部署到可以访问内外网的跳板机上;
2.1 服务器端配置frps.ini:(需要安装在外网机器上)
1、下载安装包
https://github.com/fatedier/frp/releases/tag/v0.37.1
2、解压安装包、并拷贝frps.exe 、frps.ini拷贝指定目录,windows下如C盘: C:\frp\ (方法windows、Linux版本都适用)
3、配置服务端frps.ini :(windows、Linux版本都适用)
[common]
bind_port = 7000 #frps服务端的端口
token = cjjs@88888888 #客户端连接服务端的密码
max_pool_count=20 #最大连接数
dashboard_port = 7500 #控制面板的服务端口,用于web页面查看所有客户端连接信息与状态
dashboard_user = admin #控制面板登录账户
dashboard_pwd = admin #控制面板登录密码
vhost_http_port = 80 #设置http端口
vhost_https_port = 443 #设置https端口
[可选]
log_level = debug #设置日志显示级别{debug, info, warn, error)
log_max_days = 5 #设置日志最大天数
privilege_mode = true #设置特权模式是否开启,开通后web,ssh等使用都可以直接在客户端设置
privilege_token = admin #设置特权模式token值
subdomain_host = abc.cn #设置动态二级域名
注:frps.ini文件可以使用默认配置直接启动就行,当然最好加个token,加强安全验证。
4、启动服务端:
(1)将文件frps.exe 、frps.ini拷贝至任意目录(C:\frps);
(2)启动frps服务: frps.exe -c frps.ini
2.2 客户端配置frpc.ini:(需要安装在可以同时访问内网外网的跳板机上)
1、将解压安装包中的frpc.exe 、frpc.ini拷贝指定目录;(windows、Linux版本都适用)
2、配置客户端frpc.ini :(windows、Linux版本都适用)
[common]
server_addr = 81.70.5.18 #frps服务端的公网IP(腾讯云服务器公网ip)
server_port = 7000 #frps服务端的端口
token = yydds@88888888 #连接frp服务端的密码
[ssh] #配置ssh服务
type=tcp
local_ip=10.199.108.11 #内网服务器ip
local_port=22 #内网服务器端口
remote_port=30000 #表示在 frps服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口,即22号端口
use_encryption=true #可选,表示是否加密
use_compression=false #可选,表示是否压缩
[RDP] #配置远程桌面
type=tcp
local_ip=10.41.71.128 #内网服务器ip
local_port=3389 #内网服务器端口
remote_port=30001 #表示在 frps服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口,即3389号端口
[http_proxyx]
type = tcp #通信数据类型
remote_port = 1080 #在frp服务端开设代理服务的端口
plugin = socks5 #通过插件开设socks5代理服务
#plugin_user = abc123 #通过插件设置连接代理的用户名
#plugin_passwd = abc123 #通过插件设置连接代理的密码
#user_compression=true
3、启动客户端:
frpc.exe -c frpc.ini
2.3 web配置
1、公网服务器,配置服务端frps.ini
[common]
bind_port = 7000 #frps服务端的端口
token = yydds@88888888 #客户端连接服务端的密码
vhost_http_port = 80 #http端口
vhost_https_port = 443 #https端口
2、内网跳板机,配置客户端frpc.ini
[common]
server_addr = 81.70.5.18 #frps服务端的公网IP(腾讯云服务器公网ip)
server_port = 7000 #frps服务端的端口
token = yydds@88888888 #连接frp服务端的密码
[web_http]
type = http
local_ip = 10.199.108.10 #内网服务器ip
local_port = 80 #内网网站使用的端口
remote_port = 30002 #表示在 frps服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口,即80号端口
[web_https]
type = http
local_ip = 10.199.108.10 #内网服务器ip
local_port = 443 #内网网站使用的端口
remote_port = 30003 #表示在 frps服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口,即443号端口
4、重新启动frp服务:
1)重启frps: ./frps.exe -c frps.ini
2)重启frpc: ./frpc.exe -c frpc.ini
2.4 STCP配置
背景: frp的tcp模式相当于设备直接向公网暴露了一个tcp端口;任何设备都可以尝试连接这个端口,会有很大的安全风险;而stcp协议就是为解决这个安全问题;
限制特定设备能够使用这个端口。
1、公网服务器,配置服务端frps.ini
[common]
bind_port = 7000 #frps服务端的端口
token = yydds@88888888 #客户端连接服务端的密码
2、内网跳板机,配置客户端frpc.ini
[common]
server_addr = 81.70.5.18 #frps服务端的公网IP(腾讯云服务器公网ip)
server_port = 7000 #frps服务端的端口
token = cjjs@88888888
[rdp]
type = stcp
sk = abcdefg #只有sk一致的用户才能访问到此服务
local_ip = 127.0.0.1
local_port = 3389 #远程桌面的本地端口地址
3、本地电脑,配置客户端frpc.ini
[common]
server_addr = 81.70.5.18 #frps服务端的公网IP(腾讯云服务器公网ip)
server_port = 7000 #frps服务端的端口
token = cjjs@88888888
[rdp_visitor]
type = stcp
role = visitor #stcp的访问者
server_name = rdp #要访问stcp的代理名字
sk = abcdefg #只有sk一致的用户才能访问到此服务
bind_addr = 127.0.0.1 #绑定本地ip、端口,用于访问远程桌面服务
bind_port = 6000
4、在本地电脑打开远程桌面服务,输入127.0.0.1:6000,即可访问内网跳板机上的远程服务。
2.5 XTCP配置
XTCP 的配置方式和STCP很类似;但是会采用P2P的方式进行打洞穿透,如果成功,后续的流量将不会经过frps,而是直接通信,不再受到frps所在服务器的带宽限制。
1、公网服务器,配置服务端frps.ini
[common]
bind_port = 7000 #frps服务端的端口
token = cjjs@88888888 #客户端连接服务端的密码
2、内网跳板机,配置客户端frpc.ini
[common]
server_addr = 81.70.5.18 #frps服务端的公网IP(腾讯云服务器公网ip)
server_port = 7000 #frps服务端的端口
token = cjjs@88888888
[rdp]
type = xtcp
sk = abcdefg #只有sk一致的用户才能访问到此服务
local_ip = 127.0.0.1
local_port = 3389 #远程桌面的本地端口地址
3、本地电脑,配置客户端frpc.ini
[common]
server_addr = 81.70.5.18 #frps服务端的公网IP(腾讯云服务器公网ip)
server_port = 7000 #frps服务端的端口
token = cjjs@88888888
[rdp_visitor]
type = xtcp
role = visitor #stcp的访问者
server_name = rdp #要访问stcp的代理名字
sk = abcdefg #只有sk一致的用户才能访问到此服务
bind_addr = 127.0.0.1 #绑定本地ip、端口,用于访问远程桌面服务
bind_port = 6000
4、在本地电脑打开远程桌面服务,输入127.0.0.1:6000,即可访问内网跳板机上的远程服务。
3、各服务访问方式
(1)SSH访问方式:
ssh root@81.70.5.18 -p 30000 (mobaxterm 登录方式,30000为客户端映射的端口,81.70.5.18 为腾讯云服务器ip。)
(2)RDP(远程桌面)访问方式:
win系统下打开远程桌面:输入81.70.5.18 :30001 #30001为客户端映射的端口,181.70.5.16 为腾讯云服务器ip。
(3)Web访问方式:
打开浏览器,输入 81.70.5.18 :30003 #30003为vhost_https_port映射的端口,即客户端配置的远程端口;
4、frp加入开机启动服务
1、frps加入开机启动服务
tar -zxvf frp.tar.gz -C ./
mkdir /etc/frp
cp frp_0.37.1_linux_386/frps /usr/bin/frps
cp frp_0.37.1_linux_386/frps.ini /etc/frp/frps.ini
cp frp_0.37.1_linux_386/systemd/frps.service /usr/lib/systemd/system/frps.service
systemctl status frps.service
systemctl start frps.service
2、frpc加入开机启动服务
tar -zxvf frp.tar.gz -C ./
mkdir /etc/frp
cp frp_0.37.1_linux_386/frpc /usr/bin/frpc
cp frp_0.37.1_linux_386/frpc.ini /etc/frp/frpc.ini
cp frp_0.37.1_linux_386/systemd/frpc.service /usr/lib/systemd/system/frpc.service
systemctl status frpc.service
systemctl start frpc.service