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

yizhihongxing

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> 登录后台管理界面了。
能够成功访问后,继续下面的步骤。

添加客户端

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

image

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

image

设置好后点击 新增 即可。

image

留意一下这里的 idvkey

本地机上运行 npc

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

拉取镜像

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

image

创建容器

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

image

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

image

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

  • SERVERIP
    对应云主机的 <ip>:<bridge_port>
  • VKEY
    对应上面添加过的客户端的 vkey

image

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

这时候在 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 -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)
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,别把以前配置的任务给覆盖了。

原文链接:https://www.cnblogs.com/yeungchie/p/17347921.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:[ Docker ] 部署 nps 和 npc 实现内网穿透 - Python技术站

(0)
上一篇 2023年4月24日
下一篇 2023年4月25日

相关文章

  • linux 下Apache设置与优化

    以下是“Linux下Apache设置与优化”的完整使用攻略,包含两个示例说明。 步骤 安装Apache服务器。在终端中输入以下命令: bash sudo apt-get update sudo apt-get install apache2 启动Apache服务器。在终端中输入以下命令: bash sudo service apache2 start 配置A…

    Linux 2023年5月13日
    00
  • Linux tload命令

    tload命令作用 tload是Linux系统下的一个命令,可以用来实时监测服务器负载情况,对系统进行性能和瓶颈分析。它提供了一张简洁直观的图表,可以展示当前系统负载的变化情况。 tload命令使用方法 使用tload命令非常简单,只需要在终端中输入tload即可。然后就会看到一个简洁的图表,包含了当前系统的平均负载、CPU利用率和空闲内存的情况。 此外,t…

    Linux 2023年3月28日
    00
  • 从面试官角度观察到的程序员技能瓶颈(突破瓶颈的建议)

    从面试官角度观察到的程序员技能瓶颈 在面试程序员的过程中,面试官往往能够从面试者的表现中观察出一些技能方面的瓶颈。以下是一些面试官可能会注意到的技能瓶颈,以及突破这些瓶颈的建议: 缺乏扎实的编程基础 在面试中,面试官可能会发现面试者对编程基础的掌握不够扎实,表现为对语言基础、代码规范、算法等方面的理解不够深入,也没有做到看到一道题目就能想到对应的算法实现(如…

    Linux 2023年5月24日
    00
  • Linux下安装SVN服务端的方法步骤

    要在Linux下安装SVN服务端,可以按照以下步骤操作: 1. 安装SVN服务端 在Linux中安装SVN需要使用软件包管理器进行安装,比如使用yum安装: sudo yum install mod_dav_svn subversion 安装完成之后,确认svn服务已经启动: systemctl status svnserve 2. 创建SVN仓库 在安装S…

    Linux 2023年5月14日
    00
  • 解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”

    在安装CentOS 8虚拟机时,如果出现错误信息:“Section %Packages Does Not End With %End. Pane Is Dead”,则意味着您的yum程序被损坏了,您需要重新安装或更换新的版本。下面给出了解决方案: 1.重新安装yum程序 可以通过以下步骤重新安装YUM: 1.1 开启CentOS 8虚拟机,并使用root账户…

    Linux 2023年5月24日
    00
  • linux检测磁盘读写速度

    环境:centos7 1、查看当前系统读写情况 yum -y install iotop #安装iotop工具 [root@demod ~]# iotop Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s Actual DISK READ: 0.00 B/s | Actual DISK WRIT…

    Linux 2023年4月15日
    00
  • docker部署gitlab CI/CD (一)第一篇:部署gitlab及汉化

      网上很多类似教程,但多少有点夹带私货,竟然拉取的第三方镜像,不敢乱用,于是结合其他人的博客和官方文档,结合部分作者的笔误踩的坑,知其然也要知其所以然,于2023年4月17日写下这篇。 官方文档:   https://docs.gitlab.com/ee/install/docker.html 主要参考博客:   https://www.cnblogs.c…

    Linux 2023年4月18日
    00
  • Linux 查看内存使用情况的几种方法

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/27UaVm5_FMhCnxB88pc0QA 在运行 Linux 系统的过程中为了让电脑或者服务器以最佳水平运行,常常需要监控内存统计信息。 那么今天我们就来看看有哪些方法可以访问所有相关信息并帮助管理员监控内存统计信息。 查…

    Linux 2023年4月20日
    00
合作推广
合作推广
分享本页
返回顶部