网络攻城狮
 
网页即时交流
QQ咨询
咨询热线
020-28998648
内网穿透神器:FRP与NPS工具完全配置指南
7
0

引言

在当今互联网时代,经常需要将内网服务暴露到公网,无论是远程访问家庭NAS、远程控制办公电脑,还是展示开发中的网站给客户。然而,由于IPv4地址资源紧张和安全考虑,大多数家庭和企业网络都位于NAT或防火墙后面,无法直接从外部访问。内网穿透技术应运而生,它能够帮助我们突破这些限制,安全地将内网服务暴露到公网。

FRP

概述

FRP(Fast Reverse Proxy)是一个高性能的反向代理应用,专门用于内网穿透。它支持TCP、UDP、HTTP、HTTPS等多种协议,可以将内网服务安全地暴露到公网。FRP采用C/S架构,由服务端(frps)和客户端(frpc)组成,服务端运行在具有公网IP的服务器上,客户端运行在内网环境中。

主要特点:

diff体验AI代码助手代码解读复制代码支持多种协议:TCP/UDP/HTTP/HTTPS/STCP/XTCP  支持加密传输,保障数据安全  支持TCP多路复用,降低连接建立的延迟  -持Web管理界面,方便监控和管理  配置简单,使用灵活

文档:https://gofrp.org/zh-cn/docs/

安装

首先,需要在服务端(公网服务器)和客户端(内网设备)上分别安装FRP。

执行如下命令下载、解压、安装:

bash体验AI代码助手代码解读复制代码wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz ; tar -zxvf frp_0.61.1_linux_amd64.tar.gz  mv frp_0.61.1_linux_amd64 frp

解压frp后,有如下几个文件:

bash体验AI代码助手代码解读复制代码root@vm:/opt/frp# ls LICENSE  frpc  frpc.toml  frps  frps.toml

文件说明:

makefile体验AI代码助手代码解读复制代码frpc: 客户端可执行程序,运行在内网环境中  frpc.toml:客户端配置文件,定义如何连接服务端和暴露内网服务  frps:服务端可执行程序,运行在公网服务器上  frps.toml:服务端配置文件,定义服务端如何接收客户端连接和转发流量

配置

服务端配置 (frps.toml)

服务端必须运行在具有公网IP的服务器上,否则无法实现内网穿透功能。

编辑frps.toml文件,配置服务端参数:

bash体验AI代码助手代码解读复制代码# 连接信息配置 bindAddr = "0.0.0.0"  # 服务端监听地址,用于接收frpc的连接,默认监听0.0.0.0,表示监听所有网络接口 bindPort = 50011       # 服务端监听端口,默认值为7000,客户端通过此端口连接 userConnTimeout = 60  # 用户连接超时时间(单位:秒),客户端在指定时间内未完成连接则会被断开  # 鉴权配置 auth.method = "token"  # 鉴权方法,此处使用token方式进行身份验证 auth.token = "123auth456"  # 鉴权token,客户端需要使用此token连接服务端  # 服务端Dashboard配置 webServer.addr = "0.0.0.0"  # 监听地址,默认为127.0.0.1,0.0.0.0表示监听所有网络接口 webServer.port = 50010       # 监听端口,用于访问Web管理界面 webServer.user = "admin"    # 仪表盘用户名 webServer.password = "admin123"  # 仪表盘密码  # frp日志配置 #log.to = "/var/log/frps.log" # 日志输出路径,若注释则不启用文件日志输出 log.level = "info"   # 日志级别 log.maxDays = 3       # 日志文件最多保留天数

配置说明:

体验AI代码助手代码解读复制代码连接信息配置 :定义服务端如何接收客户端连接  鉴权配置 :设置客户端连接服务端时的身份验证方式  Dashboard配置 :配置Web管理界面,方便监控和管理  日志配置 :设置日志输出级别和保留时间

客户端配置 (frpc.toml)

客户端运行在内网环境中,用于将内网服务暴露到公网。

编辑frpc.toml文件,配置客户端参数:

