Overlay networkの暗号化
Dockerにはoverlay networkと呼ばれる機能が実装されており、複数のDockerホスト上にあるコンテナを同一のネットワークに参加させることができます。Overlay network上の通信はデフォルトでは暗号化されていないのですが、ネットワークの作成時に--opt encrypted
を付けることで暗号化を有効にすることができます。
docker network create --opt encrypted --driver overlay --attachable example-overlay-network
Overlay networkに使われるプロトコル
Overlay network上のデータががホスト間でやりとりされる際に使われるIP protocolは暗号化の有無によって異なっており、暗号化が無効のときはUDP、有効のときはESP (IP protocol 50)が使われます。
残念ながらTailscaleが対応しているIP protocolはICMPv4, ICMPv6, TCP, UDP, SCTPのみで、ESPには対応していません。そのため、暗号化されたoverlay network上の通信は全てdropされてしまいます。
解決策
見つかっていません。Overlay networkの暗号化を諦めるか、TailscaleをforkしてESP対応を追加するしかないのではないでしょうか。
そもそもTailscaleノード間の通信はWireguardで暗号化されているので、overlay networkの暗号化は多くのケースで不要ではないかと思われます。
謝辞
Tailscaleでサポートされているプロトコルについては、こちらの記事を参考にさせていただきました。