国内向けのリモートアクセス方法:自作のルートサーバーで ZeroTier 仮想内網を構築 - 少数派#
#Omnivore
国内向けのリモートアクセス方法:自作のルートサーバーで ZeroTier 仮想内網を構築
多くのパブリッククラウド製品がダウンしている問題が発生し、ますます多くの人々がデータを保存するためにプライベートクラウドを選択し始めています。撮影した写真、ダウンロードしたドラマ、音楽や映画は、今や家庭の NAS デバイスやコンピュータに保存されています。これにより、公共のネットワーク環境に制約されることなく、いつでもどこでもこれらのデータにアクセスして使用することができます。時には、外部ネットワーク環境で家庭の NAS の資料やデータにアクセスする必要がありますが、現在の多くのソリューションは一定の柔軟性に欠けています。
さらに、休日が近づくにつれて、多くの友人が外出や帰省の計画を立てていることでしょう。家庭や会社のデバイスにアクセスする必要が生じるシーンや、サーバーに置いてあるファイルを一時的にダウンロードする必要があるかもしれませんし、住居の NAS に接続して友人や家族と一緒に自分のコレクションの映画や写真を観ることもあるでしょう。このような時、安定して信頼できるリモートアクセス能力がますます重要になります。
関連読書:
- 《遠隔ネットワークアクセスガイド》上 中 下
- 年末年始の帰省後、私はどのように家庭のデバイスにリモートアクセスしたのか?
現在のリモートアクセスソリューション#
全体として、外部ネットワークから内部ネットワークにアクセスするサービスは大きく分けて 3 つのソリューションがあります:
- 公開 IP + DDNS 解析を取得
- トンネル貫通
- 仮想 LAN を構築
DDNS を使用することは最も簡単なアクセス方法ですが、現在の実行可能性はますます低下しています。
もしあなたの家のブロードバンドが公開 IP を取得できるなら、DDNS を直接使用することは柔軟な解決策です。DDNS 解析とポートフォワーディングを設定するだけで、ドメイン名とポートを使って外部から内部ネットワークにマッピングされたサービスにアクセスできます。この設定は簡単で、速度は家庭の上り帯域幅に制約されます。しかし、このソリューションの実行可能性は徐々に低下しています。主な理由は、IPv4 アドレスの枯渇であり、国内のブロードバンドプロバイダーはもはや家庭ユーザーに公開 IP を割り当てておらず、多くの家庭用ブロードバンドの IP アドレスは内部ネットワークアドレスであり、動的アドレス解析が実現できず、外部からのアクセスがますます困難になっています。
frp は最も一般的な内部ネットワーク貫通ツールですが、クライアントの設定編集が複雑であることが主な難点です。
トンネル貫通ソリューションは、公開 IP を持つサーバーをジャンプボードとして使用し、内部ネットワークサービスを公開に露出させてアクセスを実現するもので、このソリューションの利点はネットワークアクセスが安定しており、帯域幅の速度は公開 IP サーバーの帯域幅に依存します。欠点は設定が複雑で、サーバーに関連サービスをインストールする必要があり、内部ネットワークサービス側で設定項目を書く必要があります。また、トンネル貫通は一部のネットワークプロトコルのサポートが不十分で、特に HTTPS プロトコルの設定は非常に複雑で面倒です。
最後のソリューションは仮想 LAN を構築することで、簡単に言えば、異なるネットワークにあるデバイスを跨いで仮想 LAN を構築し、内部ネットワーク IP に基づいてデバイス間の相互訪問を実現することです。このソリューションの最大の利点は、ネットワークプロトコルに制約されず、クライアントのデプロイが比較的簡単でプライベートなデプロイをサポートすることですが、サービスを提供するベンダーの多くは海外から来ており、国内のネットワーク環境での安定性が低いという欠点があります。
仮想 LAN を構築するサービスの中で、現在主流なのは ZeroTier、Tailscale、そして国産の蒲公英です。私の横断的な比較とテストの結果、より柔軟な ZeroTier を選択しました。まず、家庭用の場合、公式の ZeroTier でもほとんど費用がかからず、ID を通じて自作の仮想 LAN に直接参加できるからです(Tailscale では新しいデバイスを追加するためにシングルサインオンの承認が必要です)。さらに重要なのは、現在 ZeroTier はより柔軟な自己デプロイメントソリューションを提供しており、操作や方法が他の 2 つのサービスよりもはるかに簡単です。
私は ZeroTier を使用して仮想 LAN を構築し、外部から内部ネットワークにアクセスしていますが、公式サービスは使用していません。最も重要な点は、公式のルートサーバー(プラネットサーバー)が海外に展開されているため、国内のインターネットの特性により高い遅延が発生し、ネットワークの安定性に影響を与えることです。国内で Moon サーバー(衛星サーバー)を自作することでアクセス問題を緩和することはできますが、仮想 LAN の解析は依然としてルートサーバーに依存するため、最も直接的な方法は、国内のインターネット上に完全に自作のプラネットサーバー(ルートサーバー)とネットワークコントローラーを構築することです。これにより、本質的に最も効率的で安定した仮想 LAN の構築が実現します。
このようにする利点は、海外のネットワークアクセス速度に制約されず、全プロセスが完全に自主管理可能であり、実際の費用も最も低いことです —— 国内の主要なクラウドサーバー提供者から非常に低い構成のクラウドサーバーを 1 台購入するだけで、年間の費用は 100 元にも満たないかもしれません。
Tailscale と同様に、ZeroTier もネットワークコントローラーとルートサーバーの自己デプロイを実現できますが、以前は衛星サーバー(Moon サーバー)とネットワークコントローラーしか自作できませんでしたが、今ではルートサーバー(プラネットサーバー)の自己デプロイが可能になりました。これにより、公式の ZeroTier のアカウントを登録する必要なく、完全に仮想 LAN を自作することができます。
クラウドサーバーに ZeroTier プラネットサーバーをインストールする#
まず最初に、国内のクラウドサービスプロバイダーからクラウドサーバーを購入します。全体の仕様は「1 コア 2G」または「2 コア 2G」で十分で、最も重要なのはデバイス管理のために公開 IP が必要です。始める前に、クラウドサーバーのファイアウォールを開き、3443 ポート(TCP)と 9993 ポート(TCP および UDP)を追加で開放する必要があります。
次に、SSH クライアントを使用して root 権限でクラウドサーバーにログインし、サーバーのディストリビューションに応じてシステムコンポーネントを更新し、Git、docker をインストールして docker を起動します:
# debian系の更新確認
apt update
# debian系ではgitのインストール確認は不要
apt install -y git
# docker公式リポジトリからdockerをインストール
curl -fsSL https://get.docker.com |bash
# systemdを通じてdockerサービスを起動
systemctl start docker
# red hat系の更新確認
yum update
# red hat系ではgitのインストール確認は不要
yum install git -y
# docker公式リポジトリからdockerをインストール
curl -fsSL https://get.docker.com |bash
# systemdを通じてdockerサービスを起動
systemctl start docker
次に、xubiaolin が作成した自作プラネットサーバーインストールスクリプトをコピーします:
# xubiaolinが作成した自作プラネットサーバーインストールスクリプトをコピー
git clone https://ghproxy.markxu.online/https://github.com/xubiaolin/docker-zerotier-planet.git
# 特定のディレクトリに移動
cd docker-zerotier-planet
# スクリプトを実行
./deploy.sh
スクリプトは関連する選択肢を提示しますので、ここでは直接1
と入力して Enter を押してインストールします。インストール中に適切なポートを入力する必要がありますが、すべてデフォルトを選択できます。その後はコンテナの作成プロセスです。もしあなたが私と同様に性能が比較的低いクラウドサーバーを使用している場合、全体のインストール待機時間は比較的長く(約 10 分)なるでしょう。
Successfully copied 2.048kB to /tmp/planet
というような端末画面が表示されると、全体のインストールプロセスが終了したことを示します。もちろん、確信が持てない場合は、次のコマンドを使用してそのコンテナが起動しているかどうかを確認できます:
docker ps
STATUS
の下にUp
と表示されていれば、コンテナは起動しています。次に、ブラウザのアドレスバーにhttp://クラウドサーバーip:3443
と入力してネットワーク管理バックエンドを開きます。以下のログインページが表示されれば、サーバー側のインストールは成功です。
すべての実行が完了した後、この自作の仮想 LAN サービスはplanet
という名前のファイルを生成します。これは後でクライアントを設定する際に必要です。ここで SSH クライアントを使用してdocker-zerotier-planet
ディレクトリに入り、再度./deploy.sh
このスクリプトを実行し、数字の 3 を入力して Enter を押し、planet
ファイルを現在のディレクトリにコピーし、sFTP クライアントを使用してファイルをローカルにコピーしておきます。
自作の ZeroTier にネットワークを設定する#
ローカルでブラウザを開き、http://クラウドサーバーip:3443
にアクセスしてネットワークコントローラーのログインページに入ります:
デフォルトのアカウント:admin
、パスワード:password
でログイン後、タブの中のAdd Network
をクリックしてネットワークを作成します。
作成が完了すると、自動的に新しく作成したネットワークの詳細ページにリダイレクトされます。次に上部のIPv4 Assign Mode
をクリックし、Auto-assign from IP Assignment Pool
にチェックを入れて、新しく参加したネットワークデバイスが自動的にアドレスプールから IP を取得できるようにします。
別途保存が必要なのは、対応するネットワーク ID です。例えば、私が作成したこのceshi
というネットワークに対応する一連の文字列を保存しておきます。後でこの ID を使用してクライアントをあなたが作成したこの ID に参加させる必要があります。
クライアントの参加#
私の主な目的は、持ち運び可能なノートパソコンがいつでも家庭の Synology にアクセスできるようにすることです。そのため、家庭の Synology、Mac コンピュータ、Windows ノートパソコンを同じ仮想 LAN に参加させる必要があります。
Windows システムデバイスの設定#
まず、公式の ZeroTier Windows クライアントインストーラをダウンロードしてインストールします。
次のステップ:インストールが完了したら、ファイルエクスプローラーを使用して次のパスにアクセスします:C:\ProgramData\ZeroTier\One
、以前にクラウドサーバーからコピーしたplanet
ファイルをディレクトリ内の同名ファイルと置き換えます。
次のステップ:サービス
を開き、サービスリストの中から ZeroTier One を選択し、左上のサービスを再起動
をクリックします。
次のステップ:タスクバーの Windows アイコンを右クリックし、ターミナル管理者
を選択し、次のコマンドを入力します:
cd C:\Windows\system32
zerotier-cli.bat join ネットワークID
入力後、200 Join OK
と表示されれば、現在のデバイスは私たちが作成したこの仮想 LAN に参加しています。この時、ブラウザでhttp://クラウドサーバーip:3443
を開き、Network
をクリックして作成したネットワークを選択すると、ネットワーク詳細リストの下に新しいデバイスが表示されます。Nember name
の下にメモを追加し、Authorized
にチェックを入れてネットワークに参加させることができます。後で IP 割り当ての下にこのデバイスに割り当てられた内部 IP アドレスが表示されるでしょう。
macOS システムデバイスの設定#
まず、公式の ZeroTier macOS クライアントをダウンロードしてインストールします。
次のステップ:インストールが完了したら、Finder を使用してディレクトリ/Library/Application Support/ZeroTier/One
にアクセスし、以前にクラウドサーバーからダウンロードしたplanet
ファイルをディレクトリ内の同名ファイルと置き換えます。
次のステップ:ターミナルを開き、次のコマンドを入力して ZeroTier One クライアントを再起動します:
cat
/Library/Application Support/ZeroTier/One/zerotier-one.pid |
sudo
xargs
kill
続いて、ターミナルに次のコマンドを入力して、あなたが作成した仮想 LAN ネットワークに参加します:
zerotier-cli join ネットワークID
200 join OK
と表示されれば、参加成功です。
最後に、ブラウザでhttp://クラウドサーバーip:3443
にアクセスしてネットワーク管理バックエンドを開き、Network
をクリックして作成したネットワークを選択すると、ネットワーク詳細リストの下に新しいデバイスが表示されます。Nember name
の下にメモを追加し、Authorized
にチェックを入れてネットワークに参加させることができます。
ターミナルでzerotier-cli peers
コマンドを入力すると、参加デバイスの役割と対応するネットワークが表示されます。もしクラウドサーバーの役割が Planet で、先ほど参加したデバイスの役割が LEAF であれば、国内ネットワークに基づく仮想 LAN が成功裏に作成されたことを示します。
Synology デバイスの設定#
私の主な目的は、Synology と持ち運び可能なノートパソコンを同じ LAN に置くことです。実際、最も重要なのは Synology です。ここで、クラウドサーバーからダウンロードしたplanet
ファイルを Synology のファイルディレクトリにコピーします。ここではsoft backup
というフォルダにコピーします。
次に、Synology のパッケージセンターを開き、設定
-パッケージソース
に「矿神源」を追加します ——https://spk7.imnks.com/。その後、パッケージセンターのサイドバーで「コミュニティ」を選択し、ZeroTier を見つけてインストールします。
パッケージのインストールが完了したら、まずは起動しないでください。SSH クライアントを通じて Synology に接続し、次のコマンドを入力してパッケージを修正します:
sudo sed -i 's/package/root/g' /var/packages/zerotier/conf/privilege
次に、次のコマンドを入力して、先ほどアップロードしたplanet
ファイルをパッケージディレクトリにコピーします:
mv /volume1/@appdata/zerotier/planet /volume1/@appdata/zerotier/planet.bak
cp /volume1/soft backup/planet /volume1/@appdata/zerotier/
この時、再び Synology のパッケージセンター
に戻り、ZeroTier を起動します。この時、SSH クライアントで次のコマンドを入力して、Synology を自作の仮想 LAN に参加させます:
cd /var/packages/zerotier/target/bin
./zerotier-one -q join ネットワークID
200 join OK
と表示されれば、接続成功です。ブラウザでhttp://クラウドサーバーip:3443
にアクセスして管理バックエンドを開き、ネットワーク詳細ページで新しく追加された Synology を見つけ、Authorized
にチェックを入れてネットワークに参加させます。
結論#
自作の ZeroTier プラネットサーバーにより、すべてのデバイスが国内のネットワーク環境で直接接続され、公式のルートサーバーが海外に設置されている場合と比べて遅延が大幅に低下します。この自作の仮想 LAN はネットワークプロトコルに対する制約が少なく、Samba プロトコルを通じて作成されたファイルサービスは内部 IP を通じて直接アクセスでき、ドメイン名を設定することなく webdav プロトコルを使用できるため、操作が簡素化されます。
Synology の公式 QuickConnect 接続は中継アクセスのみをサポートするため、自作の ZeroTier 仮想 LAN は相互訪問性能を効果的に向上させます。例えば、Synology Drive に依存するユーザーである私にとって、クライアントが Synology に接続する問題が大幅に減少しました。
もしあなたも異なるネットワーク下のデスクトップデバイスと家庭内のネットワークサーバーとの相互訪問性能を向上させたいのであれば、完全に自己デプロイされた ZeroTier を試してみると、異なる新しい体験が得られるかもしれません。
> 少数派 クライアントをダウンロードし、少数派小紅書をフォローして、素晴らしいデジタルライフを体験してください🍃
> 実用的で使いやすい正規ソフトウェアを、少数派があなたにお届けします🚀
© 本文の著作権は著者に帰属し、少数派に独占的に使用を許可されています。少数派の許可なしに転載や使用することはできません。