体育外围

當前位置: 首頁 > Linux運維 > Docker > Docker + Brook + Portainer搭建一套自己的端口轉發程序,帶WEB管理

Docker + Brook + Portainer搭建一套自己的端口轉發程序,帶WEB管理

發布于:2021-1-9 Docker 4條評論 2,868 views
如需VPS代購、PHP開發、服務器運維等服務,請聯系博主QQ:337003006

之前在博客已經介紹過幾款常用端口轉發程序,比如rinetdNginx Stream,今天繼續介紹的是另一個端口轉發程序brook relay,話不多說先看效果圖。

注意:以下內容需要對Docker使用有一定了解。

brook relay能干嘛?

先來看一段官方的介紹:

brook relay 可以中繼任何TCP和UDP server, 這是一個獨立的功能, 它不依賴brook server和brook wsserver等

請求 <--> relay server <--> 被中繼的server

不過Brook的功能遠不止如何,他還能干嘛,你懂的,有興趣的可以上官方文檔自行了解:,今天主要是介紹brook relay進行端口轉發。

為什么要使用Docker + Brook

Brook使用golang開發,作者已經打包好了二進制文件,安裝和使用已經非常簡單,簡單到只需要幾行命令即可完成端口轉發操作。來看看官方的演示命令,只需要簡單的一行即可完成:

#假設你的中繼服務器IP是 5.6.7.8, 那么你就可以訪問 5.6.7.8:9999等于訪問1.2.3.4:9999
brook relay -f :9999 -t 1.2.3.4:9999

既然官方命令已經足夠簡單,為啥還要運行在Docker之上,這不是脫了褲子放屁嗎?xiaoz總結了運行在Docker中的幾個好處。

  1. 當你要轉發多個端口時,brook relay管理不太方便
  2. 難以監控到每個端口轉發的內存、CPU、流量使用情況,而使用Docker天然支持對每個容器的監控
  3. 配合Portainer還可實現WEB界面管理(后面介紹)

在Docker中運行brook relay

既然已經了解了Brook運行在Docker中的優勢,那接下來就開始部署容器。xiaoz已將brook relay制作好了Docker鏡像,如果您已經安裝好Docker,輸入下面的命令可直接使用:

docker run -itd \
    --restart=always
    -e DIP="192.168.1.222" \
    -e DPORT="22" \
    -p 2293:9999 \
    helloz/brook-relay

解釋下上面命令的作用:

  • --restart=always:當容器出現異常是總是保持自動啟動
  • DIP="192.168.1.222":目標IP
  • -e DPORT="22":目標端口
  • -p 2293:9999:2293為你中繼服務器端口,可自行定義,9999為容器內部端口,這個不要修改,永遠保持默認即可

假設你中繼服務器IP為192.168.1.111,那么連接到192.168.1.111:2293相當于為您轉發到了192.168.1.222:22,用過端口轉發的同學,相信不難理解。

如果需要運行多個端口轉發,繼續復制上面的命令,并修改中繼端口、目標IP、目標端口即可。

安裝Portainer

Portainer是可視化容器管理工具,可以直接在WEB界面對Docker進行管理,安裝Portainer是可選的。為了實現WEB管理端口轉發,有需要的可以安裝Portainer,請繼續往下閱讀。

繼續在中繼服務器,復制以下命令安裝Portainer

#創建一個存儲
docker volume create portainer_data
#運行Portainer
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

然后訪問IP:9000打開Portainer界面,根據提示設置管理員賬號、密碼。

選擇Docker并進行連接。

進入后臺找到containers選項,可以看到所有容器,包括剛剛通過Docker命令創建的brook relay端口轉發。

下面繼續用Portainer來演示如何部署一個brook relay端口轉發容器。在Portainer左側找到containers,并點擊Add Container

按照下圖所示填寫

  • Name:容器名稱,隨便填寫
  • Image:填寫xiaoz打包好的鏡像名字:helloz/brook-relay:latest
  • host端口自行定義
  • container容器端口保持9999固定不變

還沒完,繼續往下拉,還需要填寫目標IP和目標端口。在Advanced container settings這個設置中,點擊ENV,并增加2行,按照下圖填寫。

  • DIP:為目標IP
  • DPORT:為目標端口

按照上方設置完畢后,點擊界面上的Deploy the container按鈕進行部署。部署成功即可在界面上看到我們剛剛創建好的容器。

點擊Stats按鈕,還可以對容器狀態進行監控,比如CPU、內存、流量使用情況。

可以看到brook relay閑時內存占用在5Mb左右,內存占用非常小。

總結

利用這個思路你可以將任意端口轉發程序,比如rinetd、nginx、socat打包為Docker鏡像,再結合Portainer實現WEB管理和狀態監控。

網上開源的端口轉發面板很難實現對CPU、內存、流量監控,而Docker可以原生支持。最后感謝以下開源項目:


4 條評論 “Docker + Brook + Portainer搭建一套自己的端口轉發程序,帶WEB管理”

  1. Tenbagger說道:

    大神,這個是類似nps的TCP隧道功能嗎。

    1. xiaoz說道:

      nps沒用過,應該都差不多吧。

  2. 天天忽悠說道:

    之前自己折騰了好久,博主這篇文章來太晚了…
    現在自己弄的Docker+Portainer,不過用的是nginx

    1. xiaoz說道:

      嗯,利用這個思路,用任意轉發軟件都可以。

發表評論