milktya.net

自宅サーバーのネットワーク設定をなるべくクリーンにしつつ外出先からアクセスする

AIのおかげで自分好みのサービスを簡単に作れるようになった昨今、
自宅で稼働しているサービスに外出先から簡単かつ安全にアクセスする方法としてTailscaleが非常にポピュラーな手段となっている。

「AIで作ったものに安全にアクセスしたい?それならTailscaleだ!」
ぐらいのノリで紹介されていて実際登録してサーバーと各種デバイスにインストールすればどこからでも簡単につながるし、個人が使う分には無料で十分すぎる機能と制限の緩さだ。

そんな中とあるブログが話題になっていた。
https://mq1.dev/entry/j7zvrsp48lb/
門外漢の自分の理解としては、
「みんなTailscale最高って言ってるけどあれはネットワーク側の挙動としてあんまりお行儀が良くないから
ネットワークの設定をいじったりするようなことがあると思わぬところで問題源になったりするよ」
という感じだろうか。
少なくとも自分の使い方では特に問題になるような気配はなかったのだが、その道に詳しい人がそういう評価をする状況を放置するのも気分が悪い。

ということでなるべくサーバーの設定はクリーンに保ちつつ、外出先から安全にアクセスする方法をClaudeと一緒に考えて設定してみた。
考えるうえでこちらのブログを参考にさせていただいている。
https://lilting.ch/articles/tailscale-alternatives-wireguard-split-access

まずTailscaleからNetbirdに乗り換えた。
自分としてはこれ自体を問題解決のためにやったわけではなく、後述の設定は同等のものをTailscaleでも出来るはずなのだが
せっかくだから同じぐらい評判が良くていざとなればセルフホスト出来たり自由度の高そうなやつを使ってみようぐらいの感覚だ。

ところでNetbirdをサーバーに直接入れては結局Tailscaleと状況は同じだ。
両者は全く同じではないものの、結局は簡単に開通する裏でインストールされたデバイスのネットワーク設定をいじってしまう。
そのためまずは追加でNetbirdを隔離するためVMを1つ作る。
自分は自宅のサーバーにProxmoxをインストールしており、既にメインのVMではllama-swapやOpenWebUI、fravenirを始めとする自作MCP等が動いているためVMの追加だが
マシンが余ってる人とかは物理マシンとかでもいいと思う。

メインのVMには触れず、このVMを経由した自宅LAN内へのアクセスを提供することでNetbirdの影響を隔離・限定しようという狙いだ。

VMのスペックはCPU2コア/メモリ2GB/ストレージ16GB程度のNetbirdだけを動かすには十分な程度にして、OSはDebianを選んだ。
このVMとついでにスマホ側にもNetbirdを入れておき、両者でログインする。
この時点でスマホとNetbird用のVMはお互いにアクセス出来るようになるので、
ここからさらにスマホがNetbird用のVMを経由してメインのVMにアクセスできるようにする。

まずNetbirdのダッシュボードでデバイスのグループを振り分ける
AccessControl→Groupsから新しくグループを作り、
スマホ:my-devices
Netbird用のVM:my-servers
という2つのグループに振り分けてみた。
仮に今後外からアクセスするデバイスが増えればmy-devicesに追加していくことになる。

次にNetwork Routing→Networksに適当な名前でネットワーク作りその中のResourceに
HomeというResourceを作る。
アドレスはとりあえず自宅のLAN内全部見れるように192.168.0.0/24 とかにしておく。
やろうと思えば絞って更に安全性を確保できると思う。

隣のタブのRoutingPeerに移り、AddからPeer Groupに先程作ったmy-serversグループを設定する。
ここでMASQUERADEをONにするかどうか聞かれた気がするので聞かれたらONにする。
聞かれなかったらPeer一覧からMASQUERADEスイッチをONにしておく。

最後にAccessControl→Policiesに適当な名前のポリシーを追加し、
Sources:my-devices
Destination:Home
と設定し、矢印が青い一方通行になっていれば設定完了。
ここで必要がなければDefaultのポリシーを忘れずに無効にしておく。

この状態でwifiを切ったスマホから自宅で各種サービス等を動かしてるメインのサーバーなりVMなりのIPアドレス(注意:NetbirdやNetbird用VMのではない)を打つと、Netbirdの入ってるVMを経由してアクセスしてくれる。
メインのサーバーにはNetbird入れてないし、ネットワークの設定も変更していない。
そもそもNetbirdのIPアドレスを打つ必要もなくなるので感覚としては家のwifiに繋いでるときと同じようにアクセスできる。

これが話題になったブログの解決になっているかどうかはド素人の自分にはわからない。
ただなんかメインのVMがクリーンになってる気がするし、家のサーバーでVMが2つ動いてて片方はネットワークの経由地っていう状況がなんか面白いので
個人的には満足してる。

とはいえ現状ではまだドメイン名とhttpsを用意してないのでパスワードマネージャのオートコンプリートは動かないしIPアドレスとポート番号を暗記するのも面倒なので
近いうちにこれをどうにか解決する予定だ。
あと現状はNetbird公式のサービスを使っているが、諸々安定稼働したらNetbird自体もセルフホストしてみたい。
自宅のサーバーで動いているものは可能な限りすべて自分の手が届くようにしたい。


「サーバー、面白そうなんだけど別にやることないなぁ」と長年ぼんやり思っていたが
AIに興味を持ったのをきっかけにローカルLLMを自宅でホストするのは面白いし、
AIのおかげで自分のような素人でもとりあえずサーバーの運用が出来てしまうのはなんとも便利な時代だ。
ローカルLLMそのものが便利かどうかを問われると部分的にYes、その他はただただ面倒だし正直クラウドのなにがしを使うほうが100倍性能が良くて楽なのだが
家にサーバーがあって
(何かやらかさない限り)自分しかアクセスできないLLMやそのサービスが動いていて
自分はそれを自由にできる
という状況がどうにも愉快なのでここ最近はずっとサーバーをいじっている。
あと仕事の愚痴とか日記なんかはやはりローカルLLMのほうが安心して読ませられる。この点においては明確にメリットだ。

一時期「家に大量のネットワーク機器を持っている人は個人がそんなに通信をさばくことも無かろうにあれで何をしているんだろう」
と疑問に思っていたが、なんとなく理解できた気がする…というよりも自分もちょっと手を出してみたさを感じている。

自宅サーバーやローカルLLM、万人にウケるものではないし他人に勧めることもないが(めんどいしリスクの塊でもあるので)
個人的にはもしかしたら盆栽とかガーデニングとかアクアリウムも本質的にはこんな感じなのかなぁと思いながら楽しくいじっている。

#Ai #サーバー