🌏

LXC + Tailscale でお手軽 VM イントラネットを作る

2025/02/25に公開

脱・SSH 鍵管理。

tl;dr

  • LXC を使えば VM っぽい軽量コンテナを死ぬほど動かせるわよ
  • LXC コンテナに Tailscale をぶち込めば SSH 鍵管理フリーでコンテナにアクセスできるわよ

前文

やること

Tailscale が勝手に管理してくれる SSH 鍵を使ってコンテナに SSH セットアップフリーでアクセスしてやろうというのが本題です。以下手順。

  1. LXC でコンテナを生やす
  2. LXC コンテナに Tailscale をインストールする
  3. SSH でコンテナにアクセスする

LXC って何?

LXC (Linux Containers) は数あるコンテナ技術の一つであり、VM っぽい使い心地でありながらコンテナ並みに軽いという長所を併せ持った都合の良い奴。

Tailscale って何?

超お手軽 VPN サービス。イントラネットを秒で作れる上に、Cloudflare Tunnel みたいな HTTPS サービス公開機能(Tailscale Funnel)やマネージドな SSH 鍵管理(Tailscale SSH)もやってくれる至れり尽くせりな優れもの。

セットアップ

前提

  • Ubuntu 24.04
  • Tailscale のアカウントはセットアップされているものとする

LXC コンテナを生やす

LXC のインストールから VM に接続するところまで。

# LXC を入れる
apt install lxc

# CPU コア数とメモリ制限はお好みで
lxc launch ubuntu:24.04 test --vm -c limits.cpu=4 -c limits.memory=4GiB

# VM に bash で接続する
lxc exec test bash

LXC コンテナで Tailscale を立ち上げる

# Tailscale をインストール
curl -fsSL https://tailscale.com/install.sh | sh

# SSH モードで Tailscale デーモンを起動
tailscale up --ssh

以下のようなリンクがでてくるので、リンクを踏んで VM を認証させる。

To authenticate, visit:

        https://login.tailscale.com/a/*********

SSH アクセスする

アクセス元で Tailscale を立ち上げてネットワークに入っておく。VM で Tailscale が立ち上がっていれば、名前の衝突がない限りは VM の名前がそのままホスト名になるので、ssh で VM ホスト名をを指定して接続すれば良い。

ssh test

終わりに

あっさり終わってしまった。

SSH 鍵も必要とせず、Tailscale ネットワークに入っていれば名前解決も勝手にやってくれるので ssh コマンド一つで VM に入れてしまう。さらに LXC なら軽量なコンテナをいくらでも建てられるので、例えばボット用 VM だったりちょっとしたテスト環境を立てたりするときにとても役に立つ。良い時代になったものである。

Discussion