WireGuard を試してみました。2拠点(複数拠点)の Docker 環境をVPNで繋げてコンテナ同士をLANで繋げたいという動機からです。
VPNというと本店支店の拠点間接続とかリモートワークで家から会社へ繋げるといった用途が思いつきそうですが、ここでは Docker のコンテナのみを仮想LANで繋げる形です。
というわけで docker-compose としてまとめたものを github に置いてあります。
https://github.com/tr-takatsuka/wireguard-bridge-docker
用途としては、WebサービスのDBスレーブ(セカンダリ)を遠隔地に設置するとか、データのバックアップ先を別業者のクラウドサービスに置くとかを想定しています。
AWSとかが用意した仕組みに全てを依存する設計のものには向いてないかもですが、オンプレサーバーやコンテナレベルで運用してるようなケースでは選択肢になるかもと思います。昨今は「ランサムウェア」が流行語ノミネートもあり得そう(個人の妄想です)なほどにバックアップの重要性は増してそうですし・・。
WireGuard という新しめで且つデファクトになりそうなVPN技術を使って、小難しい設定はナシでとにかくネット越しのコンテナ同士を安全に繋げるならこんな感じかなーと思い作ってみました。
VPNの対象はコンテナのみとしているのでホストOSへの影響もほぼなく(--net=host にはしていない)、上位のルーターの設定変更なども不要。
鍵情報を分離し別ファイルにしてソース管理対象外にしたりと、使い勝手とセキュリティも考慮しています。
使い方などはコチラの README をご参照ください。
未練
- ものぐさな自分の目論見としては、compose.yaml に好きなコンテナをただ追記するだけでVPN先と通信できちゃうお手軽環境の構築だったのですが、そこまでは実現できておらず、各コンテナで route を追加するというひと手間が必要となっています。
当初はデフォルトゲートウェイをコンテナ(WireGuardコンテナ)へ向ければイケるハズだ!と軽く考えてたのですが Docker の network はそれが不可らしく断念。
他の解がないものかとAI様に質問攻めもしましたが見つけられず手詰まりでした。自分の無知っぷりに乾杯。
もしこのあたりの知恵をお持ちの方おられましたらご教示いただきたいです。
WireGuard って
- VPNとしては後発でかつlinuxカーネルに組み込まれてもいるので基盤技術としての安全性や将来性はたぶん問題なさそうです。
そして作りがとてもシンプルらしくサポートしてるプロトコルもUDPのみという割り切りっぷり。- 逆にいえばUDPが通らない環境だと使えない。と思うと HTTPS(TCP/443)でも通るSoftEtherの便利っぷりは未だに健在。感謝です。
- そしてユニークだなと思ったのは、WireGuard って内部的にはサーバークライアントの区別はなく、各端末(Peer)は全て同等という設計思想のあたり。
例えば NAT内の端末同士でもUDPホールパンチングなりで穴をあけることさえできれば接続が確立できるとか。
実際に試してはいませんが使い道の幅が広そうです。
| Page Info | |
|---|---|
| Page Name : | 技術系備忘録/Docker/WireGuard |
| Page aliases : | None |
| Page owner : | takatsuka |
| Can Read | |
| Groups : | All visitors |
| Users : | All visitors |
| Can Edit | |
| Groups : | No one |
| Users : | No one |
