内网穿透神器: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_port | web管理端口 |
| web_password | web界面管理密码 |
| web_username | web界面管理账号 |
| web_base_url | web管理主路径,用于将web管理置于代理子路径后面 |
| bridge_port | 服务端客户端通信端口 |
| https_proxy_port | 域名代理HTTPS代理监听端口 |
| http_proxy_port | 域名代理HTTP代理监听端口 |
| auth_key | web API密钥 |
| bridge_type | 客户端与服务端连接方式(kcp 或 tcp) |
| public_vkey | 客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式 |
| ip_limit | 是否限制IP访问(true/false 或忽略) |
| flow_store_interval | 服务端流量数据持久化间隔(单位:分钟),忽略表示不持久化 |
| log_level | 日志输出级别 |
| auth_crypt_key | 获取服务端authKey时的AES加密密钥(16位) |
| p2p_ip | 服务端IP,使用P2P模式必填 |
| p2p_port | P2P模式开启的UDP端口 |
| pprof_ip | Debug pprof 服务端IP |
| pprof_port | Debug 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对比
| 特性 | FRP | NPS |
|---|---|---|
| 配置方式 | 配置文件 | 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…

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


628

被折叠的 条评论
为什么被折叠?



