一文搞懂搭建Frp内网穿透服务

1. 搭建Frp的背景

从公网中访问自己的私有设备向来是一件难事儿。
自己的主力台式机、NAS等等设备,它们可能处于路由器后,或者运营商因为IP地址短缺不给你分配公网IP地址。如果我们想直接访问到这些设备(远程桌面,远程文件,SSH等等),一般来说要通过一些转发或者P2P组网软件的帮助。
我有一台计算机位于一个很复杂的局域网中,我想要实现远程桌面和文件访问,目前来看其所处的网络环境很难通过简单的端口映射将其暴露在公网之中,我试过这么几种方法:

  • 远程桌面使用TeamViewer。可用,但需要访问端也拥有TeamViewer软件,不是很方便,希望能使用Windows自带的远程桌面。且TeamViewer不易实现远程文件访问。(TeamViewer前几年还好现在感觉挺流氓的,经常掉线)
  • 使用蒲公英VPN软件进行组网,可用,但免费版本网络速度极慢,体验不佳,几乎无法正常使用。
  • 使用花生壳软件进行DDNS解析,可用,但同第二点所述,免费版本有带宽限制,无法实际使用。
  • 使用向日葵远控软件。(免费版还是勉强可以用的)
  • 内网穿透,可用且推荐,可以达到不错的速度,且理论上可以开放任何想要的端口,可以实现的功能远不止远程桌面或者文件共享。

2. 内网穿透常见的方法

2.1 nps-npc

nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。

一台有公网IP的服务器(VPS)运行服务端(NPS)

一个或多个运行在内网的服务器或者PC运行客户端(NPC)
一文搞懂搭建Frp内网穿透服务_第1张图片

官网:https://github.com/ehang-io/nps/releases

2.2 ew

EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。但是,现在工具已经不更新了。。。

  • 轻量级,C语言编写
  • 可以设置多级代理
  • 跨平台
  • 但是只支持Socks5代理

官网:http://rootkiter.com/EarthWorm/

2.3 ngrok

ngrok 是一个反向代理,通过在公共端点和本地运行的 Web 服务器之间建立一个安全的通道,实现内网主机的服务可以暴露给外网。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放,所以ngrok可以很方便地协助服务端程序测试。

  • 官方维护,一般较为稳定
  • 跨平台,闭源
  • 有流量记录和重发功能

官网:https://ngrok.com/

2.4 frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 跨平台,但是支持的比nps少一点
  • 多种插件,提供很多功能,并且完全开源

一文搞懂搭建Frp内网穿透服务_第2张图片

这也是本文介绍的重点!

3. 使用Frp搭建内网穿透服务

3.1. frp下载

https://github.com/fatedier/frp/releases

服务端解压:

一文搞懂搭建Frp内网穿透服务_第3张图片

这里用到了宝塔管理面板,更傻瓜的操作linux。这步也可用命令操作。

2.服务端相关

2.1 frps.ini配置

[common]
bind_port = 7000  # (frp服务端的端口,记得要开放此端口)
token = xxxxxxx  # (你自己设置的token密钥)

dashboard_user = admin #  (可选。frp管理控制台的账号)
dashboard_pwd = xxxxxx  #  (可选。frp管理控制台账号的密码)
dashboard_port = 7500  # (可选。frp管理控制台的端口)

2.2 服务端启动

直接启动
(在解压文件目录下)

# 启动(终端关闭就会结束)
./frps -c ./frps.ini

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

使用systemctl来控制frp的启动

  1. 打开配置服务
vi /lib/systemd/system/frps.service
  1. 配置文件内容
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/frp/frps/frps -c /root/frp/frps/frps.ini 

[Install]
WantedBy=multi-user.target
  1. 使用命令启动
systemctl enable frps #设置开机自动启动
systemctl disable frps #取消开机自动启动
systemctl start frps #开启frps服务
systemctl stop frps #关闭frps服务
systemctl restart frps #重启frps服务

3. 客户端相关

3.1 frpc.ini配置

用做临时给前端测试(8088是本地springboot跑起来的端口)

[common]
server_addr = xxx.xxx.xx.xx  # (你的服务器外网ip)
server_port = 7000  # (frp服务端的端口,记得要开放此端口)
token = 949526365a #  (你自己设置的token密钥,与服务端设置的一样)

[pro16]
type = tcp
local_ip = 127.0.0.1
local_port = 8088
remote_port = 6001

# 接口访问  xxx.xxx.xx.xx:6001/...

用作远程连接配置(3389是windows远程连接的端口)

[common]
server_addr = 8.129.130.21
server_port = 7000
token = 949526365a

[jia]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000

3.2 客户端启动

  • 当前目录CMD运行(关闭当前CMD窗口会断开)
frpc.exe -c .\frpc.ini
  • 隐藏CMD窗口运行脚本start.bat
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit

:begin
REM
frpc.exe -c .\frpc.ini
  • windows开机启动frpc

把上述start.bat文件复制到

C:\Users\Administrator(用户名)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

一文搞懂搭建Frp内网穿透服务_第4张图片

4. 还可能涉及辅助命令

所有线程:ps aux

查看frp应用:ps -aux | grep frps

杀死端口:kill -9 端口号

某端口信息:lsof -i:8080

你可能感兴趣的:(frp,内网穿透,远程连接,linux)