bash体验AI代码助手代码解读复制代码# 连接信息配置 serverAddr = "101.226.23.237"  # 连接服务端的IP地址,客户端连接的目标地址 serverPort = 50011             # 连接服务端的端口,默认为7000,客户端通过此端口连接服务端 loginFailExit = true          # 第一次登陆失败后是否退出,默认为true transport.dialServerTimeout = 60  # 连接服务端的超时时间(单位:秒)  # 鉴权配置 auth.method = "token"      # 鉴权方法,此处使用token方式进行身份验证 auth.token = "123auth456"  # 鉴权token,客户端需要使用此token连接服务端  # 日志配置 #log.to = "/var/log/frpc.log" # 日志输出路径,若注释则不启用文件日志输出 log.level = "info"            # 日志级别 log.maxDays = 3               # 日志文件最多保留天数  # 定义代理服务,用于将本地服务暴露到公网 [[proxies]] name = "ssh"                # 代理名称 type = "tcp"                # 代理类型,可选值为 tcp, udp, http, https, tcpmux, stcp, sudp, xtcp localIP = "127.0.0.1"       # 被代理的本地服务 IP,默认为 127.0.0.1 localPort = 22              # 被代理的本地服务端口 remotePort = 50012          # 服务端绑定的端口,用户访问服务端此端口的流量会被转发到对应的本地服务

配置说明:

lua体验AI代码助手代码解读复制代码连接信息配置 :指定如何连接到服务端  鉴权配置 :必须与服务端的token一致  代理服务配置 :定义要暴露的内网服务   name : 代理服务名称,用于标识   type : 代理类型,根据服务协议选择   localIP 和 localPort : 内网服务的地址和端口   remotePort : 公网访问端口,访问此端口将转发到内网服务  可以定义多个 [[proxies]] 节点,暴露多个内网服务

启动

启动服务端

frps.toml文件配置启动frps,启动成功就可以看到下类似信息

bash体验AI代码助手代码解读复制代码[root@vm frp]# ./frps -c frps.toml  2025-01-23 08:59:58.167 [I] [frps/root.go:105] frps uses config file: frps.toml 2025-01-23 08:59:58.399 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:50011 2025-01-23 08:59:58.399 [I] [frps/root.go:114] frps started successfully 2025-01-23 08:59:58.399 [I] [server/service.go:351] dashboard listen on 0.0.0.0:50010

启动客户端

frpc.toml文件配置启动frpc,启动成功就可以看到下类似信息

bash体验AI代码助手代码解读复制代码root@DESKTOP-Q925TDL:/opt/frp# ./frpc -c frpc.toml  2025-01-23 09:04:53.946 [I] [sub/root.go:142] start frpc service for config file [frpc.toml] 2025-01-23 09:04:53.946 [I] [client/service.go:295] try to connect to server... 2025-01-23 09:04:54.053 [I] [client/service.go:287] [6b133e71f98e5052] login to server success, get run id [6b133e71f98e5052] 2025-01-23 09:04:54.054 [I] [proxy/proxy_manager.go:173] [6b133e71f98e5052] proxy added: [ssh] 2025-01-23 09:04:54.090 [I] [client/control.go:168] [6b133e71f98e5052] [ssh] start proxy success

验证配置

1.访问服务端Dashboard

在浏览器中访问http://服务器IP:50010,使用配置的用户名和密码登录。

在这里插入图片描述 2.访问映射服务

上面在客户端配置了一个关于SSH的连接,只需要使用服务端IP:50012即可连接内网的SSH服务

bash体验AI代码助手代码解读复制代码ssh username@服务器IP -p 50012

说明 :访问公网服务器的50012端口,流量将被转发到内网设备的22端口。

使用域名

如果需要使用域名,那么这里肯定是使用子域名,就需要添加子域名的DNS解析记录

1.配置服务端frps.toml

bash体验AI代码助手代码解读复制代码vhostHTTPPort = 50013 # HTTP类型代理监听的端口,启用后才能支持HTTP类型的代理 subDomainHost = "xxx.com" # 二级域名后缀

2.配置客户端frpc.toml

bash体验AI代码助手代码解读复制代码[[proxies]] name = "web"                # 代理名称 type = "http"                # 代理类型,可选值为 tcp, udp, http, https, tcpmux, stcp, sudp, xtcp localIP = "127.0.0.1"       # 被代理的本地服务 IP,默认为 127.0.0.1 localPort = 8000              # 被代理的本地服务端口 subdomain = "frpc"          # 子域名,DNS解析处所配置的子域名 通过subdomain.subDomainHost访问

3.DNS配置

需要根据frpc.toml中配置的子域名,在DNS服务商处添加DNS记录,一个子域名需对应一个DNS记录

css体验AI代码助手代码解读复制代码记录类型:A  记录名称:frpc  记录值:填写服务器IP地址  其它:使用默认值

