本記事では仮想サーバー「Proxmox」上に軽量コンテナLXCを使って「tailscale」環境を構築していきます。
これにより、常時起動している(前提の)Proxmox仮想サーバー上に軽量なtailscale環境を動かすことで、いつでも外出先から自宅のネットワーク環境へ接続できるようになります。
外出先から自宅のファイルサーバーへアクセスしたりスマホの写真・動画をアップロードしたり、赤ちゃんやペットの見守りカメラを見たり・・・という自宅でできることと同じことを外出先からもできるようになります。
仮想サーバーをtailscaleゲートウェイとして使う
Proxmoxを使えばVMWare ESXiと同等(か、それ以上)の仮想サーバー環境を構築することができます。
一台のProxmoxサーバー内にTrueNASなどさまざまなサーバーを構築し、自宅に写真・動画などを共有管理できるメディアサーバーを構築することもできます。
本記事では、この仮想サーバー環境内に軽量コンテナ環境「LXC(Linuxコンテナ)」を使って簡単にtailscaleというVPNサーバーを構築していきます。
このtailscaleの機能により、いつでも外出先からProxmoxサーバーだけでなく自宅ネットワーク全体へ自由に(自宅にいる時と同様に)自宅内ネットワークを利用できるようになります。
tailscaleとは
tailscaleとは最新のVPNプロトコル「WireGuard」を使って「いつでもどこからでも、そしてどんなネットワーク環境でもVPN接続できる」仕組みを提供してくれるサービスです。
tailscaleの利用にはtailscaleへの利用者登録が必要です。
tailscaleは大規模ネットワークに対して有料プランを提供していますが、個人が利用する範囲においてはほぼ無料プランで十分です。
本記事でもtailscaleの無料プランを利用して環境構築していきます。
仮想サーバー(Proxmox)上に構築
tailscaleを使えばだれでも簡単に外出先から自宅ネットワークへアクセスできる仕組みを構築することができます。
ただし(当然ですが)自宅内でtailscaleが常時稼働していなければなりません。
本記事では仮想環境「Proxmox」サーバー内に、小さな仮想マシンを構築しその中でtailscaleを動作させることで「いつでも外出先から自宅ネットワークへアクセスできる」仕組みとします。
LXCコンテナで構築
仮想サーバーでも物理的なパソコンでもtailscaleが動いていればいつでも外出先から自宅ネットワークへアクセスすることができます。
本記事では仮想サーバー「Proxmox」が常時稼働サーバーとして動いている前提で、Proxmox上で動く軽量なコンテナ「LXCコンテナ」を使ってtailscaleを動かしていきます。
仮想サーバー「Proxmox」は標準でLXC動作環境を提供しており、また簡単にコンテナ環境をセットアップできるテンプレート機能もあります。
この機能を使って、以下の手順で「仮想サーバー(Proxmox)へtailscale環境を構築」していきます。
- STEP1テンプレートのダウンロード
- STEP2テンプレートからコンテナ環境の構築
- STEP3コンテナ環境へtailscaleをインストール
なお、本記事では使用するコンテナテンプレートとして「Debian-12-standard」」を使用します。
このテンプレートはProxmoxプロジェクトがLXCテンプレートとして配布している「ただのDebian(bookworm)」環境です。
Linux Container | Proxmoxプロジェクト
仮想環境へ簡単導入できる機能をテンプレート化して提供しているのが「Debian-12-standard」であり、中身はDebianです。
つまり「Debian環境を構築してtailscaleをインストール」という流れになります。
本記事の前提条件
本記事ではProxmoxサーバー環境に軽量コンテナLXC環境を構築、さらにその環境にtailscaleをインストールしていきます。
Proxmoxの基本操作については詳しく手順説明していません。
よって「Proxmoxを触ったことがない」という方を対象としていません。
ある程度のProxmoxの操作はできる、という前提で手順説明していきます。
また、すでにProxmox環境は構築済である前提で説明していきます。
tailscale環境構築の準備作業
Proxmox上にコンテナ環境を構築する前にtailscaleを使うための準備作業を行います。
tailscaleのサービスを利用するためには、利用者登録が必要です。
tailscaleでは企業向けに有料プランを提供していますが、個人利用の範囲においては個人向けの無料プランで十分です。
tailscale利用者登録
tailscaleのサービスを利用するためにはtailscaleへの利用者登録が必要です。
有料で提供されるプランもありますが個人利用の範囲においては無料プランで十分なので、無料プランで利用者登録をしておきましょう。
tailscale利用者登録 | tailscaleプロジェクト
tailscaleの利用者登録は以下のアカウントを使って登録することができます。
- Googleアカウント
- Microsoftアカウント
- GitHubアカウント
- Apple ID
- OICDアカウント
クライアントアプリのインストール
tailscaleの機能を使って外出先のデバイスから自宅ネットワークへ接続するためには、外出先で使うデバイスおよび自宅内にtailscaleアプリがインストールされ、さらにそのアプリが(先ほど作成した)tailscale利用者画面(tailscaleコンソール)に登録されている必要があります。
本記事では「自宅内で稼働するtailscale環境の構築」について説明していきますが、外出先で使う想定のデバイスにはそれぞれtailscaleアプリをインストールし登録しておきましょう。
tailscaleクライアントアプリ・ダウンロード | tailscaleプロジェクト
- Windowsアプリ
- Macアプリ
- Linuxアプリ
- iOSアプリ
- Androidアプリ
STEP① ProxmoxへLXCコンテナをインストール
まず、仮想サーバーProxmox環境へLXCコンテナとして「Debian-12-Standard」をインストールします。
Docerがアプリケーションコンテナと言われているのに対し、LXCコンテナはOSコンテナとも言われます。
LXCコンテナは仮想マシン(VM)とほぼ同等のOS環境を非常に軽量なコンテナとして構築できます。
そして、Debian12(Bookworm)のLXCコンテナ版が「Debian-12-Standard」テンプレートとなります。
LXCコンテナのインストール
Proxmoxサーバー環境へ「Debian-12-Standard」をインストールしていきます。
Proxmoxは標準でLXCコンテナ環境に対応しており、さまざまなLXCテンプレートからLXCコンテナを構築することができます。
コンテナテンプレートの更新
まず、Proxmoxが対応しているLXCコンテナ環境で利用可能なLXCテンプレートのリストを最新化しておきましょう。
メニュー「ノード(自分のサーバー)⇒シェル」からテンプレートのアップデートコマンドを発行しておきます。
以下のような実行結果となります。
root@sbpve01:~# pveam update
update successful
root@sbpve01:~#
以上でProxmoxのLXCコンテナテンプレートリストは最新化されます。
LXCコンテナテンプレートのダウンロード
メニュー「ストレージ(local)⇒CTテンプレート」から「テンプレート」ボタンを押下します。
Proxmoxで利用可能なLXCコンテナテンプレートの一覧が表示されます。
検索欄に「debian」を入力すると、一覧が絞り込まれて「Debian 12 Bookworm(standard)」が表示されます。
種別 | パッケージ | 説明 |
---|---|---|
lxc | Debian-12-standard | Debian 12 Bookworm(standard) |
上記「debian-12-standard」を選択して「ダウンロード」ボタンを押下します。
「TASK OK」のメッセージが出たらダウンロード処理が終了しています。
ダウンロードが終了したら画面右上の「×」をクリックしてダウンロード画面を閉じます。
テンプレートの一覧画面に今ダウンロードしたテンプレートが登録されています。
LXCコンテナのインストール
ダウンロードしたテンプレートを使って「debian-12-standard」をインストールしていきます。
ProxmoxでのLXCコンテナインストールはウィザード形式で行っていきます。
画面上部(右上)から「CTを作成」を押下します。
全般:コンテナウィザード①
コンテナ作成ウィザードの「全般」タブが表示されます。
以下のように入力してください。
ノード | 初期値のまま |
---|---|
CT ID | 初期値のままでよい ※またはお好きなID |
ホスト名 | 構築するコンテナのホスト名を指定 ※本記事では”v-tailscale” |
非特権コンテナ | チェック |
ネスト | チェック |
リソースプール | 未指定 |
パスワード | コンテナへログインするときのパスワード |
パスワードの確認 | パスワードと同じものを入力 |
ssh Public Key | 未指定 |
入力したら「次へ」。
テンプレート選択:コンテナウィザード②
「テンプレート」タブが表示されます。
先ほどダウンロードした「debian-12-standard」を選択してください。
ディスク:コンテナウィザード③
「ディスク」タブが表示されます。
ディスクを作成するストレージを選択し、「次へ」。
CPU:コンテナウィザード④
「CPU」タブ画面が表示されます。
CPUスペックを設定します。
後から変更できるので、ここでは「1 Core」として設定します。
メモリ:コンテナウィザード⑤
「メモリー」タブ画面が表示されます。
メモリーも後から変更可能なので、ここでは「512 MB」と設定します。
※もっと小さく「128 MB」でもよかったです・・・
ネットワーク:コンテナウィザード⑥
「ネットワーク」タブ画面が表示されるので、LXCコンテナのネットワーク設定(IPアドレス)を行います。
我が家の自宅ネットワークは「192.168.11.0/24」としており、今回のtailscaleサーバー(debian-12-standard)のIPv4アドレスは「192.168.11.3/24」と設定しました。
また、IPv6アドレスは利用しません。
本記事では以下のように設定しました。
IPv4 アドレス |
IPv4 | 「静的」をチェック |
---|---|---|
IPv4/CIDR | LXCコンテナのIPv4アドレスを設定 ※本記事では「192.168.11.3/24」 |
|
ゲートウェイ (IPv4) |
自宅ネットワークのゲートウェイを設定 ※本記事では「192.168.11.1/24」 |
|
IPv6 アドレス |
IPv6 | 「静的」をチェック |
IPv6/CIDR | IPv6アドレスは使用しないので空白のまま | |
ゲートウェイ (IPv6) |
IPv6アドレスは使用しないので空白のまま |
なお、IPv4アドレス(IPv4/CIDR)をDHCPとして設定することも可能ですが、DHCPからIPv4アドレスを取得する設定の場合はLXCコンテナ起動時にかなり時間がかかります。
よって、「DHCP」を選択しない方が良いです。
DNS:コンテナウィザード⑦
「DNS」タブ画面が表示されます。
初期値のままで「次へ」。
確認:コンテナウィザード⑧
「確認」タブ画面が表示されます。
設定した内容を確認し「完了」ボタンを押下。
しばらくコンテナ作成のタスクが実行されます。
「TASK OK」が表示されたらコンテナ作成完了です。
LXCコンテナの起動と初期設定
メニュー「データセンター⇒LXCコンテナ」に今作成したコンテナが一覧表示されています。
では、このコンテナを起動してみます。
サブメニュー「コンソール」を選んで画面上の「開始」ボタンを押下すると、コンソール画面上でコンテナが起動します。
rootユーザーでログインします。パスワードはコンテナ作成時に「全般」タブで設定したパスワードです。
モジュールの最新化
ログインしたら、最初にDebianのモジュールを最新化しておきましょう。
root@v-tailscale:~# apt update && apt -y upgrade
以上でDebian(debian-12-standard)のモジュールが最新化されます。
タイムゾーン(Asia/Tokyo)の設定
インストール直後のLXCはタイムゾーンが世界標準時となっています。
これを「Asia/Tokyo」へと変更設定しておきます。
### TimeZoneを"Asia/Tokyo"へ設定 ###
timedatectl set-timezone Asia/Tokyo
以上でタイムゾーンが「Asia/Tokyo」になります。
引き続き、作成したLXCコンテナ(Debian)へtailscaleモジュールをインストールしていきます。
STEP② LXCコンテナへtailscaleをインストールする
ここまでの作業でProxmox上へLXCコンテナとしてDebianをインストールすることができました。
引き続き、ここからはDebianコンテナ環境へtailscaleの環境を構築していきます。
コンテナ定義ファイルの編集
tailscaleアプリケーションはホスト(この場合はProxmoxサーバー)のネットワークにアクセスする必要がありますが、LXCコンテナは通常「非特権モード」で動作するためここまでの手順ではtailscaleアプリがネットワークアクセスできません。
この制限を回避するために、作成したLXCコンテナの定義ファイルにおまじないを追記する必要があります。
LXCコンテナの定義ファイルはホスト(Proxmoxサーバー)の「/etc/pve/lxc」ディレクトリに「{コンテナID}.conf」という名前で作成されています。
※LXCコンテナではなくホスト(proxmox)のディレクトリになります。
本記事で作成したコンテナIDは”100″なので、修正すべきLXC定義ファイルのパスは「/etc/pve/lxc/100.conf」となります。
この定義ファイルを編集します。
なお、この定義ファイル編集作業の前に、コンテナは停止しておいてください。
以下はviエディタで100.confを開くまでのコマンドです。
root@sbpve01:~# cd /etc/pve/lxc
root@sbpve01:/etc/pve/lxc# vi ./100.conf
定義ファイルの末尾に以下の2行を追記し、編集を終了します。
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
編集後の定義ファイルは以下の内容になっているはずです(赤字部分)。
root@pve01:/etc/pve/lxc# cat 100.conf
#tailscale
arch: amd64
cores: 1
features: nesting=1
hostname: v-tailscale
memory: 256
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=BC:24:11:1A:F4:46,ip=dhcp,ip6=dhcp,type=veth
onboot: 1
ostype: debian
rootfs: local-lvm:vm-100-disk-0,size=8G
swap: 256
unprivileged: 1
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
root@pve01:/etc/pve/lxc#
以上で、コンテナ定義ファイルの修正は完了です。
定義ファイルを修正したら、コンテナを起動しておいてください。
ネットワーク定義の変更
コンテナ定義ファイルの修正が終わったら次にコンテナのネットワーク定義を変更します。
tailscaleが今回構築するサーバーを使って自宅ネットワーク全体へアクセスするために「IPフォワーディング」を許可する必要があります。
これはtailscale LXCコンテナのコンソール画面から「/etc/sysctl.conf」ファイルを編集します。
root@v-tailscale ~# cd /etc
root@v-tailscale /etc# vi sysctl.conf
以下の赤字行の先頭コメントを削除して各行(2行)を有効化します。
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6
# Enabling this option disables Stateless Address Autoconfiguration
# based on Router Advertisements for this host
net.ipv6.conf.all.forwarding=1
修正したらコンテナを再起動しておきます。
tailscaleインストール
では、いよいよLXCコンテナにtailscaleモジュールをインストールしていきます。
tailscaleの公式サイトには各種デバイスのOSごとにインストール方法やアプリのダウンロードが説明・提供されています。
上記「Linux」のインストール方法として、以下のインストールシェルが提供されています。
curl -fsSL https://tailscale.com/install.sh|sh
上記のtailscaleインストールコマンドをコンテナのコンソール画面より投入します。
tailscaleのインストールは短時間で終了します。
終了したらコンテナへインストールしたtailscaleをtailscaleサービスへ登録します。
サービス登録は以下のようなコマンド(tailscale upコマンド)で行います。
tailscale up --advertise-routes=192.168.11.0/24 --advertise-exit-node --accept-routes
上記のパラメーターを説明します。
パラメーター | 説明 |
---|---|
–advertise-routes | 自宅ネットワークのサブネットアドレスを指定します。 |
–advertise-exit-node | 自宅ネットワークをExitNodeとする場合に指定します。 ※ExitNodeにしないなら指定不要 |
–accept-routes | –advertise-exit-nodeとセットで指定します。 |
上記の「tailscale upコマンド」をコンテナのコンソール画面から投入します。
「advertise-routes」とは?
「advertise-routes」とはVPN接続をtailscaleがインストールされているサーバーアクセスだけでなく、自宅ネットワーク全体へアクセスできるようにする仕組みです。
「advertise-routes=192.168.1.0/24」など、自宅ネットワークのサブネットをパラメーターとすることで、外出先からは今回tailscaleをインストールしたDebian-12-Standardだけでなく、その他のネットワーク機器へもアクセスできるようになります。
つまり、tailscaleのVPN接続を使って外出先からも自宅にいるときと同じようにネットワークが利用できるようになる、というパラメーターです。
「advertise-exit-node」とは?
外出先のパソコンやスマホから自宅へtailscaleによるVPN接続している状態において、インターネットへの出口も自宅の回線を使うための仕組みです。
例えば外出先でフリーのWi-Fiなど「信頼できないネットワーク」を利用している場合、自宅へVPN接続(暗号化通信)したままインターネットへの接続もそのまま自宅の回線から出ていく仕組みです。
この仕組み(advertise-exit-node)が有効な場合、外出先のスマホやパソコンではExit-nodeを選択することができるようになります。
※つまり、外出先での回線が「信頼できる回線」であればそのまま(Exit-node = OFF)、「信頼できない回線」であれば自宅回線(Exit-node = ON)という使い方ができます。
tailscaleコンソールの設定
tailscale LXCコンテナのコンソール画面より「tailscale up」コマンドを投入すると以下のような画面となります。
画面に「https://login.tailscale.com/a/**********/」というURLが表示されます。
このURLをブラウザへ入力しtailscaleサービスへログインすることで、今回構築するtailscaleサーバーがtailscaleサービスへ登録される仕組みになっています。
URLをブラウザへ入力するとtailscaleサービスへのログイン画面が表示されるので、サービス登録しているアカウントでログインします。
ログインすると「Connect」画面が表示されるので「Connect」ボタンを押下。
「ログイン成功」の画面が表示されるので、画面下の「Visit the console」のリンクをクリックしてtailscaleコンソールへ移動します。
登録したtailscale(本記事では「v-tailscale」)がtailscaleコンソールへ登録されてます。
登録したtailscaleの右端「…」のメニューから「Edit routes settings…」を選びます。
「Subnet routes」と「Exit node」の2つのチェックを行い「Save」。
以上でtailscaleコンソールでの設定は完了です。
また、以上でtailscale環境構築のすべての作業が完了しました。
動作確認
まとめ、仮想サーバーをVPNゲートウェイにする
tailscaleを使えば自宅固定回線がホームルーターなどのプライベートIPv4アドレスを使ったインターネット環境でも外出先から自宅へVPN接続ができるようになります。
自宅に仮想環境を構築し、そこへtailscaleを動作できる環境を作ることで、常時起動しているVPNサーバーとすることが可能、いつでも外出先から自宅ネットワークへ接続できるようになります。
そして、仮想環境がProxmoxであれば軽量コンテナである「LXCコンテナ」での構築がおすすめです。
外出先からいつでもアクセス
tailscaleは本当に簡単にVPN環境を構築することができるソリューションサービスです。
面倒な経路情報設定など不要、自宅ルーターのポート開放なども一切不要、そして超高速プロトコル「WireGuard」を使っていながらWireGuardのちょっと面倒な暗号鍵の管理からも解放されます。
tailscaleを使えばたとえ自宅回線がホームルーターやIPv4 over IPv6などのプライベートIPv4アドレス環境であってもVPN環境を構築することができます。
いままで回線環境の問題で自宅VPNの構築をあきらめていたから、tailscaleを使えば簡単にいつでも外出先から自宅ネットワークへ接続できる「リモートアクセスVPN」の環境を構築することができます。
さらにtailscaleで拠点間(Site-to-Site)VPN
tailscaleを使えばリモートアクセスVPNの利用形態だけでなく、離れた場所の複数のネットワーク同士をVPN接続する「拠点間(Site-to-Site)VPN」の環境も簡単に構築できます。
本来、拠点間(Site-to-Site)VPNとは企業の「本社と支社のネットワークをつなげる」形態であり、例えば「自宅と実家(帰省先)のネットワークをつなげる」「自宅と仕事場のネットワークをつなげる」という環境になります。
拠点間(Site-to-Site)VPNを構築することで、デバイス(PCやスマホ)ごとにtailscaleアプリケーションをインストールしなくても自由に離れた場所のネットワークへアクセスすることができるようになります。
自宅のプライベートクラウド環境
今回は仮想サーバー「Proxmox」環境の中で軽量コンテナ「LXCコンテナ」を使いtailscale環境を構築しました。
tailscaleだけでなく、Proxmox内にさまざまな仮想マシンとしてのサービスを構築することで、外出先からいつでも使えるメディアサーバーなども構築し運用することができます。
TrueNASなどのストレージサービスと「NextCloud」や「PhotoPrism」などのメディア管理アプリを組み合わせることで、Google PhotosやAmazon Photosなどのスマホと連携したメディア管理システムも自宅で構築できます。