はじめに
自宅サーバーでDiscord Botを動かすようになったあと、たまにBotがエラーを起こしたり、落ちたり、内部仕様を変更したりする必要があった。
障害発生時に家にいたらそこで直すのだが、外出中に障害が発生したら、家に帰るまでどうにもできない、という課題があった。
そのため、外部のネットワークからサーバにアクセスし、遠隔保守を可能とする必要があったので、VPNを構築することにした。
ただ、VPNを構築したことはなく、またやり方もよく分かっていなかったため、とりあえず簡単にVPNを構築できると聞いたことのあったtailscaleを使ってみることにした。
Tailscaleのインストール
とりあえず、tailscaleの公式ページからアカウントを作成する。
画面右上のGet started
をクリックし、アカウントを作成する。作成するというっても、GitHubと連携ができるので、GitHubアカウントを持っている人はそれでログインすると楽だろう。
アカウントが作成出来たら、「デバイスを登録しましょう!」みたいな案内が来る。さまざまなOSが出て来るので、使っているOSに合わせてインストールする。
Windowsの場合
Windowsを選択し、Download for Windows
をクリックすると、ダウンロードページに飛ぶ。今一度Download Tailscale for Windows
をクリックすると、インストーラがダウンロードされる。
あとはインストーラを管理者権限で実行し、インストールするだけである。確認事項とかは規約への同意くらいしかなかった。
ダウンロードが終わると、以下のようタスクバーからtailscaleを起動できるようになる(画像は起動後、左上の9つの点があるやつ)。
これをクリックすると、ログインが求められる。先ほどと同様にログインすると、自動的にVPN接続される。
iPhoneやAndroidの場合
アプリストアからTailscale
を検索し、インストールする。インストール後、アプリを起動し、ログインするとVPN接続される。
Linuxの場合
コマンドラインから行う。UbuntuとかRaspberry Pi OSなどでも同様である。
- キーの登録
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
- インストール
sudo apt-get update sudo apt-get install tailscale
- 起動
sudo tailscale up
ここまでやると、コマンドラインにURLが表示される。そのURLをブラウザに入力するなどして開くと、ログイン画面が表示されるので、今までと同様にログインするとサーバがVPN接続される。
接続の管理
このページにアクセスすると、VPN接続されている機器一覧を見ることができる。
表形式になっていて、各行に接続機器が表示される。各列の意味はそれぞれ以下の通りである。
-
MACHINE
:接続機器の名前と登録した人のアカウント名 -
ADDRESSES
:接続機器のIPアドレス(100.xxx.xxx.xxxの形式) -
VERSION
:バージョンとOSの種類 -
LAST SEEN
:最後に接続された日時(接続中はconnected
と表示される) -
・・・
:その他の情報や設定など
デフォルトでは、ADDRESSES
には、tailscaleで割り当てられたIPアドレスが表示されているが、折りたたみを開くと、以下の情報が表示され、クリップボードにコピーできる。
- 機器名(
MACHINE
に表示されているものと同じ) - ドメイン名(yyy.xxxxxx.ts.netの形式、yyyには機器名が入る)
- IPアドレス(IPv6)
- IPアドレス(IPv4)
表にはフィルターをかけることもできる。
他にも、DNSタブからは用いるドメイン名を変更できる。Rename tailnet...
をクリックすると、ドメイン名を変更できる(詳細はここ)。
他にも様々な設定があるらしい。
使ってみる
pingする
Machines
から接続を確認したいサーバを探し、IPアドレスかドメイン名をコピーする。同じVPNにある限りは名前解決もやってくれるらしいので、どちらでもよい。
その後、以下のようなコマンドを実行すると、pingが通ることが確認できる。
ping xxxxxx.ts.net
ping 100.xxx.xxx.xxx
Webサーバを見てみる
サーバ側でapache
やnginx
などのWebサーバを立てている場合、ブラウザでアクセスすることができる。
クライアント側でブラウザを開き、以下のようなURLを入力すると、サーバのWebページが表示される。
http://xxxxxx.ts.net
, http://100.xxx.xxx.xxx
スマホなどでやってみるとしっかり接続できていることがわかりやすいかもしれない。
sshする
特に難しいことはなく、config
ファイルに以下のようなことを記載し、.ssh
ディレクトリで鍵のペアをssh-keygen
コマンドで作成してから、サーバ側でユーザのホームディレクトリにある.ssh/authorized_keys
に公開鍵を登録すれば、ssh
でログインできるようになる。これができてしまえば、あとはサーバをいつもの感覚で操作するだけなので、遠隔保守が可能になる。
Host myserver
HostName xxxxxx.ts.net
User myuser
Port 22
IdentityFile ~/.ssh/id_rsa
鍵の名前は適当に変更する。Hostname
にはtailscaleで割り当てられたIPアドレスかドメイン名を指定することとなる(上の例ではドメイン名)。
所感
とにかく簡単かつ爆速でVPNを構築することができて、非常に便利だと感じた。特に危険性などもなく、無料で使えるので、まずVPNを立ててみたいという人にとっては良い選択肢だろう。サーバを介さずPeer to Peerで通信しているらしいので(どうやってるのか気になる)、高速性もある。
ただ、ネットワークのことを何も意識せずとも使えてしまうので(独自ドメインを取る必要すらない)、VPNの勉強にはならないかもしれない。VPNを一から組みたい人には、OpenVPNなどを使うとよいかもしれない(自分も今度やってみる)。
OpenVPNのインストールとセットアップからインターネット接続までのガイドブック #Ubuntu - Qiita