Site cover image

Site icon imageshow tech >> log

ネットワークエンジニアというものをやりながらガジェットや新しいツール的なものが大好きでとりあえず試してみることが多い.そんなものなどを残していこうかなと >> log .ただそれだけのoutput置き場.

Post title iconHeadscaleをAzureで動かして見た

ネットワークを勉強するなら マスタリングTCP/IP がおすすめです

#show run


HeadscaleをAzureで動かして見た

TailscaleのOSSであるHeadscaleをAzureで動かして見ました.

少し構築してから時間が経っており,漏れあるかも…

https://github.com/juanfont/headscale

Azure側の準備

こんな感じの最小限のサーバを準備.

Image in a image block

あとは,パブリックIPの準備とセキュリティグループではポート制限(TCP80/443)をしっかりと.

Headscaleのインストール

パッケージの取得 https://github.com/juanfont/headscale

バージョンなどは適時変更してください.

wget --output-document=/usr/local/bin/headscale \
   https://github.com/juanfont/headscale/releases/download/v0.22.3/headscale_0.22.3_linux_amd64

実行権限の付与

chmod +x /usr/local/bin/headscale

構成ディレクトリ作成

mkdir -p /etc/headscale

データと証明書を保存するディレクトリの作成

mkdir -p /var/lib/headscale

空のSQLiteデータベース ファイルを作成

touch /var/lib/headscale/db.sqlite

構成ファイルのテンプレート取得

wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml

SystemDサービス構成ファイルを作成
/etc/systemd/system/headscale.service

[Unit]
Description=headscale controller
After=syslog.target
After=network.target

[Service]
Type=simple
User=headscale
Group=headscale
ExecStart=/usr/local/bin/headscale serve
Restart=always
RestartSec=5

# Optional security enhancements
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/headscale /var/run/headscale
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=headscale

[Install]
WantedBy=multi-user.target

headscale起動ユーザの作成

useradd headscale -d /home/headscale -m

所有者変更

chown -R headscale:headscale /var/lib/headscale

構成ファイル変更

unix_socket: /var/run/headscale/headscale.sock

SystemD をリロードして、新しい構成ファイルをロード

systemctl daemon-reload

自動起動

systemctl enable --now headscale

構成ファイル

/etc/headscale/config.yaml

以下を修正

server_url: https://利用するドメイン名

private_key_path: ./private.key

#- fd7a:115c:a1e0::/48

acme_email: "メールアドレス"

tls_letsencrypt_hostname: "利用するドメイン名"

acl_policy_path: "acl.yaml" # aclを記載したファイル

Microsoft365連携は以下で動いています.

oidc:
   only_start_if_oidc_is_available: true
   issuer: "https://login.microsoftonline.com/*******************e/v2.0"
   client_id: "*******************"
   client_secret: "*******************"

scope: ["openid"]
allowed_domains:
     - 利用するドメイン名
strip_email_domain: true

ACL

ACLは以下を参考に

https://github.com/juanfont/headscale/blob/main/docs/acls.md

端末の登録

以下を表示して,記載内容で登録.クライアントアプリは本家Tailscaleのものをインストールしてください.

  • https://ドメイン名/windows
  • https://ドメイン名/apple

macやiphoneは構成プロファイルのインストールが必要です. 接続先を独自のものに変更する形ですね.

仕組み的に,クライアント側で登録用コマンドを発行したものをサーバコンソールでコマンドを実行することで登録が完了になるため,ページの手順が公開されていても勝手に登録されることはありません.

OIDCを登録すると,ログインだけで自動登録されてました.便利.

とはいえ,私はどうしてもパブリックへ公開しているのでいろいろなサイトを参考に日本国内のIPからのみ利用可能なように制限をかけています.

この制限をかけるとLet's Encryptの証明書更新が失敗します.その時点でメールが来るので,一時的にファイアウォールを停止して再起動で更新しています.

使い方など以下に詳細が記載されています.

Icon in a callout block
show tech(config)#end
show tech#

ネットワークをAIさんと解説する