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è)菜單欄的 客戶端 選項,再點擊新增。

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

設(shè)置好后點擊 新增 即可。

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

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

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

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

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

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

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

然后點擊 新增。

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

容器?;?/h2>
有時候運行的容器會自己掛掉,雖然不經(jīng)常發(fā)生,但是偶爾來一次,遇上剛好要用的時候就很煩人。
下載演示我在服務(wù)端如何讓容器?;畹?,方法比較粗暴但有效。
創(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,那你應(yīng)該知道要怎么區(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>') # 這里其實就是去匹配看看當(dāng)前運行中的容器有沒有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 服務(wù)掛了,這里重啟服務(wù)
docker restart nps
echo "Restart $(date +'%F %T')" >> $log
fi
else
echo "Active $(date +'%F %T')" >> $log
fi如果是服務(wù) docker 掛了,且重啟失敗,那就不是保不?;畹膯栴}了,登上服務(wù)器檢查吧。
crontab.set
創(chuàng)建一個 crontab.set,用來配置定時任務(wù)。這個文件就隨便放了,一次性的。
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)它就會重啟了。
如果你還配置了其他的定時任務(wù),那你應(yīng)該知道怎么設(shè)置 crontab,別把以前配置的任務(wù)給覆蓋了。
Docker的容器化技術(shù)為應(yīng)用的部署和管理帶來了很大的便利性,尤其是在內(nèi)網(wǎng)穿透這種需要部署多個應(yīng)用的場景下。本文介紹了如何使用Docker部署nps和npc實現(xiàn)內(nèi)網(wǎng)穿透,通過容器的隔離性和安全性,可以有效地保護應(yīng)用的安全性。同時,Docker的易用性和可擴展性也為應(yīng)用的管理和維護帶來了很大的便利性。
到此這篇關(guān)于Docker上部署 nps 和 npc 實現(xiàn)內(nèi)網(wǎng)穿透的文章就介紹到這了,更多相關(guān)Docker上部署 nps 和 npc內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
dockerfile中ENTRYPOINT與CMD的結(jié)合使用及區(qū)別
這篇文章主要介紹了dockerfile中ENTRYPOINT與CMD的結(jié)合使用,大家都知道CMD 與 ENTRYPOINT都是用于指定啟動容器執(zhí)行的命令,那么他們倆有什么區(qū)別呢,本文給大家詳細介紹,需要的朋友可以參考下2021-08-08
詳解基于docker搭建lanproxy內(nèi)網(wǎng)穿透服務(wù)
這篇文章主要介紹了詳解基于docker搭建lanproxy內(nèi)網(wǎng)穿透服務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04

