快捷搜索:  汽车  科技

什么是内网穿透通俗解释(frp内网穿透)

什么是内网穿透通俗解释(frp内网穿透)2. 客户端请求frps,也就是用户请求去访问frps。1. 首先启动frpc,frpc启动后会向frps注册。必须的工具:1台有公网IP的机器,如某台阿里云服务器,最好有配泛域名。 原理: Frp流程图

简介

frp是一个专注于内网穿透的高性能的反向代理应用。

支持 TCP、UDP、Websocket、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

如某些服务需要将内网的http服务暴露在外网;如测试时需要将本机的服务开放给外部应用的回调;ssh远程、或图形化界面远程某个局域网的计算机。

必须的工具:1台有公网IP的机器,如某台阿里云服务器,最好有配泛域名。

原理:


什么是内网穿透通俗解释(frp内网穿透)(1)

Frp流程图

1. 首先启动frpc,frpc启动后会向frps注册。

2. 客户端请求frps,也就是用户请求去访问frps。

3. frps告知frpc有新请求,需要建立连接。也就是 公网服务器 告知 内网服务器,需要建立连接。

4. frps收到frpc的请求,建立新的连接,也就是 公网服务器 接收到了 内网服务器 的请求,建立了新的连接。

5. frps把frpc和用户请求的流量互相转发,将frps服务器当成流量中转站,也就是 公网服务器 将 用户请求 的流量转发给 内网服务器,把 内网服务器 的流量转发给 用户。

优缺点


优点:

  • 开源、免费。
  • 不限制速度、不限制流量、穿透的域名可自定义。主要取决于服务器端的带宽。
  • 端口复用,多个服务通过同一个服务端端口暴露。多个客户端搭建流程复杂度较低。

缺点:

  • 连接量过大后,可能会掉线。(社区反馈,暂无优化方案)
  • 连接速度取决于公网服务器带宽,如果服务器带宽小,那么速度也不太乐观。

安装


项目地址 https://github.com/fatedier/frp

下载地址 https://github.com/fatedier/frp/releases

官方文档 https://gofrp.org/docs/

下载

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

解压后

什么是内网穿透通俗解释(frp内网穿透)(2)

解压文件

文件说明: 只需要关注以下几个配置文件

frps.ini: 服务端配置文件 frps: 服务端软件 frpc.ini: 客户端配置文件 frpc: 客户端软件

配置和使用


服务端

  • frps.ini

#实际使用中,记得把注释去掉 [common] #必须配置 bind_port = 7000 #frp服务端与客户端通讯的接口,默认7000 vhost_http_port = 4080 #服务端对外暴露的http端口,通过这个端口将内网服务暴露给外网。如:123.45.145.100:4080 vhost_https_port = 443 #服务端对外暴露的https端口,通过这个端口将内网服务暴露给外网 可以改 token = tokenword #可选配置,建议配置,用于身份校验 # 以下皆为可选配置 # 配置控制台 dashboard_port = 7500 dashboard_user = admin # dashboard 用户名密码,默认都为 admin dashboard_pwd = admin # 允许frpc配置绑定的端口 allow_ports = 2000-3000 3001 3003 4000-50000 max_clients= 10 ...

  • 启动命令

# 后台启动 nohup ./frps -c ./frps.ini &

启动成功后日志如下:

什么是内网穿透通俗解释(frp内网穿透)(3)

服务端启动成功日志

客户端

  • frpc.ini

1、http穿透服务

#在需要被暴露服务的机器配置如下内容 [common] #必须配置 server_addr = xx.xx.xx.xx # 上面的公网服务器ip server_port = 7000 # frp server 绑定的端口,和上面服务端端口相同 [web] #不能重名,保证唯一 type = http #http服务 custom_domains = abc.test.com.cn #自定义配置的域名,泛域名 local_ip = 172.16.10.18 #内网IP/本机IP local_port = 12911 # 本地对外暴露服务的端口 [web1] #多个http服务 type = http local_port = 8080 local_ip = 172.16.10.18 #内网IP/本机IP custom_domains = bbc.test.com.cn

ps.如果域名已在相关的网站配置泛域名解析,配置为 * ,表示二级域名

