[ Docker ] 部署 nps 和 npc 实现内网穿透

news2025/1/12 15:59:46

nps 原作者已停止维护,现在用 yisier1/nps

云主机上运行 nps

创建目录

mkdir -p /root/docker/nps
mkdir /root/repo

下载必要文件

Docker 镜像

docker pull yisier1/nps

Git 仓库

git clone https://github.com/yisier/nps.git /root/repo
cp -r /root/repo/nps/conf /root/docker/nps/config

修改配置

vim /root/docker/nps/config/nps.conf

打开后重点关注下面这几项:


bridge_port=8024    # 客户端连接端口

web_username=admin  # 后台管理用户名
web_password=123    # 后台管理密码
web_port=8080       # 后台管理端口

以上是默认的配置,建议改掉。

运行容器

docker run -d --restart=always --name nps --net=host -v /root/docker/nps/config:/conf -v /etc/localtime:/etc/localtime:ro yisier1/nps

现在 nps 已经开始运行了。

现在可以在网页端访问 <ip_addr>:<web_port>,并通过用户名 <web_username> 和密码 <web_password> 登录后台管理界面了。
能够成功访问后,继续下面的步骤。

添加客户端

点击左侧菜单栏的 客户端 选项,再点击新增。

image

设置一个 客户端验证密钥,这里可以随便填。压缩、加密愿意的话也可以选 yes。

image

设置好后点击 新增 即可。

image

留意一下这里的 id 和 vkey

本地机上运行 npc

本地机建议选择一台 7*24 小时运行的设备,一般是路由器或者 NAS。

下载必要文件

Docker 镜像

docker pull yisier1/npc

创建容器

docker run -d --restart=always --name npc --net=host yisier1/npc -server=$ip:$ridge_port -vkey=$vkey

服务端功能创建运行后,在 nps 后台可以看到客户端已经在线。

image

后台配置 nps

前面部署 nps 时候已经配置了一部分了,接下来要配置的就是具体需要穿透的端口了。

添加 tcp 隧道

这里举例配置一下 Jellyfin 的 http 端口 8096
进入 nps 后台管理,点击左侧菜单栏的 客户端 选项,再点击新增。

image

  • 类型
    这里选 tcp 不用动它。
  • 备注
    随便填,方便自己记就行。
  • 服务器端口
    指外放访问端口,我这里跟 Jellyfin 内网一致了,这里只是为了演示用默认,等下就会改掉。
  • 目标
    指内网对应服务的地址和端口。
  • 客户端 id
    就是上面我说了要留意一下的 id,我这里是 3

image

然后点击 新增

image

这样一条隧道就添加好了。

至此内网穿透算是部署好了。

尝试访问一下 Jellyfin。

image

容器保活

有时候运行的容器会自己挂掉,虽然不经常发生,但是偶尔来一次,遇上刚好要用的时候就很烦人。
下面演示我在服务端如何让容器保活的,方法比较粗暴但有效。

创建目录

创建目录来存放脚本和日志文件。

mkdir -p /root/docker/nps/script
mkdir -p /root/docker/nps/log

获取容器 ID

docker ps -a --no-trunc | perl -alne 'print $F[0] if /\bnps$/'

会得到一长串 ID,记下来 <nps_id>

keepActive.sh

创建 bash 脚本,放到 /root/docker/nps/script/keepActive.sh

#!/bin/bash
cur=$(cd $(dirname $0); pwd -P)
log="$cur/../log/log"
a=$(docker ps -q --no-trunc | grep '<nps_id>')  # 这里其实就是去匹配看看当前运行中的容器有没有nps,<nps_id>改成上一步获取到的。
if [[ "_$a" == "_" ]]; then
    docker restart nps  # 第一次重启 nps
    if [[ $? == 0 ]]; then
        echo "Revive  $(date +'%F %T')" >> $log
    else
        echo "Failed  $(date +'%F %T')" >> $log
        systemctl restart docker.service  # 重启失败大概率是 docker 服务挂了,这里重启服务
        docker restart nps
        echo "Restart $(date +'%F %T')" >> $log
    fi
else
    echo "Active  $(date +'%F %T')" >> $log
fi