配置完成后,可以通过http://frpc.xxx.com:50013访问内网的Web服务。

系统服务配置

为了让FRP在系统启动时自动运行,可以将其配置为系统服务。

创建服务文件:

bash体验AI代码助手代码解读复制代码vim /etc/systemd/system/frps.service

添加以下内容:

bash体验AI代码助手代码解读复制代码[Unit] Description=FRP server Service After=network.target  [Service] Type=simple User=root WorkingDirectory=/opt/frp ExecStart=/opt/frp/frps -c /opt/frp/frps.toml Restart=on-failure RestartSec=5s StandardOutput=append:/opt/frp/frps.log StandardError=append:/opt/frp/error.log  [Install] WantedBy=multi-user.target

客户端系统服务

创建服务文件:

bash体验AI代码助手代码解读复制代码vim /etc/systemd/system/frpc.service

添加以下内容:

bash体验AI代码助手代码解读复制代码[Unit] Description=FRP Client Service After=network.target  [Service] Type=simple User=root WorkingDirectory=/opt/frp ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml Restart=on-failure RestartSec=5s StandardOutput=append:/opt/frp/frpc.log StandardError=append:/opt/frp/error.log  [Install] WantedBy=multi-user.target

启用系统服务

分别在服务端与客户端执行以下相关命令

重新加载 systemd 配置

bash体验AI代码助手代码解读复制代码systemctl daemon-reload

设置开机自启动

bash体验AI代码助手代码解读复制代码systemctl enable frpc systemctl enable frps

启动服务

bash体验AI代码助手代码解读复制代码systemctl start frpc systemctl start frps

查看服务状态

bash体验AI代码助手代码解读复制代码systemctl status frpc systemctl status frps

NPS

概述

NPS(Not only Proxy Server)是一款轻量级、高性能、功能强大的内网穿透代理服务器,支持TCP、UDP、HTTP、HTTPS等多种协议。与FRP相比,NPS提供了更加友好的Web管理界面,支持用户权限管理、流量控制等高级功能。

主要特点:

scss体验AI代码助手代码解读复制代码完善的Web管理界面,操作简单直观  支持多用户、多客户端管理  支持流量限制、连接数限制等  支持TCP、UDP、HTTP(S)、SOCKS5等多种协议  支持P2P穿透模式,降低服务器负载

GitHub:https://github.com/ehang-io/nps

部署服务端:NPS

下载与安装

下载服务端程序

bash体验AI代码助手代码解读复制代码wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz

使用命令解压缩

bash体验AI代码助手代码解读复制代码tar -zxvf linux_amd64_server.tar.gz

重命名目录

bash体验AI代码助手代码解读复制代码mv linux_amd64_server nps

安装

bash体验AI代码助手代码解读复制代码./nps install

安装完成后,NPS会自动创建配置文件和Web管理界面。

管理命令

bash体验AI代码助手代码解读复制代码nps install    # 安装NPS服务 nps start      # 启动NPS服务 nps stop       # 停止NPS服务 nps restart    # 重启NPS服务 nps uninstall  # 卸载NPS服务 nps-update update  # 更新NPS

配置NPS

编辑nps.conf配置文件

bash体验AI代码助手代码解读复制代码vim /etc/nps/conf/nps.conf

以下是原始配置文件内容

bash体验AI代码助手代码解读复制代码appname = nps #Boot mode(dev|pro) runmode = dev  #HTTP(S) proxy port, no startup if empty http_proxy_ip=0.0.0.0 http_proxy_port=80 https_proxy_port=443 https_just_proxy=true #default https certificate setting https_default_cert_file=conf/server.pem https_default_key_file=conf/server.key  ##bridge bridge_type=tcp bridge_port=8024 bridge_ip=0.0.0.0  # Public password, which clients can use to connect to the server # After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file. public_vkey=123  #Traffic data persistence interval(minute) #Ignorance means no persistence #flow_store_interval=1  # log level LevelEmergency->0  LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7 log_level=7 #log_path=nps.log  #Whether to restrict IP access, true or false or ignore #ip_limit=true  #p2p #p2p_ip=127.0.0.1 #p2p_port=6000  #web web_host=a.o.com web_username=admin web_password=123 web_port = 8080 web_ip=0.0.0.0 web_base_url= web_open_ssl=false web_cert_file=conf/server.pem web_key_file=conf/server.key # if web under proxy use sub path. like http://host/nps ;need this. #web_base_url=/nps  #Web API unauthenticated IP address(the len of auth_crypt_key must be 16) #Remove comments if needed #auth_key=test auth_crypt_key =1234567812345678  #allow_ports=9001-9009,10001,11000-12000  #Web management multi-user login allow_user_login=false allow_user_register=false allow_user_change_username=false   #extension allow_flow_limit=false allow_rate_limit=false allow_tunnel_num_limit=false allow_local_proxy=false allow_connection_num_limit=false allow_multi_ip=false system_info_display=false  #cache http_cache=false http_cache_length=100  #get origin ip http_add_origin_header=false  #pprof debug options #pprof_ip=0.0.0.0 #pprof_port=9999  #client disconnect timeout disconnect_timeout=60

