https://www.cnblogs.com/yeungchie/

云主机上运行 nps

创建映射目录

mkdir -p ~/docker/nps/config

拉取镜像

docker pull oldiy/nps-server

运行容器

创建容器

docker run -d --name nps --net=host -v /root/docker/nps/config:/nps/conf oldiy/nps-server

现在 nps 已经开始运行了。

停止运行容器

docker stop nps

为什么这里要停止运行呢?

因为这时候在 config 目录下已经生成了一些配置文件,考虑到安全性,我们需要做一些改动。

修改配置

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

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

...
bridge_port=8024 # 客户端连接端口
...
web_username=admin # 后台管理用户名
web_password=123 # 后台管理密码
web_port = 8080 # 后台管理端口
...

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

启动容器

docker start nps

现在可以在网页端访问 <ip_addr>:<web_port>,并通过用户名 <web_username> 和密码 <web_password> 登录后台管理界面了。

能够成功访问后,继续下面的步骤。

添加客户端

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

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

设置好后点击 新增 即可。

留意一下这里的 idvkey

本地机上运行 npc

本地机建议选择一台 7*24 小时运行的设备,一般是路由器或者 NAS ,我这里就选择群晖了,DSM 有很好用的 docker 图形化管理套件,所以下面用图形化界面演示如何部署 npc 。

拉取镜像

点击菜单栏中的注册表,搜索 npc-client,下载第一个就行。

创建容器

点击菜单栏中的映像,找到下载好的npc,启动。

高级设置->网络中注意勾选使用与 Docker Host 相同的网络。

再到高级设置->环境中修改两个环境变量:

  • SERVERIP

    对应云主机的 <ip>:<bridge_port>
  • VKEY

    对应上面添加过的客户端的 vkey

接着一路点击 应用,启动容器即可。

这时候在 nps 后台可以看到客户端已经在线。

后台配置 nps

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

添加 tcp 隧道

这里举例配置一下 Jellyfin 的 http 端口 8096

进入 nps 后台管理,点击左侧菜单栏的 客户端 选项,再点击新增。

  • 类型

    这里选 tcp 不用动它。
  • 备注

    随便填,方便自己记就行。
  • 服务器端口

    指外放访问端口,我这里跟 Jellyfin 内网一致了,这里只是为了演示用默认,等下就会改掉。
  • 目标

    指内网对应服务的地址和端口。
  • 客户端 id

    就是上面我说了要留意一下的 id,我这里是 3

然后点击 新增

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

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

尝试访问一下 Jellyfin。

容器保活

有时候运行的容器会自己挂掉,虽然不经常发生,但是偶尔来一次,遇上刚好要用的时候就很烦人。

下载演示我在服务端如何让容器保活的,方法比较粗暴但有效。

创建目录

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

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

获取容器 ID

docker ps -q --no-trunc

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

如果你返回了多个 ID,那你应该知道要怎么区分那个是 nps 的。

keepActive.sh

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

#!/bin/bash
cur=$(cd $(dirname $0); pwd -P)
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')" >> $cur/../log/log
else
echo "Failed $(date +'%F %T')" >> $cur/../log/log
systemctl restart docker.service # 重启失败大概率是 docker 服务挂了,这里重启服务
docker restart nps
echo "Restart $(date +'%F %T')" >> $cur/../log/log
fi
else
echo "Active $(date +'%F %T')" >> $cur/../log/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,别把以前配置的任务给覆盖了。

