内网穿透神器:FRP与NPS工具完全配置指南_frps

内网穿透神器:FRP与NPS工具完全配置指南

引言

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

FRP

概述

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

主要特点:

支持多种协议:TCP/UDP/HTTP/HTTPS/STCP/XTCP

支持加密传输,保障数据安全

支持TCP多路复用,降低连接建立的延迟

支持Web管理界面,方便监控和管理

配置简单,使用灵活

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

安装

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

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

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后,有如下几个文件:

root@vm:/opt/frp# ls
LICENSE  frpc  frpc.toml  frps  frps.toml

文件说明:

frpc: 客户端可执行程序,运行在内网环境中

frpc.toml:客户端配置文件,定义如何连接服务端和暴露内网服务

frps:服务端可执行程序,运行在公网服务器上

frps.toml:服务端配置文件,定义服务端如何接收客户端连接和转发流量

配置

服务端配置 (frps.toml)

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

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

# 连接信息配置
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       # 日志文件最多保留天数

配置说明:

连接信息配置 :定义服务端如何接收客户端连接

鉴权配置 :设置客户端连接服务端时的身份验证方式

Dashboard配置 :配置Web管理界面,方便监控和管理

日志配置 :设置日志输出级别和保留时间

客户端配置 (frpc.toml)

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

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

# 连接信息配置
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          # 服务端绑定的端口,用户访问服务端此端口的流量会被转发到对应的本地服务

配置说明:

连接信息配置 :指定如何连接到服务端

鉴权配置 :必须与服务端的token一致

代理服务配置 :定义要暴露的内网服务
  name : 代理服务名称,用于标识
  type : 代理类型,根据服务协议选择
  localIP 和 localPort : 内网服务的地址和端口
  remotePort : 公网访问端口,访问此端口将转发到内网服务

可以定义多个 [[proxies]] 节点,暴露多个内网服务

启动

启动服务端

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

[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,启动成功就可以看到下类似信息

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服务

ssh username@服务器IP -p 50012

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

使用域名

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

1.配置服务端frps.toml

vhostHTTPPort = 50013 # HTTP类型代理监听的端口,启用后才能支持HTTP类型的代理
subDomainHost = "xxx.com" # 二级域名后缀

2.配置客户端frpc.toml

[[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记录

记录类型:A

记录名称:frpc

记录值:填写服务器IP地址

其它:使用默认值

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

系统服务配置

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

创建服务文件:

vim /etc/systemd/system/frps.service

添加以下内容:

[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

客户端系统服务

创建服务文件:

vim /etc/systemd/system/frpc.service

添加以下内容:

[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 配置

systemctl daemon-reload

设置开机自启动

systemctl enable frpc
systemctl enable frps

启动服务

systemctl start frpc
systemctl start frps

查看服务状态

systemctl status frpc
systemctl status frps

NPS

概述

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

主要特点:

完善的Web管理界面,操作简单直观

支持多用户、多客户端管理

支持流量限制、连接数限制等

支持TCP、UDP、HTTP(S)、SOCKS5等多种协议

支持P2P穿透模式,降低服务器负载

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

部署服务端:NPS

下载与安装

下载服务端程序

wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz

使用命令解压缩

tar -zxvf linux_amd64_server.tar.gz

重命名目录

mv linux_amd64_server nps

安装

./nps install     

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

管理命令
nps install    # 安装NPS服务
nps start      # 启动NPS服务
nps stop       # 停止NPS服务
nps restart    # 重启NPS服务
nps uninstall  # 卸载NPS服务
nps-update update  # 更新NPS

配置NPS

编辑nps.conf配置文件

vim /etc/nps/conf/nps.conf

以下是原始配置文件内容

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

下载与安装

下载客户端程序

wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz

解压

tar -zxvf linux_amd64_client.tar.gz

创建客户端
1. 登录NPS Web管理界面
2. 新增客户端
3. 填写客户端信息
4. 保存后,系统会生成客户端连接信息

图片

获取连接的命令

图片

启动客户端

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

临时运行

./npc -server=IP:Port -vkey=7717pvyqjy8tujfd -type=tcp

注册为系统服务软件运行

./npc  install  -server=IP:Port  -vkey=7717pvyqjy8tujfd -type=tcp

启动服务
npc start

Docker部署
docker run -d --name=npc --restart=always --net=host ffdfgdfg/npc -server=IP:Port -vkey=7717pvyqjy8tujfd  -type=tcp

Windows客户端

下载与安装
https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_client.tar.gz

命令行操作
npc.exe install 其他参数(复制的-server等后的内容)     #注册
npc.exe start    #启动
npc.exe stop     #停止
npc.exe uninstall   #如果需要更换命令内容需要先使用此命令卸载,再重新使用install注册

FRP与NPS对比

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

安全性考虑

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

1.修改默认密码 :务必修改所有默认密码和密钥

2.限制访问IP :对管理界面设置IP访问限制

3.使用加密传输 :启用数据加密功能

4.最小权限原则 :只暴露必要的内网服务

5.定期更新 :保持软件版本为最新,修复已知安全漏洞

6.监控流量 :定期检查流量使用情况,发现异常及时处理

题外话

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,之前都是内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!全网独一份,你不可能在网上找到这么专业的教程。

内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,200多G的资源,不用担心学不全。
在这里插入图片描述
因篇幅有限,仅展示部分资料,需要点击下方蓝字链接即可前往免费获取!

黑客/网安大礼包:优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

在这里插入图片描述
因篇幅有限,仅展示部分资料,需要点击下方蓝字链接即可前往免费获取!

黑客/网安大礼包:优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

黑客/网安大礼包:优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要在下方图片免费获取!

请添加图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值