如果是服务器 docker 挂了,且重启失败,那就不是保不保活的问题了,登上服务器检查吧。

crontab.set

创建一个 crontab.set,用来配置定时任务。这个文件就随便放了,一次性的。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

*  *  *  *  * /root/docker/nps/script/keepActive.sh

接着运行:

crontab crontab.set

这里是配置一分钟运行一次 keepActive.sh 脚本,所以如果 nps 挂了,一分钟内它就会重启了。

如果你还配置了其他的定时任务,那你应该知道怎么设置 crontab,别把以前配置的任务给覆盖了。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/872445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【密码学】维京密码

维京密码 瑞典罗特布鲁纳巨石上的图案看起来毫无意义&#xff0c;但是它确实是一种维京密码。如果我们注意到每组图案中长笔画和短笔画的数量&#xff0c;将得到一组数字2、4、2、3、3、5、2、3、3、6、3、5。组合配对得到24、23、35、23、36、35。现在考虑如图1.4所示的内容&a…

yolov5部署 单线程与多线程对比

单线程 部署代码可参考&#xff1a; Yolov5 ONNX Runtime 的 C部署_爱钓鱼的歪猴的博客-CSDN博客 main.cpp #include "detector.h" #include <chrono> using namespace std;// 识别线程 void *detect_thread_entry(void *para){}int main(int argc, char *ar…

分布式应用:Zabbix监控MariaDB

目录 一、理论 1.Zabbix监控MariaDB 二、实验 1.Zabbix监控MariaDB 一、理论 1.Zabbix监控MariaDB &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.168.204.214 zabbix客户端&#xff1a;192.168.204.215 &#xff08;2&#xff09;MareaDB安装 安装 za…

文献阅读:AnnoLLM: Making Large Language Models to Be Better Crowdsourced Annotators

文献阅读&#xff1a;AnnoLLM: Making Large Language Models to Be Better Crowdsourced Annotators 1. 文章简介2. 方法介绍3. 实验考察 1. 实验结果2. 消解实验3. Consistency & Stability 4. 结论 & 思考 文献链接&#xff1a;https://arxiv.org/abs/2303.16854 …

STM32F429IGT6使用CubeMX配置SPI通信(W25Q256芯片)

1、硬件电路 需要系统性的看一下W25Q256芯片手册 2、设置RCC&#xff0c;选择高速外部时钟HSE,时钟设置为180MHz 3、配置SPI 4、生成工程配置 5、相关代码 #define sFLASH_ID 0XEF4019 // W25Q256#define SPI_FLASH_PageSize 256 #define SPI_FLASH_PerWritePageSize 256#def…

爬虫小白-如何辨别请求头referer/origin反爬

目录 一、网站分析二、最终代码一、网站分析 1、网站,研究这块数据从哪个接口来的 2、反爬参数:请求头referer/origin校验和x-api-key 3、详细分析流程,看b站十一姐时一视频, 或者知识星球时光漫漫图文文章 二、最终代码 # -*- coding: utf-8 -*- # @Time : 2023-08-13

为了监控上厕所次数,我开发了一个软件

背景 最近整了一个好玩的东西&#xff0c;一个快捷指令&#xff0c;实现点击之后显示当前的日期&#xff0c;同时后台将这个时间记录到一个文件里。文件在icloud上&#xff0c;实现多个设备的同步。话不多说&#xff0c;先看看效果吧。 这个是我的“软件”图标&#xff1a; 怎…

网络安全 Day30-容器架构上

容器架构上 1. 容器架构1.1 什么是容器1.2 容器 vs 虚拟机(化) :star::star:1.3 Docker极速上手指南1&#xff09;使用rpm包安装docker2) docker下载镜像加速的配置3) 载入镜像大礼包&#xff08;老师资料包中有&#xff09; 1.4 Docker使用案例1&#xff09; 案例01&#xff1…

第12集丨Vue 江湖 —— 内置指令

目录 一、v-text二、v-html2.1 基本使用2.2 cookie原理2.2.1 登入成功后cookies的信息2.2.2 手动增加cookie值2.2.3 cookie edit 三、v-cloak3.1 案例 四、v-once五、v-pre 到本节为止&#xff0c;我们学过的指令: v-bind &#xff1a;单向绑定解析表达式v-model &#xff1a;…

