Netmaker:WireGuardメッシュネットワークの中央管理は、もう「苦行」ではない

Network tutorial - IT technology blog
Network tutorial - IT technology blog

なぜ手動設定ではなくNetmakerを使うべきなのか?

50人規模のオフィスや小規模なデータセンターのネットワークを管理している場合、そのスピードと軽量さからWireGuardは間違いなく最良の選択肢です。しかし、デバイス(ノード)の数が増え始めると、すぐに問題が発生します。

簡単な計算をしてみましょう。20台のサーバーがある場合、20組のパブリック/プライベートキーを作成し、それぞれの設定ファイル .conf を手動でコピー&ペーストする必要があります。新しいノードを追加するたびに、残りの19台のピアリストを更新しなければなりません。コンマ一つ間違えるだけで、接続は即座に遮断されます。ここで Netmaker の出番です。

Netmakerは、中央管理レイヤー(コントロールプレーン)として機能します。WireGuardを置き換えるのではなく、WebインターフェースやREST APIを通じてネットワークを制御できるようにするものです。一台ずつ苦労して設定する代わりに、「マシンA、B、Cをメッシュネットワークとして接続せよ」と命令するだけで済みます。netclient という小さなエージェントが、残りの作業を自動的に処理してくれます。

TailscaleやZeroTierと比較して、Netmakerは完全にシステムを自前で管理(セルフホスト)できる点が特徴です。すべてのデータは独自の回線を経由し、サードパーティのサーバーに依存しません。これは、ラボ環境の構築や、絶対的なセキュリティを優先する企業への導入において非常に重要です。

Netmakerサーバーのデプロイ

開始するには、固定IPを持つ Linux VPS(Ubuntu 22.04推奨)を用意してください。また、3つのサブドメイン(dashboardapibroker)に対してAレコードを紐付けるドメインも必要です。

1. 最小ハードウェア構成

  • CPU: 2コア
  • RAM: 2GB(100ノード以上を管理する場合は増設を推奨)
  • OS: Ubuntu 20.04 または 22.04
  • ツール: Docker および Docker Compose

2. スクリプトによるクイックインストール

コンテナを一つずつセットアップする代わりに、自動スクリプトを使用して設定時間を15〜20分短縮しましょう。以下のコマンドを実行します。

wget -qO - https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/nm-quick.sh | bash

スクリプトはメインドメイン(例:itfromzero.com)の入力を求めます。システムは、関連するサブドメインに対してLet’s Encryptから無料のSSL証明書を自動的に取得します。完了後、画面に表示される管理者情報を保存しておいてください。

3. システムステータスの確認

docker ps コマンドを使用して、4つのコアコンポーネントが実行されていることを確認します:netmaker(メインサーバー)、netmaker-ui(UI)、mosquitto(MQTTブローカー)、coredns。すべてが “Up” 状態であれば、準備は半分完了です。

実践的なメッシュネットワークの設定

ダッシュボードにログインし、まずは共通のネットワーク空間を作成します。

ステップ1:ネットワークの作成

Networks -> Create Network に移動します。名前を office-mesh とし、内部IP範囲(例:10.10.10.0/24)を選択します。「Create」をクリックして、クライアントを受け入れる準備を整えます。

ステップ2:netclientによるノードの接続

ここが最も価値のある部分です。WireGuardの設定ファイルを触る必要はありません。ダッシュボードで Enrollment Key を作成し、インストールコマンドをコピーします。

curl -sL https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/netclient-install.sh | sudo bash -s -- -t <YOUR_TOKEN>

実行すると、netclient が自動的にWireGuardをインストールし、キーペアを生成して、パブリックキーをサーバーに登録します。新しいマシンがメッシュネットワークに参加するのにかかる時間はわずか10秒ほどです。

ステップ3:Egress Gatewayの設定

例えば、VPN経由でオフィスのLAN内(192.168.1.0/24)にあるプリンターやNASにアクセスしたいとします。Netmakerは、これを解決するための Egress Gateway 機能をサポートしています。

オフィスに設置されているノードを一つ選択し、Egressを有効にして、その内部IP範囲を入力するだけです。即座に、メッシュネットワーク内のすべてのマシンが、複雑なルーティング設定なしでオフィスのLANを「認識」できるようになります。

監視と自動化

ネットワークは稼働しましたが、安定しているかどうかをどうやって知るのでしょうか?

1. 接続の確認

ワークステーション上で sudo netclient list コマンドを実行すると、現在の接続状態が表示されます。実際のデータトラフィックの詳細を確認するには、おなじみの sudo wg show コマンドを使用します。

2. REST APIによる自動化

CI/CDシステムに統合したり、権限付与を自動化したりしたい場合、Netmakerは強力なAPIを提供しています。以下は、どのノードがオンラインかを確認するための短いPythonコードの例です。

import requests

# 管理者用シークレットキーを設定
API_KEY = "your_secret_admin_key"
URL = "https://api.itfromzero.com/api/nodes"

headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(URL, headers=headers)

for node in response.json():
    # ノードがアクティブかどうかでステータスを判定
    status = "Online" if node['is_active'] else "Offline"
    print(f"Node: {node['name']} - IP: {node['address']} - [{status}]")

デプロイにおける重要な注意点

Netmakerを何度か導入してきた中で得られた、いくつかの重要な注意点を共有します。

  • UDPポートの開放: WireGuardはUDPを使用します。ファイアウォールでポート 51821-51830 が開放されていることを必ず確認してください。このポートがブロックされていると、ノード同士は認識できても、pingが通りません
  • MTUエラー: pingは通るのにWebページが読み込めない場合は、MTUを1280に下げてみてください。これは、オーバーヘッドの大きい回線でVPNを実行する際によくある問題です。
  • データのバックアップ: 常に /root/netmaker ディレクトリをバックアップしてください。SQLiteデータベースが破損すると、システム全体のnetclientを最初から再インストールすることになりかねません。これは誰もが避けたいシナリオです。

Netmakerは、VPN管理を面倒な手作業からスムーズな自動化プロセスへと変えてくれました。WireGuardのスピードはそのままに、設定の複雑さを完全に取り除いてくれます。皆さんのメッシュネットワーク構築の成功を祈っています!

Share: