使用 frp 安全的暴露内网服务
时间:2022-07-22
本文章向大家介绍使用 frp 安全的暴露内网服务,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
使用 frp 安全的暴露内网服务
frp frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,并且为 http 和 https 应用协议提供了额外的能力。
最近需要将内网的一些服务转发出来, 在自己的电脑上随时可用, 于是就研究了 frp 的文档, 操作记录如下。
frp 服务器配置
要使用 frp 进行内网穿透, 必须有一台有互联网 IP 的服务器, 否则没办法架设 frp 服务器。 服务器上根据操作系统安装 frp 的服务端, frps , 配置如下:
[common]
bind_addr = 0.0.0.0
bind_port = 7000
bind_udp_port = 7001
log_file = /usr/frp/frps.log
# trace, debug, info, warn, error
log_level = info
log_max_days = 3
# set dashboard_addr and dashboard_port to view dashboard of frps
# dashboard_addr's default value is same with bind_addr
# dashboard is available only if dashboard_port is set
dashboard_addr = 0.0.0.0
dashboard_port = 7500
# dashboard user and pwd for basic auth protect, if not set, both default value is admin
dashboard_user = admin
dashboard_pwd = dashbord_password
# auth
authentication_method = token
token = frp_server_token
配置完成之后, 在服务端用下面的命令可以启动 frp 服务端:
/usr/frp/frps -c /usr/frp/frps.ini
内网服务配置
内网服务器上根据操作系统, 下载对应的 frp 客户端 frps , 以 ssh 服务为例, 配置文件如下:
[common]
server_addr = server_ip_or_name
server_port = 7000
# for authentication
token = frp_server_token
# decide if exit program when first login failed, otherwise continuous relogin to frps
# default is true
login_fail_exit = false
[internal_ssh]
type = stcp
sk = internal_ssh_sk
use_encryption = true
use_compression = true
local_ip = 127.0.0.1
local_port = 22
注意, 这里使用的是 stcp 模式, 没有使用 tcp 模式, 更加安全。 因为 tcp 模式会将内网服务端口直接暴露在互联网, 风险比较大。
配置文件编写好之后, 在内网服务器上运行下面的命令, 启动 frp 客户端:
/usr/frp/frpc -c /usr/frp/frpc.ini
客户端配置
通过 stcp 模式进行穿透的服务, 需要在客户端计算机上也运行一个 frp 的客户端 frpc, 配置如下所示:
[common]
server_addr = server_ip_or_name
server_port = 7000
# for authentication
token = frp_server_token
[internal_ssh_visitor]
type = stcp
role = visitor
sk = internal_ssh_sk
server_name = internal_ssh
use_encryption = true
use_compression = true
bind_ip = 127.0.0.1
bind_port = 1022
注意: visitor 中配置的
sk
和server_name
必须与内网服务器上的 frpc 的配置一致, 而且bind_ip
只能是127.0.0.1
。
配置文件保存之后, 在客户端计算机上也运行下面的命令, 启动 frp 客户端:
/usr/frp/frpc -c /usr/frp/frpc.ini
现在, 在命令行窗口输入下面的命令, 就可以连接到内网服务器的 ssh 服务了:
ssh -p 1022 user@127.0.0.1
- ES6 主要的新特性
- thinkphp生成的验证码不显示问题解决
- 深入剖析Spring(二)——IoC容器的实现
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- 深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)
- Restful安全认证及权限的解决方案
- Java并发容器大合集
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- web.xml中load-on-startup的作用
- Java并发编程的艺术(七)——Executors
- Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
- PowerDesigner使用教程|使用方法
- Java并发编程的艺术(一)——并发编程需要注意的问题
- 梯度下降法快速教程 | 第三章:学习率衰减因子(decay)的原理与Python实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现EditText图文混合插入上传功能
- Android实现红包雨动画效果
- 手把手教你启用Win10的Linux子系统(图文超详细)
- Android onCreateOptionsMenu的使用方法总结
- android截图事件监听的原理与实现
- 我常用的一些linux命令小结
- linux下安装mongodb教程
- Android中使用TagFlowLayout制作动态添加删除标签
- Android时间对话框使用方法详解
- Ubuntu基础设定:openssh-server的安装和使用介绍
- Android ProgressDialog的实例详解
- linux下获取文件的创建时间与实战教程
- Android 判断网络状态及开启网路
- Android判断后台服务是否开启的两种方法实例详解
- 在CentOS7上搭建Jenkins+Maven+Git持续集成环境的方法