Tailnet内の仲間にだけ特定のポートを公開する方法
Tailscale(実際にはHeadscale)の内の仲間にだけ、特定サービスの特定ポートを公開する方法をまとめておく。
tailscale0をtrustedにしておく
サーバにTailscaleクライアントをインストールすると、tailscale0という仮想NICが作成されるが、このNICをfirewalldのtrustedゾーンに入れておく。すると、ここに到着したリクエストは何もしなくてもサーバ内のポートに受け渡される。
firewall-cmd --add-interface=tailscale0 --zone=trusted
firewall-cmd --runtime-to-permanent
trustedゾーンに個別のサービスを追加する必要はない。例えば、以下のような操作は不要。
firewall-cmd --add-service=ssh --zone=trusted
cockpitの場合
cockpitを利用したい場合に、通常は、publicゾーンに9090ポートを公開して、「どこからでも」アクセスできるようにするが、そんな必要は無くなる。全く何もしなくともtailnet内からは、tailscale0を経由してcockpitの9090番ポートにアクセスできる。したがって、もしpublicゾーンに公開設定のある場合は削除しておく。
firewall-cmd --remove-service=cockpit --zone=public
firewall-cmd --runtime-to-permanent
dockerコンテナの場合
Traefikを経由して80, 443番を公開している場合の対処方法は難しいかもしれない。つまり、80番、443番のポートはデフォルトではTraefik側がpublicに公開してしまうため、特定のウェブサイトのみをTailnet内に公開することは難しいと思われる(後述)。
しかし、それ以外の独自のポートを利用している場合は簡単だ。
TailnetでのこのサーバのIPアドレスは固定しているため、そのIPアドレスでのみ接続を受け付ければよい。この方法は、Docker-composeにおける.envファイルの無意味さに書いた通りで、env.file(名前は何でもよい)にTailnet上のIPアドレスを書いておき、各コンテナはそのアドレスをリッスンするようにする。
Tailnet内でのみ閲覧可能なウェブサイトを作る
この一つの方法としては、Tailscaleの提供するDNSを用いることだ。例えば、100.64.0.3というアドレスにwp-intという名前を付けておき、「http://wp-int」でアクセスする。このURLは外からはアクセスできないし、SSLも不要だ。
仮にTraefikにリクエスト側のIPアドレス制限機能があったとしても(有無を調べていないが)無駄である。なぜなら、あるドメインexample.comをこのサーバのIPに向けてそのドメインでアクセスした場合、TailnetのIPからではなく、一般のIPからアクセスしてしまうからだ。
ディスカッション
コメント一覧
まだ、コメントがありません