シリーズ一覧
- Part0 PC準備編
- Part1 Proxmox VEインストール編
- Part2 VM作成編
- Part3 外部アクセス編(この記事)
はじめに
この記事は、ミニPC+Proxmox VEでホームラボ環境を作る備忘録シリーズのPart3(最終回)です。
前回までで、Proxmox VEでLinux仮想マシンを作成し、自宅LAN内の他デバイスからSSH接続が出来る事の確認まで実施しました。
最終回である今回は、自宅の外から作成したホームラボ環境にアクセスする方法について記載します。
書くのが面倒なので、Proxmox VEはPVE
と記載しています。
Tailscaleについて
Tailscaleの概要
公式サイト
TailscaleはWireGuardをベースにしたインターネットVPNサービスです。
自分が繋げたい端末でTailscaleのクライアントをインストールしておくと、それらはTailnetと呼ばれるアカウントに紐付いたドメインネットワークに所属することになり、端末同士でP2P通信ができます。
また、基本的にクライアントを入れてアカウント認証をするだけで端末をTailnetに所属させることができるため、ネットワーク知識が無くとも利用できるのもメリットだと言えます。
利用料金
気になる利用料金ですが、驚くべきことに個人利用はなんと無料です。
しかも100台も登録できるらしい。すごくない?
比較
今回の用途の場合、似たようなサービスとしてCloudflare Zero Trust
に含まれる、Cloudflare Tunnel
というサービスだったり、TailscaleのベースになっているWireGuard
自体を使ってしまえば良いと言うことになります。
ただ、面倒な設定とかやってもな~という気持ちが、Tailscaleの掲げるDeploy a zero-config, no-fuss VPN
(設定不要で手間をかけずにVPNを構築しよう)と共鳴したので、今回はTailscaleを使うことにしました。
用途
今回は、外出先で学習用の仮想マシンにSSH接続をしたいと考えています。
仮想マシンでTailscaleを有効にしておき、外出先で自宅の仮想マシンにSSH接続をしたいと思った際、外出先で使用しているスマホやノートPC等でTailnetに接続し、そこからSSH接続出来るという訳です。
セキュリティ的な懸念についても、Tailscaleは基本的にアカウントに紐付けた端末同士のみで通信可能なので、全世界に意図せず大公開!みたいな部分は大丈夫です。
VMへのTailscaleインストール
Tailscaleのアカウント作成は、様々な先駆者がいらっしゃるので、この記事では省略します。
予めアカウントを作成した状態で、Tailnetに登録したいVM上で下記コマンドを実行します。
curl -fsSL https://tailscale.com/install.sh | sh
これを実行すると、Linuxディストリビューションに沿った必要なアプリケーションインストールだったり、インターフェース有効化操作だったりが行われます。
Sudoで実行する項目があるので、心配な方はシェルスクリプトの中身を確認してみてください。
大体以下の操作が行われます。
- Tailscaleのアプリケーションリポジトリ追加
- Tailscaleのインストール
-
tailscaled
のデーモン起動とenable
操作
スクリプトの実行が一通り完了すると、最後にsudo tailscale up
コマンドを実行するように表示されるので、指示通りコマンドを実行します。
Installation complete! Log in to start using Tailscale by running:
sudo tailscale up
実行すると、認証用URLが払い出されるので、このURLをブラウザのアクセスバーに貼り付けてアクセスします。
To authenticate, visit:
https://<認証URL>
アクセスするとこんな感じ。
Tailscaleのアカウントを作成したときと同じ方法でログインします。
ログイン後、Connect
ボタンをクリックすれば接続完了です。
WebUI上から登録した端末の一覧とIPアドレスを確認することができます。
予め、外出先デバイスとしてiPadにもTailscaleをインストールしておきました。
念の為、接続先としている仮想マシンのIPアドレスもip
コマンドで確認しておきます。
user@ubuntu1:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether bc:24:11:65:55:85 brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 192.168.1.58/24 metric 100 brd 192.168.1.255 scope global dynamic ens18
valid_lft 6019sec preferred_lft 6019sec
inet6 fe80::be24:11ff:fe65:5585/64 scope link
valid_lft forever preferred_lft forever
3: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default
qlen 500
link/none
inet 100.80.143.116/32 scope global tailscale0
valid_lft forever preferred_lft forever
inet6 fd7a:115c:a1e0::1a01:8f82/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::db43:1bd4:2c74:a9bf/64 scope link stable-privacy
valid_lft forever preferred_lft forever
3つ目のインターフェースにtailscale0
があり、ここにWebUIから確認したIPアドレスが実際に割り当てられていることが確認できます。
外部からのアクセス確認
では、iPadにインストールしたターミナルアプリから、実際にSSH接続が出来るか確認してみます。
今回はTermiusを使ってみました。
無料の範囲でもかなり高機能な事ができるターミナルアプリです。
Hosts
メニュー内の+ボタンをタップして、New Hostをタップするとこんな画面が出てきます。
Label
に判別しやすい名前を入れて、IP or Hostname
の所に、先ほど確認したIPアドレスを入力して右上のSave
をタップ。
その後作成したUbuntuボタンをタップすると、ユーザー名が聞かれるので入力。
known hostsに登録していないので警告が出ますが、Continue
をタップして継続。
注意点
resolve.confが上書きされる
LinuxにインストールしたTailscaleは、MagicDNSがTailnet上で有効な状態かつ他に稼働中のリゾルバが居ない場合、/etc/resolve.conf
を上書きします。
NetworkManagerとか、systemd-resolvedとか、そんな感じの奴らです。
MagicDNS
は、Tailnet内のデバイス同士をFQDNで指定することができる名前解決の仕組みです。
今回インストールしたUbuntuでは問題無かったのですが、NetworkManagerが稼働しているRHEL環境では、/etc/resolve.conf
が上書きされていることを確認しました。
MagicDNSをTailnet全体で無効にするか、指定デバイス上で無効にすることで、この現象は防止出来るようです。
参考:
まとめ
この記事では、Tailscaleを併用した外部アクセス環境の整備を行いました。
ここまで来ると、PVEはもうほぼ関係ないようなものなので、このシリーズはここで最終回としておきます。
このシリーズを通して、Proxmox VEを使った環境構築の学びになりました。
LXCとか、クラスタとか、Cephとか色々使っていない機能が沢山あるので、使いたくなったらそれらも使用してみたいですね。
シリーズ一覧
- Part0 PC準備編
- Part1 Proxmox VEインストール編
- Part2 VM作成編
- Part3 外部アクセス編(この記事)