idea生成springboot单元测试用例

1、找到需要生成单元测试的类型&#xff0c;右键Go To -> Test 2、选择JUnit4 和勾选需要测试的方法 3、查看自动生成的文件 public class CategoryMapperTest {Testpublic void findById() {}Testpublic void queryById() {} } 4、添加测试代码 RunWith(SpringRunner.cla…

【JavaEE】懒人的福音-MyBatis框架—[单表]增删改查等常规操作

【JavaEE】MyBatis框架要点总结&#xff08;2&#xff09; 文章目录 【JavaEE】MyBatis框架要点总结&#xff08;2&#xff09;1. 单表查看操作1.1 (条件查询)通过id查找用户1.1.1 接口上声明方法1.1.2 xml文件中去实现方法1.1.3 测试 1.2 传递参数的重点问题&#xff1a;sql注…

【LeetCode周赛】LeetCode第358场周赛

LeetCode第358场周赛 数组中的最大数对和翻倍以链表形式表示的数字限制条件下元素之间的最小绝对差 数组中的最大数对和 给你一个下标从0开始的整数数组nums。请你从nums中找出和最大的一对数&#xff0c;且这两个数数位上最大的数字相等。 返回最大和&#xff0c;如果不存在满…

手机商城网站的分析与设计(论文+源码)_kaic

目录 摘 要 1 1 绪论 2 1.1选题背景意义 2 1.2国内外研究现状 2 1.2.1国内研究现状 2 1.2.2国外研究现状 3 1.3研究内容 3 2 网上手机商城网站相关技术 4 2.1.NET框架 4 2.2Access数据库 4 2.3 JavaScript技术 4 3网上手机商城网站分析与设…

基于grpc从零开始搭建一个准生产分布式应用(3) - GRPC实现

本章开始会进入GRPC子专题&#xff0c;先实现前面章节中提到的例子。然后就使用的知识点展开全面的描述。本章代码任务&#xff1a;1、实现一个简单的GRPC服务&#xff1b;2、实现GRPC拦截器。 本章的代码承接上一章的代码进行迭代。因模块间存在相互依赖关系&#xff0c;读者一…

SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?

ServletWebServletAutoConfiguration类定义如下&#xff1a; 可以看到其中通过Import注解导入了其内部类BeanPostProcessorRegister。 BeanPostProcessor中定义的registerBeanDefinition方法会被Spring容器调用。 registerBeanDefinitions方法调用了RegistrySyntheticBeanIf…

【MongoDB】一文带你快速掌握MongoDB数据库和集合基础操作

文章目录 前言一、案例需求二、数据库操作1. 选择和创建数据库2. 数据库的删除 三、集合操作1. 集合的显式创建&#xff08;了解&#xff09;2. 集合的隐式创建3. 集合的删除 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便…

pycorrector一键式文本纠错工具,整合了BERT、MacBERT、ELECTRA、ERNIE等多种模型,让您立即享受纠错的便利和效果

pycorrector&#xff1a;一键式文本纠错工具&#xff0c;整合了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer、T5等多种模型&#xff0c;让您立即享受纠错的便利和效果 pycorrector: 中文文本纠错工具。支持中文音似、形似、语法错误纠正&#xff0c;pytho…

激活函数总结(七):激活函数补充(Softsign、Threshold、Sinc)

激活函数总结&#xff08;七&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Softsign激活函数2.2 Threshold (Unit step activation function) 激活函数2.3 Sinc激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Lea…

Java-运算符和控制语句(下)(基于c语言的补充)

输出到控制台 System.out.println(msg); // 输出一个字符串, 带换行 System.out.print(msg); // 输出一个字符串, 不带换行 System.out.printf(format, msg); // 格式化输出 从键盘输入 使用 Scanner 读取字符串/整数/浮点数 首先需要导入util包 自动导入util包 这里把回车看…

21-因子个数

题目 一个正整数可以分解成一个或多个数组的积。例如362*2*3*3&#xff0c;即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律&#xff0c;现在给出一系列正整数&#xff0c;他希望你开发一个程序输出每个正整数的因子个数。 输入描述: 输入包括多组数据。 每组数…