[ Docker ] 部署 nps 和 npc 实现内网穿透的更多相关文章

  1. linux之frp服务部署(内网穿透)

    frp服务部署(内网穿透) 目的 更快的进行内网穿透调试以及云端开发测试 服务器为CentOS 7,客户端为win11 frp介绍 frp 是一个开源项目, 采用 C/S 模式,将服务端部署在具有公网 ...

  2. 内网穿透工具--NPS

    一.简介 NPS是一款轻量级,高性能,强大功能的内网穿透代理服务器.目前支持TCP,UDP流量转发,可支持任何TCP,UDP上层协议(访问内网网站,本地支付接口调试,SSH访问,远程桌面,内网dns解 ...

  3. 内网穿透NPS

    内网穿透实现 nps文档 https://ehang-io.github.io/nps/#/install nps docker镜像 https://hub.docker.com/r/ffdfgdfg ...

  4. 一款带Web面板的轻量级、高性能内网穿透工具:nps使用教程

    说明:内网穿透工具之前已经介绍了不少了,比如Frp.lanproxy.Holer等,现在再介绍个带Web面板的穿透工具nps,之前叫easyProxy,只是改名了而已,该工具是一款使用go语言编写的轻 ...

  5. 内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】

    Ngrok为何物 “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放.”这是百度百科上给Ng ...

  6. Docker 18.03 Centos7.6 安装 内网

    首先访问https://download.docker.com/linux/centos/7/x86_64/stable/Packages/获取对应版本的rpm包docker包docker-ce-18 ...

  7. windows(Linux)创建”内网穿透“工具(通过自定义域名访问部署于内网的 web 服务,可以用于调试微信支付,支付宝支付,微信公众号等开发项目)

    此方法需要自有服务器和域名,如果没有这些的开发者, 可以参考钉钉提供的内网穿透方式:https://www.cnblogs.com/pxblog/p/13862376.html 一.准备工作 1.域名 ...

  8. Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问

    Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 ​ 关键词: frp内网 ...

  9. Ngrok 内网穿透神器(转载)

    mac上配置web服务: http://note.rpsh.net/posts/2013/11/27/osx-10-9-apache-server-php-mysql/ Ngrok 内网穿透神器 由于 ...

  10. ngrok内网穿透神器

    ngrok类似国内的花生壳,可以将本地的内网映射到公网上,这样就可以做web开发,微信开发了.下面就介绍下ngrok是怎么配置的吧. 方式一: 一.打开ngrok的官网https://ngrok.co ...

随机推荐

  1. B树、B+树详解

    B树.B+树详解   B树 前言 首先,为什么要总结B树.B+树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/+Tree作为索引结构(例如mysql的InnoDB引擎使用的B+树 ...

  2. 狂神的学习笔记demo04

    package com.company; public class demo04 { public static void main(String[] args){ int i=10;//二进制 in ...

  3. jxg项目Day1-配置

    1.搭建mysql与datagrip的连接(还未完成建表学习) 2.搭好项目框架:目前划分: maven我是直接复制的之前的两个项目的依赖,但是测试的时候遇到点问题:说数据库连不上,但是我明明已经配置 ...

  4. Navicat 连接MySQL数据库 报错2059

    Navicat 连接MySQL数据库 报错2059 - authentication plugin 'caching_sha2_password'的解决办法 2059 - Authentication ...

  5. Qt使用API实现鼠标点击操作

    前段时间,工作需要进行数据录入,每次都要点击3次按钮,想让鼠标自行点击,只要下位机接入,就自动点击按钮把数据读出,录入到服务端,并且进行检测,说干就干,没有经验,那只有面向百度编程. 根据查到的资料, ...

  6. idea开发使用外置tomcat配置

    1. 添加依赖 <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId> ...

  7. pycharm conmunity 2022.1没有mange repositories,只能使用命令方式修改镜像源(长期可信)

    https://blog.csdn.net/qq_43625764/article/details/124656990

  8. 微信小程序-实现微信登录

    业务流程: 1:首先需要一个按钮触发事件 2:调用微信小程序的登录接口wx.login,拿到code 3:调用微信小程序的获取用户信息的接口wx.getUserProfile,拿到用户的个人信息 4: ...

  9. SpringBoot整合RocketMQ案例实战

    一.概念 rocketMQ是一款典型的分布式架构下的中间件产品,使用异步通信方式和发布订阅的消息传输模型,具备异步通信的优势,系统拓扑简单,上下游耦合较弱,主要应用于异步解耦,流量削峰填谷等场景 二. ...

  10. 微软NewBing真是Niubility

    这是本人2012年的拙作:           晨兮,闻风雨,后而雷鸣电闪.迟不可再三,若故无食.然何如耶?雨大风狂,单车奈何?公交卡空,恐时不予我也.不免叹也,天亦不予我!         而后出, ...