frp使用
frp介绍
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
端口映射
工具:frp
原理功能:
可以把ip1的port1转发到ip2的port2上,例子就是把本地的ssh22端口转发到公网vps的某某端口上实现远程访问内网机器
具体实现:
frps.ini
[common]
# 服务器开放给客户端的frp端口
bind_port = 20080
# http端口
vhost_http_port = 20081
# https端口
vhost_https_port = 20082
dashboard_addr = 0.0.0.0
# 控制面板端口,用户名,密码
dashboard_port = 20083
dashboard_user = admin
dashboard_pwd = your_passwd
# 自己用于frp服务的域名
subdomain_host = www.viewofthai.link
# frps服务token,拥有此token的客户端才允许连接
token = yourtoken
可以看到frps只规定了管理口和连接口(业务口),以及token
frpc.ini
[common]
# frps服务器地址,可用域名,即服务端的frp.yourdomain.com
server_addr = 8.129.42.140
# 上面frps.ini配置的端口
server_port = 20080
# frps服务token
token = yourtoken
[tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 20084
[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 20085
可以看到frpc规定了要转发的ip1和port1,注意token要一致
正向代理
工具:frp+proxifier
原理:
就是把内网流量转发到一个vps上再让其请求互联网,这样对外只显示这个vps的ip,造成服务端不知道客户端真实ip的情况,举例就是用vpn访问谷歌:
(起因是有个公网机器它的白名单只包含了我的vps,所以我必须通过vps当作跳板机访问)
具体实现:
frps.ini (和之前的一样)
[common]
# 服务器开放给客户端的frp端口
bind_port = 20080
# http端口
vhost_http_port = 20081
# https端口
vhost_https_port = 20082
dashboard_addr = 0.0.0.0
# 控制面板端口,用户名,密码
dashboard_port = 20083
dashboard_user = admin
dashboard_pwd = your_passwd
# 自己用于frp服务的域名
subdomain_host = www.viewofthai.link
# frps服务token,拥有此token的客户端才允许连接
token = yourtoken
可以看到frps只规定了管理口和连接口(业务口),以及token
frpc.ini
[common]
server_addr = 8.129.42.140
server_port = 20080
token = yourtoken
[proxy]
type = tcp
remote_port = 20086
plugin = http_proxy
use_encryption = true
use_compression = true
[socks5_proxy]
remote_port = 20087
plugin = socks5
use_encryption = true
use_compression = true
然后proxifier要配置一下
这个是转发http的
这个是转发socks5的
尝试转发一下,抓包可以看到请求的确是从这个机器出来的
反向代理
工具:frp+proxifier
frp+proxychain
原理功能:
当你需要访问一片内网时,你需要把DMZ的某个机器当作跳板机,让跳板机转发你的流量。还有就是nginx反代负载均衡的问题,也是nginx转发了你请求的流量(可以把它看作跳板机),由于只知道会发生转发但不知道转发到哪,导致客户端不知道哪个服务器是在处理你的业务,此时这些服务器对外就表现为一个服务器
frps.ini
[common]
bind_addr = 192.168.107.6
bind_port = 8000
dashboard_addr = 0.0.0.0
dashboard_port = 7600
dashboard_user = root
dashboard_pwd = yourpasswd
token = yourtoken
heartbeat_timeout = 90
max_pool_count = 5
可以看到frps只规定了管理口和连接口(业务口),以及token
frpc.ini
[common]
tls_enable = true
server_addr = 192.168.107.6
server_port = 8000
token = yourtoken
pool_count = 5
protocol = tcp
health_check_type = tcp
health_check_interval_s = 100
[proxies]
remote_port = 6000
plugin = socks5
use_encryption = true
use_compression = true
proxifier
proxychains
当你需要sockets5代理转发流量时,比如说nmap扫描等等
vim /etc/proxychains4.conf
代理总结
共同点:
socks5都是填frps那里的server_addr和frpc的remote_port (本质都在frps所在的服务器上)
不同点:
正代是 a-b间通信,a填的是b的ip:port
反代是 a-b间通信,c填的是b的ip:port
其实不用刻意区分异同点,要用的时候复制黏贴就行