编程 内网穿透工具选型笔记:nps / frp / ew / ngrok

2026-08-28 22:34:40 views 18

内网穿透工具选型笔记:nps / frp / ew / ngrok

搞内网穿透,说白了就是让公网能访问到你内网那台机器。我这几年轻量级渗透、远程桌面、临时调试 Webhook 都干过,工具换来换去,最后常用的就这四个。下面按我的使用场景讲讲怎么选、坑在哪。

nps-npc:适合不想写配置、喜欢 web 管理的

如果你有公网 VPS,又不想碰配置文件,nps 是首选。它分服务端 nps 和客户端 npc,Go 写的,跨平台,web 管理端挺全,可以建客户端、加隧道、看流量。

我当时用是因为要快速给多个内网机器开代理,web 界面点几下就行,不需要记一堆 ini 语法。每个客户端分配一个 vkey,服务端和客户端配对用。配置核心就两处:

服务端 conf/nps.conf 里改 web 登录和 bridge 端口:

web_host=你的IP或域名
web_username=admin
web_password=你的密码
web_port=8080

bridge_type=tcp
bridge_port=443   # 默认 8024,但防火墙只放行 443 时改成 443

启动服务端:

./nps start

客户端连接命令:

./npc -server=你的IP:443 -vkey=唯一验证密码 -type=tcp

坑:web 管理端方便,但也意味着暴露面大,别把管理端口直接裸奔公网,至少改默认密码。另外如果内网机器出网受限,bridge 端口一定要改到能出去的端口上。

frp:最主流,生态最好,长期用选它

frp 是今天最常用的内网穿透工具,文档多、社区活跃、功能丰富。支持 TCP、UDP、HTTP、HTTPS,还有加密、压缩、限速、TLS、范围端口映射、插件(static_file)等。如果你要稳定跑生产,或者需要各种奇奇怪怪的功能,frp 是默认选项。

配置不复杂,一份 frps.ini 一份 frpc.ini。服务端:

[common]
bind_port = 7000
token = abcdefgh  # 服务端和客户端要一致

客户端:

[common]
server_addr = x.x.x.x
server_port = 7000
token = abcdefgh

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

然后 ./frps -c frps.ini./frpc -c frpc.ini 就完事了。远程桌面就把 local_port 改成 3389,SSH 就 ssh -oPort=6000 test@x.x.x.x。HTTP 服务再加一行 vhost_http_port = 8080,客户端里设 type = httpcustom_domains

几个有用但容易忽略的点:

  • 防火墙屏蔽 SSH 协议时,在 frpc 里加 use_encryption = trueuse_compression = true
  • 面板状态 dashboard_port = 7500,但注意 proxy 数量多了会卡,官方也提示别乱开。
  • 端口批量映射可以用 range: 语法,例如 local_port = 6000-6006,6007,会自动拆成多个 proxy。

坑:frp 配置灵活,但版本更新频繁,网上抄的配置可能在新版本失效,记得看官方 release 的 breaking change。

ew:应急和内网渗透才用的老古董

ew(EarthWorm)是纯 C 写的,轻量、单文件、跨平台,但只支持 SOCKS5 代理,而且项目已经停止更新了。所以日常生产别用它,它最适合的是「拿到一台机器的权限,想快速把内网流量代理出来做渗透」的场景。

正向代理:

./ew -s ssocksd -l 1080

反弹代理(公网主机先监听,内网机器回连):

./ew -s rcsocks -l 1080 -e 8888          # 公网 VPS 上
./ew -s rssocks -d 1.1.1.1 -e 8888       # 目标内网机器上

它还能做多级级联,比如 lcx_listenlcx_tranlcx_slave 组合起来,把深层次的 TCP 服务转发出来。但说实话,现在有更多现代选择(比如 frp 的 socks5 插件),除非环境受限必须用静态编译的老工具,否则别在生产环境折腾它。

坑:不更新就是最大的坑。如果你只是需要 socks5 代理,其实 frp 也能配 plugin = socks5,没必要上 ew。

ngrok:临时演示、本地调试 Webhook 最方便

ngrok 是闭源的,官方提供托管服务,注册账号填 authtoken 就能用,不需要自己准备公网服务器。特别适合本地起了个服务,想让远端同事临时看一下,或者调试微信/支付回调。

常用命令:

ngrok authtoken 1hAotxhmORtzCYvUc3BsxDBPh1H_****
ngrok http 80
ngrok tcp 3389

文件共享也可以:

ngrok http -auth="user:password" file:///Users/alan/share

坑:免费版域名是随机的,每次重启都会变,没法固定;官方 UI 里看流量和重放要付费。另外闭源,数据都要经过官方服务器,敏感场景慎用。自己搭个 frp 其实也就多花几分钟,但长期用还是 frp 稳妥。

最后说句实在话

内网穿透没有银弹。想省事、有 web 管理需求就 nps;要长期稳定、功能全面就 frp;应急渗透再考虑 ew;临时开个公网入口就 ngrok。

你现在的内网穿透方案是什么?有没有遇到过 frp 版本升级后配置不兼容的坑?我最近在纠结要不要给 frp 写 systemd 托管,求实测过的同学聊聊。

复制全文 生成海报 内网穿透 运维 NPS FRP

推荐文章

程序员茄子在线接单