内网穿透

tool

# 一、内网穿透

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

# 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)架构

  1. FRP 服务器(Server):部署在具有公网 IP 的服务器上,作为流量入口。
  2. FRP 客户端(Client):部署在内网设备上,与服务器建立连接,并指定需要转发的内网服务。

常用配置项解析

  1. 服务器端(frps.ini)
配置项 说明
bind_port 服务器监听客户端连接的端口(必填)。
token 客户端与服务器通信的认证密钥,需与客户端一致。
dashboard_port 管理面板端口,可通过浏览器查看 FRP 运行状态。
vhost_http_port HTTP 服务默认监听端口(用于域名转发)。
vhost_https_port HTTPS 服务默认监听端口(用于域名转发)。
  1. 客户端(frpc.ini)
配置项 说明
server_addr FRP 服务器的公网 IP 或域名(必填)。
server_port 服务器监听端口(需与服务器端 bind_port 一致)。
token 与服务器端一致的认证密钥。
type 转发类型(tcpudphttphttps)。
local_ip 内网服务的 IP 地址(通常为 127.0.0.1)。
local_port 内网服务的端口。
remote_port 公网服务器映射的端口(TCP/UDP 转发时必填)。
custom_domains HTTP/HTTPS 转发时绑定的域名(可多个,用逗号分隔)。

# 5、使用

# 1)部署服务端frps

部署 下载镜像

docker pull snowdreamtech/frps:0.52.3
1

安装

mkdir -p /usr/local/docker/resource/frp/frps
cd /usr/local/docker/resource/frp/frps
vi frps.toml
vi docker-compose.yml
1
2
3
4

frps.toml

bindPort = 7000
webServer.addr = "0.0.0.0"
webServer.port = 7001
webServer.user = "admin"
webServer.password = "admin"
vhostHTTPPort = 8081
1
2
3
4
5
6

docker-compose.yml

version: '3'
services:
  frps:
    restart: always
    image: 'snowdreamtech/frps:0.52.3'
    container_name: frps
    volumes:
      - ./frps.toml:/etc/frp/frps.toml
    ports:
      - "7000:7000"
      - "7001:7001"
      - "8081:8081"
1
2
3
4
5
6
7
8
9
10
11
12

说明:

# 2)部署客户端frpc

部署 下载镜像

docker pull snowdreamtech/frps:0.52.3
1

安装

mkdir -p /usr/local/docker/resource/frp/frps
cd /usr/local/docker/resource/frp/frps
vi frps.toml
vi docker-compose.yml
1
2
3
4

frps.toml

serverAddr = "39.99.111.122"
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.111.122"]

1
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"
1
2
3
4
5
6
7
8
9
10

说明:

# 四、Cpolar(不推荐)

# 1、简介

官网 (opens new window)

NPS官方源码地址-GitHub (opens new window)

NPS官方下载 (opens new window)

公开一个本地Web站点至公网。

只需一行命令,就可以将内网站点发布至公网,方便给客户演示。高效调试微信公众号、小程序、对接支付宝网关等云端服务,提高您的编程效率。

# 2、使用

# 1)下载安装

在内网服务器,下载安装。

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
1

向系统添加服务

sudo systemctl enable cpolar
1

启动Cpolar服务

sudo systemctl start cpolar
1

启动成功后,访问地址:【内网IP:9200】

# 2)注册Cpolar账户

注册 (opens new window)

输入用户名、登录邮箱(账号)、联系电话、密码。

登录 (opens new window)

a、选择免费套餐;

b、在验证菜单 (opens new window),复制验证token。

c、在内网服务器执行该认证。

cpolar authtoken xxxxxxxYmQtNGzLTgwMxxxxxxxxxxxxx
1

# 3)配置公网地址

a、添加隧道

点击左侧仪表盘的隧道管理—创建隧道,创建一个Nexus的公网地址隧道!

  • 隧道名称:可自定义命名,注意不要与已有的隧道名称重复;
  • 协议:选择红框中显示的http;
  • 本地地址:内网要穿透的服务的端口,例:8081;
  • 域名类型:选择随机域名;
  • 地区:选择China;

注意:

  1. 使用随机域名,不固定,隔一段时间就变。(免费的蛋糕你还想一直吃...)
  2. 若有自己的域名,建议选择二级子域名、自定义域名。(但这2种类型,需要把当前Cpolar账户升级为付费版哦)

b、访问域名

创建隧道成功后,点击左侧仪表盘的状态—在线隧道列表,可查看到刚生成的隧道有2种访问方式(http和https)。

任意复制一个即可进行访问。

自此,一个内网系统,即可通过Cpolar,生成域名进行互联网访问!