跳转到主要内容

使用示例

参考 HTTP(S) 隧道、TCP 隧道、UDP 隧道、SOCKS5 代理、HTTP 正向代理、私密代理与 P2P 连接示例

统一准备工作

  • 开启 NPS 服务端,假设服务端公网 IP 为 1.1.1.1,配置文件中的 bridge_port 为 8024,web_port 为 8080。
  • 访问 1.1.1.1:8080。
  • 在客户端管理中新增一个客户端,记录客户端验证密钥。
  • 在内网设备上运行 NPC(Windows 使用 CMD 运行 .exe 文件)。
./npc -server=1.1.1.1:8024 -vkey=客户端验证密钥

注意:运行服务端后,请确保客户端设备能正常访问配置文件中的 bridge_port 端口,可使用 Telnet、Netcat 等工具检查。

HTTP(S) 隧道

适用范围: 小程序开发、微信公众号开发、产品演示

注意:HTTP(S) 隧道提供 HTTP 反向代理,不是 DNS 服务,可在 Web 上配置。

假设场景:

  • 有一个域名 proxy.com,服务端公网 IP 为 1.1.1.1。
  • 有两个内网开发站点:127.0.0.1:81 和 127.0.0.1:82。
  • 想通过 http(s)://a.proxy.com 访问 127.0.0.1:81,通过 http(s)://b.proxy.com 访问 127.0.0.1:82。

使用步骤

  • 将 *.proxy.com 的 DNS 记录指向服务端 1.1.1.1。
  • 进入刚才创建的客户端的 HTTP(S) 隧道管理,新增两条规则:第一条的域名为 a.proxy.com、目标地址为 127.0.0.1:81;第二条的域名为 b.proxy.com、目标地址为 127.0.0.1:82。

现在访问 http(s)://a.proxy.com 或 http(s)://b.proxy.com 即可。

**HTTPS:**如需使用 HTTPS,请进行相关配置,详见使用 HTTPS 。

TCP 隧道

适用范围: SSH、远程桌面等 TCP 连接场景。

假设场景: 想通过服务端 1.1.1.1 的 8001 端口连接内网设备 10.1.50.101 的 22 端口,实现 SSH 连接。

使用步骤

  • 在刚才创建的客户端隧道管理中新增一条 TCP 隧道,填写服务端监听端口 8001 和目标地址 10.1.50.101:22,然后保存。
  • 访问服务端 IP 1.1.1.1 的监听端口 8001,相当于访问内网 IP 10.1.50.101 的目标端口 22,例如:ssh -p 8001 root@1.1.1.1。

UDP 隧道

适用范围: 内网 DNS 等 UDP 连接场景。

假设场景: 内网有一台 DNS 服务(10.1.50.102:53),希望从外部网络使用该服务;服务端公网 IP 为 1.1.1.1。

使用步骤

  • 在刚才创建的客户端的隧道管理中新增一条 UDP 隧道,填写服务端监听端口 53 和目标地址 10.1.50.102:53,然后保存。
  • 将需要使用的 DNS 地址修改为 1.1.1.1,效果等同于使用 10.1.50.102 上的 DNS 服务。

SOCKS5 代理

适用范围: 在外部网络访问内网设备或资源。

假设场景: 想将服务端 1.1.1.1 的 8003 端口作为 SOCKS5 代理入口,以访问内网设备或资源。

使用步骤

  • 在刚才创建的客户端隧道管理中新增一条 SOCKS5 代理,填写服务端监听端口 8003,然后保存。
  • 在外部设备上配置 SOCKS5 代理(例如使用 Proxifier),代理 IP 为服务端 IP 1.1.1.1,端口为 8003。

注意 经过 SOCKS5 代理时,收到 SOCKS5 数据包后 Socket 已处于 Accept 状态,因此端口扫描会显示所有端口均为 Open,并在建立连接后短时间关闭。若想获得与内网一致的表现,建议先远程连接一台内网设备。

HTTP 正向代理

适用范围: 在外部网络使用 HTTP 正向代理访问内网站点。

假设场景: 想将服务端 1.1.1.1 的 8004 端口作为 HTTP 正向代理入口,以访问内网网站。

使用步骤

  • 在刚才创建的客户端隧道管理中新增一条 HTTP 正向代理,填写服务端监听端口 8004,然后保存。
  • 在外部设备上配置 HTTP 正向代理,代理 IP 为服务端 IP 1.1.1.1,端口为 8004。

注意:使用私密代理和 P2P 连接时,除了已配置的客户端和服务端,还需要在访问端运行 NPC,并通过本地监听端口访问目标服务。

私密代理

适用范围: 不希望为每条隧道单独开放公网监听端口,或需要通过密钥访问的 TCP 服务,例如 SSH。

假设场景: 无需新增公网监听端口,即可访问内网服务 10.1.50.2:22。

使用步骤

  • 在刚才创建的客户端中新增一条私密代理,并设置隧道访问密钥 secrettest 和目标地址 10.1.50.2:22。
  • 在需要连接 SSH 的访问端执行命令:
./npc -server=1.1.1.1:8024 -vkey=vkey -type=tcp -password=secrettest -local_type=secret

如需指定本地端口,可添加参数 -local_port=xx,默认为 2000。

注意:password 是在 Web 管理中设置的隧道访问密钥,具体命令可查看 Web 管理中的访问端命令。

假设 10.1.50.2 的 SSH 用户名为 root,执行 ssh -p 2000 root@127.0.0.1 即可访问。

P2P 连接

适用范围: 希望减少服务端中转流量的大流量传输场景。P2P 连接是否成功与双方网络和 NAT 类型密切相关,无法保证直连成功。参见检测 NAT 类型 。

假设场景:

想通过访问端设备的 2000 端口访问内网设备 10.2.50.2 的 22 端口。

使用步骤

  • 在 nps.conf 中设置 p2p_ip(服务端 IP)和 p2p_port(服务端 P2P 端口)。

注:若 p2p_port 设置为 6000,请在防火墙中放通 UDP 端口 6000 至 6002。

  • 在刚才创建的客户端中新增一条 P2P 连接,并设置隧道访问密钥 p2pssh。
  • 在访问端设备上执行命令:
./npc -server=1.1.1.1:8024 -vkey=123 -password=p2pssh -target=10.2.50.2:22

如需指定本地端口,可添加参数 -local_port=xx,默认为 2000。

注意:password 是在 Web 管理中设置的隧道访问密钥,具体命令可查看 Web 管理中的访问端命令。

假设内网设备 10.2.50.2 的 SSH 用户名为 root,在访问端执行 ssh -p 2000 root@127.0.0.1 即可访问;如果目标是网站,则在浏览器中访问 127.0.0.1:2000。