# 一、内网穿透
NAT(Network Address Translation)
# 内网穿透工具
- NPS-NPC
- FRP
- Cpolar(不推荐)
# 二、NPS与NPC
# 1、简介
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。
目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等。
nps带有功能强大的web管理端。
- NPS:一台有公网IP的服务器
- NPC:需要穿透的内网服务器

# 2、特点
- Go语言编写
- 支持跨平台
- 支持多种协议的代理
- web管理端
# 3、使用
# 三、FRP
# 1、简介
FRP 是一个开源的反向代理工具,能够帮助用户在 NAT 网络环境下实现内网穿透,让位于内网的服务可以被公网访问。它的设计简洁且功能强大,常用于远程访问内网设备、搭建个人服务器、实现服务代理等场景。
# 2、核心功能
- 反向代理:将公网服务器的流量转发到内网的指定设备或服务。
- 内网穿透:突破 NAT 限制,让内网服务(如 Web 网站、SSH 服务、数据库等)被公网访问。
- 多协议支持:支持 TCP、UDP、HTTP、HTTPS 等多种协议。
- 负载均衡:可将流量分发到多个内网服务节点。
- 加密与压缩:传输过程支持加密和压缩,提升安全性和传输效率。
# 3、典型应用场景
- 远程访问内网设备:如远程控制家里的电脑、访问内网 NAS 存储。
- 开发测试:本地开发的 Web 应用通过 FRP 暴露到公网,方便调试和测试。
- 搭建个人服务:在内网搭建博客、文件服务器,通过公网域名访问。
- 企业内网互联:分支机构与总部内网服务互通。
# 4、FRP 的工作原理
FRP 采用 客户端 - 服务器(C/S)架构:
- FRP 服务器(Server):部署在具有公网 IP 的服务器上,作为流量入口。
- FRP 客户端(Client):部署在内网设备上,与服务器建立连接,并指定需要转发的内网服务。
常用配置项解析
- 服务器端(frps.ini)
| 配置项 | 说明 |
|---|---|
bind_port | 服务器监听客户端连接的端口(必填)。 |
token | 客户端与服务器通信的认证密钥,需与客户端一致。 |
dashboard_port | 管理面板端口,可通过浏览器查看 FRP 运行状态。 |
vhost_http_port | HTTP 服务默认监听端口(用于域名转发)。 |
vhost_https_port | HTTPS 服务默认监听端口(用于域名转发)。 |
- 客户端(frpc.ini)
| 配置项 | 说明 |
|---|---|
server_addr | FRP 服务器的公网 IP 或域名(必填)。 |
server_port | 服务器监听端口(需与服务器端 bind_port 一致)。 |
token | 与服务器端一致的认证密钥。 |
type | 转发类型(tcp、udp、http、https)。 |
local_ip | 内网服务的 IP 地址(通常为 127.0.0.1)。 |
local_port | 内网服务的端口。 |
remote_port | 公网服务器映射的端口(TCP/UDP 转发时必填)。 |
custom_domains | HTTP/HTTPS 转发时绑定的域名(可多个,用逗号分隔)。 |
# 5、使用
# 1)部署服务端frps(docker)
下载镜像
docker pull snowdreamtech/frps:0.52.3
安装
mkdir -p /usr/local/docker/resource/frp/frps
cd /usr/local/docker/resource/frp/frps
vi frps.toml
vi docker-compose.yml
2
3
4
frps.toml
# 客户端与服务连接端口
bindPort = 7000
# http协议监听端口
vhostHTTPPort = 880
# web界面配置
webServer.addr = "0.0.0.0"
webServer.port = 7001
webServer.user = "admin"
webServer.password = "123456"
2
3
4
5
6
7
8
9
docker-compose.yml
services:
frps:
image: snowdreamtech/frps:0.52.3
container_name: frps
network_mode: host
volumes:
- ./frps.toml:/etc/frp/frps.toml
restart: always
2
3
4
5
6
7
8
# 2)部署客户端frpc(docker)
下载镜像
docker pull snowdreamtech/frps:0.52.3
安装
mkdir -p /usr/local/docker/resource/frp/frps
cd /usr/local/docker/resource/frp/frps
vi frps.toml
vi docker-compose.yml
2
3
4
frps.toml
serverAddr = "39.99.123.230"
serverPort = 7000
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
[[proxies]]
name = "Nexus-http"
type = "http"
localIP = "192.168.0.200"
localPort = 8081
customDomains = ["39.99.123.230"]
2
3
4
5
6
7
8
9
10
11
12
13
14
docker-compose.yml
version: '3'
services:
frpc:
restart: always
image: 'snowdreamtech/frpc:0.52.3'
container_name: frpc
volumes:
- './frpc.toml:/etc/frp/frpc.toml'
ports:
- "7400:7400"
2
3
4
5
6
7
8
9
10
# 3)部署客户端frpc(linux)
下载
frp 0.52.3(和服务端版本一致)
cd /tmp
# 代理1
wget https://gh-proxy.com/https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
# 不行换代理2
wget https://ghfast.top/https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
# 不行换代理3
wget https://gh.llkk.cc/https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
2
3
4
5
6
7
8
9
10
如果全都不行,就在别的能上网的机器下好,scp 拷到 /tmp/:
bash
scp frp_0.52.3_linux_amd64.tar.gz root@海康机器IP:/tmp/
下载完确认文件大小(应十几 MB):
ls -lh /tmp/frp_0.52.3_linux_amd64.tar.gz
解压 + 安装 frpc
cd /tmp
tar -zxvf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64
cp frpc /usr/local/bin/
chmod +x /usr/local/bin/frpc
mkdir -p /etc/frp
# 验证
/usr/local/bin/frpc --version
# 应输出 0.52.3
2
3
4
5
6
7
8
9
10
11
12
写配置文件
vi /etc/frp/frpc.toml
内容(你当前这版):
serverAddr = "39.99.123.230"
serverPort = 7000
# frps.toml 里没配 auth.token,所以这里不要写 auth 段
log.to = "/var/log/frpc.log"
log.level = "info"
log.maxDays = 7
# ===== SQL Server 1443 =====
[[proxies]]
name = "hikvision-1443"
type = "tcp"
localIP = "127.0.0.1"
localPort = 1443
remotePort = 6300
# ===== 6200 =====
[[proxies]]
name = "hikvision-6200"
type = "tcp"
localIP = "127.0.0.1"
localPort = 6200
remotePort = 6200
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
注意:
name两条不同remotePort两条不同(6300、6200)- 不写 auth(因为服务端没配 token)
localPort是你本机服务真实端口(1443、6200)
重启
杀干净旧进程 + 手动跑一次验证
pkill -9 frpc
sleep 1
ps aux | grep frpc # 确认只剩 grep 自己
/usr/local/bin/frpc -c /etc/frp/frpc.toml
2
3
4
5
成功的样子:
login to server success
start proxy success
start proxy success ← 两条
2
3
同时云服务器看 frps 日志:
docker logs -f frps
应看到:
new proxy [hikvision-1443] type [tcp] success
new proxy [hikvision-6200] type [tcp] success
2
两边都 success → Ctrl+C 停掉,进入下一步。
后台常驻 + 开机自启
先确认 PID 1 是不是 systemd
ps -p 1 -o comm=
- 是 systemd → 用 systemd(推荐)
vi /etc/systemd/system/frpc.service
[Unit]
Description=frp client
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
2
3
4
5
6
7
8
9
10
11
12
13
14
15
执行
systemctl daemon-reload
systemctl enable frpc
systemctl start frpc
systemctl status frpc
tail -f /var/log/frpc.log
2
3
4
5
不是 systemd → 用 nohup + crontab
手动后台跑:
pkill -9 frpc nohup /usr/local/bin/frpc -c /etc/frp/frpc.toml >/var/log/frpc.log 2>&1 & tail -f /var/log/frpc.log1
2
3配开机自启:
crontab -e1加一行(如果是在
crontab -eroot 用户下,不用写 root;如果是/etc/crontab,要写root):@reboot /usr/local/bin/frpc -c /etc/frp/frpc.toml >/dev/null 2>&1 &1
云服务器安全组放行新端口
你 remotePort 改成了 6300 和 6200。云服务器安全组要放行:
6300(TCP)6200(TCP)
(7000 之前已放行。)
frps 是 host 模式,compose 不用改,frps 直接监听 6300、6200。
# 6、外网验证
# 6300(对应本机 1443)
telnet 39.99.123.230 6300
# 6200
telnet 39.99.123.230 6200
2
3
4
5
# 四、Cpolar(不推荐)
# 1、简介
NPS官方源码地址-GitHub (opens new window)
公开一个本地Web站点至公网。
只需一行命令,就可以将内网站点发布至公网,方便给客户演示。高效调试微信公众号、小程序、对接支付宝网关等云端服务,提高您的编程效率。
# 2、使用
# 1)下载安装
在内网服务器,下载安装。
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
向系统添加服务
sudo systemctl enable cpolar
启动Cpolar服务
sudo systemctl start cpolar
启动成功后,访问地址:【内网IP:9200】
# 2)注册Cpolar账户
输入用户名、登录邮箱(账号)、联系电话、密码。
a、选择免费套餐;
b、在验证菜单 (opens new window),复制验证token。
c、在内网服务器执行该认证。
cpolar authtoken xxxxxxxYmQtNGzLTgwMxxxxxxxxxxxxx
# 3)配置公网地址
a、添加隧道
点击左侧仪表盘的隧道管理—创建隧道,创建一个Nexus的公网地址隧道!
- 隧道名称:可自定义命名,注意不要与已有的隧道名称重复;
- 协议:选择红框中显示的http;
- 本地地址:内网要穿透的服务的端口,例:8081;
- 域名类型:选择随机域名;
- 地区:选择China;
注意:
- 使用随机域名,不固定,隔一段时间就变。(免费的蛋糕你还想一直吃...)
- 若有自己的域名,建议选择二级子域名、自定义域名。(但这2种类型,需要把当前Cpolar账户升级为付费版哦)
b、访问域名
创建隧道成功后,点击左侧仪表盘的状态—在线隧道列表,可查看到刚生成的隧道有2种访问方式(http和https)。
任意复制一个即可进行访问。
自此,一个内网系统,即可通过Cpolar,生成域名进行互联网访问!