Docker上部署?nps?和?npc?實現(xiàn)內(nèi)網(wǎng)穿透
云主機上運行 nps
創(chuàng)建映射目錄
mkdir -p ~/docker/nps/config
拉取鏡像
docker pull oldiy/nps-server
運行容器 創(chuàng)建容器
docker run -d --name nps --net=host -v /root/docker/nps/config:/nps/conf oldiy/nps-server
現(xiàn)在 nps 已經(jīng)開始運行了。
停止運行容器
docker stop nps
為什么這里要停止運行呢?
因為這時候在 config 目錄下已經(jīng)生成了一些配置文件,考慮到安全性,我們需要做一些改動。
修改配置
vim /root/docker/nps/config/nps.conf
打開后重點關(guān)注下面這幾項:
... bridge_port=8024 # 客戶端連接端口 ... web_username=admin # 后臺管理用戶名 web_password=123 # 后臺管理密碼 web_port = 8080 # 后臺管理端口 ...
以上是默認的配置,建議改掉。
啟動容器
docker start nps
現(xiàn)在可以在網(wǎng)頁端訪問 <ip_addr>:<web_port>,并通過用戶名 <web_username> 和密碼 <web_password> 登錄后臺管理界面了。
能夠成功訪問后,繼續(xù)下面的步驟。
添加客戶端
點擊左側(cè)菜單欄的 客戶端 選項,再點擊新增。

設置一個 客戶端驗證密鑰,這里可以隨便填。壓縮、加密愿意的話也可以選 yes。

設置好后點擊 新增 即可。

留意一下這里的 id 和 vkey。
本地機上運行 npc
本地機建議選擇一臺 7*24 小時運行的設備,一般是路由器或者 NAS ,我這里就選擇群暉了,DSM 有很好用的 docker 圖形化管理套件,所以下面用圖形化界面演示如何部署 npc 。
拉取鏡像
點擊菜單欄中的注冊表,搜索 npc-client,下載第一個就行。

創(chuàng)建容器
點擊菜單欄中的映像,找到下載好的npc,啟動。

在高級設置->網(wǎng)絡中注意勾選使用與 Docker Host 相同的網(wǎng)絡。

再到高級設置->環(huán)境中修改兩個環(huán)境變量:
SERVERIP
對應云主機的 <ip>:<bridge_port> VKEY
對應上面添加過的客戶端的 vkey

接著一路點擊 應用,啟動容器即可。
這時候在 nps 后臺可以看到客戶端已經(jīng)在線。

后臺配置 nps
前面部署 nps 時候已經(jīng)配置了一部分了,接下來要配置的就是具體需要穿透的端口了。
添加 tcp 隧道
這里舉例配置一下 Jellyfin 的 http 端口 8096。
進入 nps 后臺管理,點擊左側(cè)菜單欄的 客戶端 選項,再點擊新增。

類型
這里選 tcp 不用動它。 備注
隨便填,方便自己記就行。 服務器端口
指外放訪問端口,我這里跟 Jellyfin 內(nèi)網(wǎng)一致了,這里只是為了演示用默認,等下就會改掉。 目標
指內(nèi)網(wǎng)對應服務的地址和端口。 客戶端 id
就是上面我說了要留意一下的 id,我這里是 3。

然后點擊 新增。

這樣一條隧道就添加好了。
至此內(nèi)網(wǎng)穿透算是部署好了。
嘗試訪問一下 Jellyfin。

容器?;?/h2>
有時候運行的容器會自己掛掉,雖然不經(jīng)常發(fā)生,但是偶爾來一次,遇上剛好要用的時候就很煩人。
下載演示我在服務端如何讓容器保活的,方法比較粗暴但有效。
創(chuàng)建目錄
創(chuàng)建目錄來存放腳本和日志文件。
mkdir -p /root/docker/nps/script
mkdir -p /root/docker/nps/log
獲取容器 ID
docker ps -q --no-trunc
會得到一長串 ID,記下來 <nps_id>。
如果你返回了多個 ID,那你應該知道要怎么區(qū)分那個是 nps 的。
keepActive.sh
創(chuàng)建 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
創(chuàng)建一個 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 掛了,一分鐘內(nèi)它就會重啟了。
如果你還配置了其他的定時任務,那你應該知道怎么設置 crontab,別把以前配置的任務給覆蓋了。
Docker的容器化技術(shù)為應用的部署和管理帶來了很大的便利性,尤其是在內(nèi)網(wǎng)穿透這種需要部署多個應用的場景下。本文介紹了如何使用Docker部署nps和npc實現(xiàn)內(nèi)網(wǎng)穿透,通過容器的隔離性和安全性,可以有效地保護應用的安全性。同時,Docker的易用性和可擴展性也為應用的管理和維護帶來了很大的便利性。
到此這篇關(guān)于Docker上部署 nps 和 npc 實現(xiàn)內(nèi)網(wǎng)穿透的文章就介紹到這了,更多相關(guān)Docker上部署 nps 和 npc內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker-compose部署etcd集群的實現(xiàn)步驟
本文主要介紹了docker-compose部署etcd集群的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
詳解Docker Swarm服務發(fā)現(xiàn)和負載均衡原理
這篇文章主要介紹了詳解Docker Swarm服務發(fā)現(xiàn)和負載均衡原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
supervisor下的Dockerfile的多服務鏡像封裝操作
這篇文章主要介紹了supervisor下的Dockerfile的多服務鏡像封裝操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Docker部署php運行環(huán)境(php-fpm+nginx)
Docker?是一種流行的容器化平臺,可以幫助開發(fā)人員快速創(chuàng)建、部署和管理容器化應用程序,本文將介紹如何使用?Docker?搭建?PHP?開發(fā)環(huán)境服務器,讓您能夠輕松地開始?PHP?開發(fā)工作,感興趣的可以了解一下2023-11-11