配置参数说明

名称含义
web_portweb管理端口
web_passwordweb界面管理密码
web_usernameweb界面管理账号
web_base_urlweb管理主路径,用于将web管理置于代理子路径后面
bridge_port服务端客户端通信端口
https_proxy_port域名代理HTTPS代理监听端口
http_proxy_port域名代理HTTP代理监听端口
auth_keyweb API密钥
bridge_type客户端与服务端连接方式(kcptcp
public_vkey客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式
ip_limit是否限制IP访问(true/false 或忽略)
flow_store_interval服务端流量数据持久化间隔(单位:分钟),忽略表示不持久化
log_level日志输出级别
auth_crypt_key获取服务端authKey时的AES加密密钥(16位)
p2p_ip服务端IP,使用P2P模式必填
p2p_portP2P模式开启的UDP端口
pprof_ipDebug pprof 服务端IP
pprof_portDebug pprof 端口
disconnect_timeout客户端连接超时(单位:5秒,默认值60,即300秒=5分钟)

安装客户端:NPC

下载与安装

下载客户端程序

bash体验AI代码助手代码解读复制代码wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz

解压

bash体验AI代码助手代码解读复制代码tar -zxvf linux_amd64_client.tar.gz

创建客户端

markdown体验AI代码助手代码解读复制代码1. 登录NPS Web管理界面 2. 新增客户端 3. 填写客户端信息 4. 保存后,系统会生成客户端连接信息

在这里插入图片描述 获取连接的命令 在这里插入图片描述

启动客户端

进入npc目录,使用生成的连接命令启动客户端

临时运行

bash体验AI代码助手代码解读复制代码./npc -server=IP:Port -vkey=7717pvyqjy8tujfd -type=tcp

注册为系统服务软件运行

bash体验AI代码助手代码解读复制代码./npc  install  -server=IP:Port  -vkey=7717pvyqjy8tujfd -type=tcp

启动服务

bash体验AI代码助手代码解读复制代码npc start

Docker部署

bash体验AI代码助手代码解读复制代码docker run -d --name=npc --restart=always --net=host ffdfgdfg/npc -server=IP:Port -vkey=7717pvyqjy8tujfd  -type=tcp

Windows客户端

下载与安装

bash体验AI代码助手代码解读复制代码https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_client.tar.gz

命令行操作

bash体验AI代码助手代码解读复制代码npc.exe install 其他参数(复制的-server等后的内容)     #注册 npc.exe start    #启动 npc.exe stop     #停止 npc.exe uninstall   #如果需要更换命令内容需要先使用此命令卸载,再重新使用install注册

FRP与NPS对比

特性FRPNPS
配置方式配置文件Web界面 + 配置文件
易用性配置简单,但需要手动编辑配置文件Web界面操作,更加直观
功能丰富度基础功能完善功能更丰富,支持权限管理、流量控制等
性能高性能高性能
多用户支持有限支持完善支持
社区活跃度非常活跃活跃
适用场景个人使用、小型团队多用户管理、企业应用

安全性考虑

使用内网穿透工具时,需要注意以下安全问题:

体验AI代码助手代码解读复制代码1.修改默认密码 :务必修改所有默认密码和密钥  2.限制访问IP :对管理界面设置IP访问限制  3.使用加密传输 :启用数据加密功能  4.最小权限原则 :只暴露必要的内网服务  5.定期更新 :保持软件版本为最新,修复已知安全漏洞  6.监控流量 :定期检查流量使用情况,发现异常及时处理


0
打赏
收藏
点击回复
      全部留言
  • 0
更多回复
      你可能感兴趣的主题
网络攻城狮
      圈内贴子65
  • 商圈成员4

扫一扫访问手机版
 
网页即时交流
QQ咨询
咨询热线
020-28998648