test1.test.com.cn ,test2.test.com.cn 等都能解析到对应的公网服务器ip,那么就可以一个服务端配置多个客户端,否则就只能一个服务端对应一个客户端。

2、SSH 访问内网机器

#在需要被暴露服务的机器配置如下内容 [common] server_addr = xx.xx.xx.xx # 上面的公网服务器ip server_port = 7000 # frp server 绑定的端口,和上面服务端端口相同 [ssh] #ssh连接 SSH连接可以直接在本地配置 type = tcp # tcp服务 local_ip = 127.0.0.1 #本地 IP local_port = 22 #用于 ssh 的端口号,默认 22 remote_port = 6003 # 映射的服务端端口,访问该端口时默认转发到客户端的 22 端口,不同的客户端设置不同的端口号

  • 启动命令

# 后台启动 nohup ./frpc -c ./frpc.ini & >> logs.out

启动成功日志如下:

什么是内网穿透通俗解释(frp内网穿透)(4)

客户端启动成功日志

  • 访问方式

1、http服务

这时候通过custom_domains:vhost_http_port就能访问内网的服务了 如 abc.test.com.cn:4080 就能访问到处于内网的服务

2、SSH服务

ssh 用户名@服务端ip -p 端口号 # ssh -p 6003 username@x.x.x.x (将 x.x.x.x 替换成公网服务器 IP 地 址)

远程centos桌面


整体体验:只试用了一台机器,还是比较流畅的,但是毕竟是开源的。所以安全性相关的内容需要自己去做。

基础环境安装

1.安装 epel库

yum install -y epel-release

2.安装xRDP 并启动xrdp

yum install -y xrdp systemctl start xrdp.service systemctl enable xrdp.service

3.安装tigervnc-server

yum install -y tigervnc-server

4.为用户root设置vnc密码 也可以其他用户设置,此用户进行图像化连接时需要额外输入密码

vncpasswd root

5.配置或关闭SELinux(查了下这是linux的文件安全策略,不建议关掉。暂时没遇到啥问题)

查看SELinux状态命令:/usr/sbin/sestatus -v 临时关闭SELinux(设置SELinux 成为permissive模式)命令:setenforce 0

6.开启远程的防火墙端口

firewall-cmd --permanent --zone=public --add-port=3389/tcp firewall-cmd --reload

Frp客户端

  • frpc.ini

#在需要被暴露服务的机器配置如下内容 [common] server_addr = xx.xx.xx.xx # 上面的公网服务器ip server_port = 7000 # frp server 绑定的端口,和上面服务端端口相同 [vnc] #保证命名唯一 type = tcp # tcp服务,由于windows图形化的RDP底层协议依然是TCP,所以这里直接就用tcp就好了 local_ip = 127.0.0.1 #本地 IP local_port = 3389 #用于 图像化远程 的端口号 remote_port = 6003 # 映射的服务端端口,访问该端口时默认转发到客户端的 3389 端口,不同的客户端设置不同的端口号

  • 启动命令

# 后台启动 nohup ./frpc -c ./frpc.ini & >> logs.out

访问方式

win R 运行 mstsc

输入公网服务器代理的IP 端口。就能正常访问图形化的linux界面了。

什么是内网穿透通俗解释(frp内网穿透)(5)

远程桌面

安全地暴露内网服务


对于某些服务来说如果直接暴露于公网上将会存在安全隐患。

使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc 客户端。

1. 在需要暴露到内网的机器上部署 frpc,且配置如下:

[common] server_addr = xx.xx.xx.xx server_port = 7000 [ssh-stcp-172.16.22.15] type = stcp # 只有 sk 一致的用户才能访问到此服务 sk = skpassword local_ip = 127.0.0.1 local_port = 3389

2. 在想要访问内网服务的机器上也部署 frpc,且配置如下:

[common] server_addr = xx.xx.xx.xx server_port = 7000 [ssh-stcp-get-172.16.22.15] type = stcp # stcp 的访问者 role = visitor # 要访问的 stcp 代理的名字 server_name = ssh-stcp-172.16.22.15 sk = skpassword # 绑定本地端口用于访问 SSH 服务 bind_addr = 127.0.0.1 bind_port = 6003

猜您喜欢: