# 使用示例

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

---

LLMS 索引： [llms.txt](/llms.txt)

---

## 统一准备工作

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

```shell
./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](/server/nps_extend.html#使用-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 类型](/extend/feature/nat-detection.html)。

**假设场景：**

想通过访问端设备的 `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`。

---

反链：

- [使用说明](/client/use.html)
- [术语表](/extend/glossary.html)
