天天看點

sockfwd 一個資料轉發的小工具

最近在看containerd的代碼,上手試的時候才發現它監聽的是unix socket,沒法從外部通路containerd。

而我要驗證的是從遠端能不能通路containerd、管理containerd的容器,是以需要一個從遠端通路unix socket的工具。

網上搜了一圈,沒有現成的實作,就自己寫了

sockfwd

用法

Usage:
  sockfwd [flags]

Flags:
  -d, --destination string   目的位址,即要轉發到的位址
  -s, --source string        源位址,即接收請求的位址
  -q, --quiet                靜默模式           

例子

将本地的containerd執行個體暴露到網絡上:

./sockfwd -s tcp://127.0.0.1:8090 -d unix:///var/run/containerd.sock

将本地的

127.0.0.1:8080

端口暴露到

0.0.0.0:8090

端口上:

./sockfwd -s tcp://127.0.0.1:8090 -d unix://127.0.0.1:8090

将本地的服務暴露到網絡上,需要格外注意是否有安全隐患!

其他碎碎念

最近在寫golang,發現如果僅僅是處理資料面的話,golang提供的goroute再加channel就能夠很優雅地處理資料轉發,比如這篇文章寫的sockfwd。

但是如果涉及管控面,比如複雜的狀态管理,資訊跨線程/goroute同步,那麼channel的抽象能力還是不夠的,需要寫很多額外代碼。

後續計劃

可以加上支援tls認證來更加安全地轉發資料。