无公网IP的救星:四大内网穿透工具实战指南
IPv4 地址枯竭,运营商严控公网 IP,导致远程访问 NAS、调试本地服务、连接公司内网变得异常困难。幸运的是,内网穿透技术为我们打开了通道。
本文将基于实战经验,详细整理NPS、FRP、EW 和 ngrok四款主流工具的使用方法,助你在无公网 IP 的环境下也能稳操胜券。
一、四大工具选型对比
| 工具 | 语言 | 协议支持 | 管理方式 | 适用场景 |
|---|---|---|---|---|
| NPS | Go | TCP/UDP/HTTP/SOCKS5/P2P | Web 管理端 | 需要图形化管理的团队 |
| FRP | Go | TCP/UDP/HTTP/HTTPS | 配置文件 | 追求性能与稳定性的生产环境 |
| EW | C | 仅 SOCKS5 | 命令行 | 内网横向移动、多级穿透 |
| ngrok | Go | HTTP/TCP | 命令行 | 临时调试、快速暴露服务 |
二、NPS/NPC:轻量级高性能代理服务器
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。它支持 TCP、UDP 流量转发,可转发任何 TCP、UDP 上层协议(如访问内网网站、本地支付接口调试、SSH、远程桌面、内网 DNS 解析等)。此外,还支持内网 HTTP 代理、SOCKS5 代理、P2P 等,并自带功能强大的 Web 管理端。
2.1 核心特点
| 特点 | 说明 |
|---|---|
| 语言 | Go 编写,跨平台 |
| 协议 | 支持多种协议代理 |
| 管理 | 自带 Web 管理端 |
| 架构 | 一台公网 IP 的 VPS 运行服务端(NPS),内网机器运行客户端(NPC) |
2.2 架构图
2.3 实战部署
第一步:下载服务端
cd~wgethttps://github.com/cnlh/nps/releases/download/v0.23.2/linux_amd64_server.tar.gztarzxvf linux_amd64_server.tar.gzcd~/nps第二步:修改conf/nps.conf
vimconf/nps.conf设置 web 部分:
web_host= 服务器IP或域名 web_username= admin web_password= 你的密码 web_port=8080修改 bridge 可变更连接端口(如防火墙限制,可改为常见出网端口):
bridge_port=443 bridge_ip=0.0.0.0第三步:启动服务端
./nps start第四步:客户端连接
./npc-server=你的IP:8024-vkey=唯一验证密码-type=tcp提示:可在 Web 管理端新增客户端,每个 vkey 唯一。建立连接后,每个客户端可创建多个不同协议隧道,实现不同代理。
第五步:Web 管理端访问
http://[server_ip]:web_port三、FRP:高性能反向代理应用
frp是一个专注于内网穿透的高性能反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。通过具有公网 IP 的节点中转,可以安全地暴露内网服务。
3.1 核心特点
| 特点 | 说明 |
|---|---|
| 通信协议 | 支持 TCP、KCP、Websocket 等 |
| 端口复用 | 多服务可通过同一端口暴露 |
| 跨平台 | 全平台支持 |
| 插件丰富 | 多种插件提供扩展功能 |
3.2 场景一:通过 RDP 访问家里机器
服务端(frps.ini):
bind_port=7000 token=abcdefgh启动服务端:
./frps-c./frps.ini客户端(frpc.ini):
[common] server_addr = x.x.x.x server_port = 7000 token = abcdefgh [rdp] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 6000启动客户端:
./frpc-c./frpc.ini访问方式:通过x.x.x.x:6000即可访问远程桌面。
Windows 开机自启:创建
start_frpc.vbs加入启动文件夹。
3.3 场景二:通过 SSH 访问公司内网
客户端配置追加:
[ssh] type=tcp local_port=22 remote_port=6000连接命令:
ssh-oPort=6000test@x.x.x.x3.4 场景三:自定义域名访问内网 Web
服务端(frps.ini):
vhost_http_port=8080 token=客户端(frpc.ini):
[web] type=http local_port=80 custom_domains=www.yourdomain.com将域名 A 记录解析到服务器 IP,即可通过http://www.yourdomain.com:8080访问。
3.5 场景四:对外文件服务
使用static_file插件:
[test_static_file] type=tcp remote_port=6000 plugin=static_file plugin_local_path=/tmp/file plugin_strip_prefix=static plugin_http_user=abc plugin_http_passwd=abc访问方式:http://x.x.x.x:6000/static/
3.6 常用高级功能
| 功能 | 配置项 |
|---|---|
| 统计面板 | dashboard_port=7500 |
| 加密与压缩 | use_encryption=true及use_compression=true |
| TLS 加密 | tls_enable=true |
| 带宽限制 | bandwidth_limit=1MB |
| 范围端口映射 | [range:test_tcp] local_port=6000-6006,6007 |
四、EW(Earthworm):便携式网络穿透工具
EW是一套便携式网络穿透工具,具有 SOCKS v5 服务架设和端口转发两大核心功能。
4.1 核心特点
| 特点 | 说明 |
|---|---|
| 语言 | C 语言编写,轻量级 |
| 协议 | 仅支持 SOCKS5 代理 |
| 能力 | 支持多级代理,跨平台 |
| 状态 | 已停更,但经典依旧 |
4.2 主要命令格式
| 模式 | 命令 |
|---|---|
| 正向 | ./ew -s ssocksd -l 1080 |
| 反弹 | 公网主机 A 运行./ew -s rcsocks -l 1080 -e 8888目标主机 B 运行 ./ew -s rssocks -d 1.1.1.1 -e 8888 |
| 多级级联 | 利用lcx_listen、lcx_tran、lcx_slave进行连接 |
4.3 三级级联示例
数据流向:
SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks五、ngrok:反向代理快速暴露内网
ngrok是一个反向代理,在公共端点和本地 Web 服务器间建立安全通道,方便程序测试。
5.1 核心特点
| 特点 | 说明 |
|---|---|
| 维护 | 官方维护,稳定 |
| 平台 | 跨平台,闭源 |
| 功能 | 有流量记录和重放功能 |
5.2 使用方法
第一步:注册并下载
访问https://ngrok.com/下载,运行:
./ngrok authtoken<授权码>第二步:暴露本地 80 端口
./ngrok http80获取公网域名后即可外部访问。
第三步:暴露其他 TCP 服务
./ngrok tcp3389第四步:文件共享
./ngrok http"file:///路径"支持认证。
六、总结与选型建议
| 场景 | 推荐工具 |
|---|---|
| 追求图形化管理和多协议支持 | NPS |
| 追求极致性能、稳定性和插件生态 | FRP |
| 需要复杂网络环境下的多级穿透 | EW |
| 需要临时、快速暴露服务且不想配置服务端 | ngrok |
⚠️ 安全提示
无论使用哪款工具,将内网服务暴露到公网时:
| 安全措施 | 说明 |
|---|---|
| 强密码 | 务必设置复杂密码,避免弱口令 |
| TLS 加密 | 尽可能启用(如 frp 的tls_enable=true) |
| 访问控制 | 限制来源 IP,避免全公网开放 |
| 最小暴露 | 只暴露必要的端口和服务 |
| 定期审计 | 检查访问日志,发现异常及时处置 |
内网穿透是双刃剑,用好了是效率神器,用错了是安全漏洞。选对工具、配好安全策略,才能真正让无公网 IP 的环境"活"起来。