nps

7/31/2022 内网穿透代理TCP隧道端口映射

# nps (opens new window)

# 简介

有时候在公司的业务当中需要固定公网IP将内网业务暴露到公网上或在外网通过ssh连接内网的机器,如果电信、移动或者联通愿意提供固定公网IP的话,只需要在公司内网的某台windows服务器上安装一个端口映射器或安装远程访问下的路由功能(或linux服务器通过防火墙做IP伪装、NAT),然后在公司的出口路由器上将该服务器设置为DMZ主机;但是现在很难从电信、移动或联通那里获得固定公网IP,那么我们可以折衷购买一台云服务器,然后在云服务器上部署内网服务器端口映射。

这里选择NPS来部署,NPS 是一款轻量级、高性能、功能强大的内网穿透代理服务器。

  • 几乎支持所有协议
  • 支持内网http代理、内网socks5代理、p2p等
  • 简洁但功能强大的WEB管理界面
  • 支持服务端、客户端同时控制
  • 扩展功能强大
  • 全平台兼容,一键注册为服务

# 入门

# 安装

官网上介绍了三种安装方式(安装包安装、源码安装、docker安装),此处仅以安装包安装在CentOS环境下部署为例,想要了解更多内容还请通过官方文档进行学习。

  1. 通过官方releases (opens new window)下载对应的系统版本即可,服务端和客户端是单独的
  2. 服务端安装
# 依赖:golang
yum -y install golang

# 创建安装目录,并进入安装目录
mkdir -p /opt/nps && cd /opt/nps

# 通过wget工具拉取安装包
wget -c https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz

# 解压安装包的GZIP方式的压缩包
tar zxvf linux_amd64_server.tar.gz

# 执行安装程序
./nps install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  1. 客户端安装
yum -y install golang
mkdir -p ~/opt/local/npc && cd ~/opt/local/npc
wget -c https://github.com/ehang-io/nps/releases/download/v0.26.10/xxx.tar.gz
tar zxvf xxx.tar.gz
sudo ./npc install
1
2
3
4
5

# 配置 && 启动


**统一准备工作(必做)**
  1. 开启服务端,假设公网服务器ip为1.1.1.1,配置文件中bridge_port为8024,配置文件中web_port为8080
# 在生产环境中需要防火墙保护,而在演示环境中,选择关闭所有防火墙
systemctl stop iptables.service
systemctl stop firewalld.service

# 配置文件位置: /etc/nps/conf/nps.conf
# 修改web访问账户密码
# default: admin / 123
sed -i "s/web_username=admin/web_username=新用户名/g" /etc/nps/conf/nps.conf 
sed -i "s/web_password=123/web_password=新密码/g" /etc/nps/conf/nps.conf

# 启动
nps start
1
2
3
4
5
6
7
8
9
10
11
12
  1. 配置云服务的策略组(开放端口8024、8080、以及预留将来的映射端口)
  2. web访问1.1.1.1:8080
  3. 在客户端管理中创建一个客户端,记录下验证密钥
  4. 内网客户端运行
mkdir -p ~/opt/local/npc/nohup && cd ~/opt/local/npc/nohup
nohup npc -server=1.1.1.1:8024 -vkey=客户端的密钥 > nohup.out 2>&1 &
1
2

注意
运行服务端后,请确保能从客户端设备上正常访问配置文件中所配置的bridge_port端口,telnet,netcat这类的来检查


TCP隧道

适用范围: ssh、远程桌面等tcp连接场景

假设场景: 想通过访问公网服务器1.1.1.1的8001端口,连接内网机器10.1.50.101的22端口,实现ssh连接

使用步骤

在刚才创建的客户端隧道管理中添加一条tcp隧道,填写监听的端口(8001)、内网目标ip和目标端口(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
1
2