5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProxmoxAdvent Calendar 2024

Day 7

ProxmoxのLXCとTailscaleでリモートアクセスVPNを作ろう

Last updated at Posted at 2024-11-20

宣伝

自宅サーバーへのアクセス

現状はSoftether VPNを使ってリモートから宅内のサーバー群へアクセスできるようにしています。

今回はこれをTailscaleに置き換えようと思います。
なお、Tailscaleの障害やサービス終了に備えてsoftetherはそのまま残します。

Tailscale

ポート開放の必要がないP2P分散型VPNです。
tailnetと呼ばれるドメインネットワーク内でP2P通信を行います。
出口ノード設定とローカルサブネットへのルーティング設定でリモートアクセスVPNの構築ができます。

料金プラン

無料で使えるPersonalプランでは、以下のことができます。

  • 最大3ユーザー
  • 最大100デバイス
  • Tailscaleの全機能にアクセス可能
    • Magic DNS
    • ACL
    • etc...
  • 無期限かつ無料

これをPersonal Plusプランにすると月額$6で6ユーザーまで使えるようになります。

Magic DNS

Magic DNSは、tailnetに接続しているデバイスにホスト名を割り振りって、そのホスト名を使用してtailnetに接続しているデバイス同士で通信できる機能です。
要するに宅内DNSのようなものです。

ACL

アクセスコントロール機能です。
友人はファイルサーバーのみ、のようにアカウントごとにアクセスできるノードを制限できたりします。

構築

Tailscaleへの登録

まずはtailscaleに登録します。
登録はSSOのみ対応なので、好きなプロバイダで登録してください。

001.png

使用目的はPersonal Useです。

image.png

最初のデバイスを登録しろ、と言われますが今回は下のSkipを押して飛ばします。
image.png

スキップすると次のような画面になるので、次はLXCコンテナを作成します。

image.png

LXCコンテナの作成

テンプレートダウンロード

今回はAlmaLinux 9のテンプレートを使用します。

テンプレートのダウンロード方法はこちらから

image.png

AlmaLinux9を選択してダウンロードしたらコンテナの作成に移ります。

コンテナID

CT ID: 任意のID
ホスト名: 任意のホスト名 ここはTailscaleのデバイス名になります。
パスワードを設定したら次へ進みます。

image.png

テンプレート指定

テンプレートをダウンロードしたストレージを選択して、AlmaLinuxのテンプレートを指定します。

007.png

ストレージ

ストレージを指定します。
今回は32GBにしておきます。少なすぎると起動に失敗します。

008.png

CPU・メモリ

CPUは2コア、メモリは2048MB程度にしておきます。
スワップはお好みで設定してください。

ネットワーク

ネットワーク設定をします。
ここでIPアドレスの取得にDHCPを使用すると、コンテナの起動がかなり遅くなるので気を付けてください。

image.png

LXCコンテナの起動

コンテナを作成したら起動します。
ユーザー名はroot、パスワードは先ほど指定したものです。

Tailscaleのインストール

Tailscaleをインストールしていきます。
公式のワンラインコマンドを実行します。

console
# curl -fsSL https://tailscale.com/install.sh | sh

Installing Tailscale for fedora, using method dnf
+ '[' 3 = 3 ']'
+ dnf install -y 'dnf-command(config-manager)'
AlmaLinux 9 - AppStream                                                             4.2 MB/s | 8.2 MB     00:01    
AlmaLinux 9 - BaseOS                                                                1.0 MB/s | 2.3 MB     00:02    
AlmaLinux 9 - Extras                                                                 17 kB/s |  13 kB     00:00    
Last metadata expiration check: 0:00:01 ago on Wed 20 Nov 2024 07:56:53 AM UTC.
Dependencies resolved.

......

Complete!
+ systemctl enable --now tailscaled
Created symlink /etc/systemd/system/multi-user.target.wants/tailscaled.service → /usr/lib/systemd/system/tailscaled.service.
+ set +x
Installation complete! Log in to start using Tailscale by running:

tailscale up

Installation Complete!が表示されたら、一度コンテナをシャットダウンします。

コンテナ設定変更

コンテナの設定を変更します。
Proxmoxのシェルから、/etc/pve/lxc/VMID.confを編集します。

/etc/pve/lxc/150.conf
# vim /etc/pve/lxc/150.conf

末尾に追記

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

この設定が終わったらコンテナを起動します。
コンテナが立ち上がったら、コンテナのシェルでコマンドを実行します。

恐らく/etc/sysctl.confには何も書かれていないはず or コメントのみのはずなので、2行追記します。

/etc/sysctl.conf
# vim /etc/sysctl.conf

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

変更したらコンテナを再起動します。

Tailscaleのリンク

コンテナ設定の変更が終わったら、tailscaleを実行していきます。

console
# tailscale up

To authenticate, visit:

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

ここに表示されるURLにアクセスし、ログインして続行します。
リンクが完了すると次のページが表示されます。また、コンソールにSuccessと表示されます。

009.png

TailscaleのMachinesページに戻り、このように接続したノードが表示されていればOKです。

010.png

ルーティング設定

サブネット設定

サブネットルーターとして動作させるために、サービスを登録します。
警告は無視してかまいません。

console
# tailscale up --advertise-routes=192.168.1.0/24 --advertise-exit-node --accept-routes
Warning: IP forwarding is disabled, subnet routing/exit nodes will not work.
See https://tailscale.com/s/ip-forwarding
Warning: UDP GRO forwarding is suboptimally configured on eth0, UDP forwarding throughput capability will increase with a configuration change.
See https://tailscale.com/s/ethtool-config-udp-gro

--advertise-routes=: ここには自宅ネットワークのネットワークアドレスをCIDRで入力します。
--advertise-exit-node: 出口ノードとして使用することを示します。
自宅サーバーをExit Nodeに指定すると、すべての通信が自宅(出口ノード)経由になります。
アクセス先のサイトやサービスから見えるIPアドレスは自宅のものになります。

Exit Nodeなし
                |-> インターネット
アクセス元端末 ->|
                |-> tailnet(各VPNノード)
Exit Nodeあり
アクセス元端末 -> 出口ノード -> インターネット

これで先ほどのマシンにサブネットと出口ノード設定が行われたので、次はこれを有効化します。
011.png

サブネット・出口ノード有効化

Shareの横の3点ボタンからEdit route settings...を選択します。

012.png

両方ともチェックを付け、Saveします。
013.png

構築完了

これでひとまずサーバー側の構築は完了です。
次はクライアントの設定をしていきます。

クライアント設定

今回はAndroidスマホを最初のクライアントとして設定していきます。
Google PlayからTailscaleクライアントをインストールします。

ログイン

起動するとこのような画面になるのでログインします。

014.jpg

ログインすると、このようにtailnetに登録されたデバイス一覧が見れるようになります。

015.jpg

出口ノード指定

次に、出口ノードを指定します。
Exit Node Noneとなっているところを選択します。
選択すると、このようにtailnet上で出口ノードとして登録されたノード一覧が見られます。
今回は、自宅サーバーのノードを指定します。

016.jpg

正常に指定されると、このように青くなります。

017.jpg

この状態でローカルのサーバーにアクセスしてみて通れば完了です。

まとめ

ポート開放やルーティングテーブルを書くことなくVPNを構築できるのでセットアップしやすかったです。
また手順も少ないので15分もあれば構築できました。

パフォーマンスについてはそのうち追記しようと思います。

参考

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?