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)絡
中注意勾選使用與 Docker Host
相同的網(wǎng)絡。
再到高級設(shè)置->環(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)它就會重啟了。
如果你還配置了其他的定時任務,那你應該知道怎么設(shè)置 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-05supervisor下的Dockerfile的多服務鏡像封裝操作
這篇文章主要介紹了supervisor下的Dockerfile的多服務鏡像封裝操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Docker部署php運行環(huán)境(php-fpm+nginx)
Docker?是一種流行的容器化平臺,可以幫助開發(fā)人員快速創(chuàng)建、部署和管理容器化應用程序,本文將介紹如何使用?Docker?搭建?PHP?開發(fā)環(huán)境服務器,讓您能夠輕松地開始?PHP?開發(fā)工作,感興趣的可以了解一下2023-11-11