本文へスキップ

ホームラボのネットワーク図:VLAN、ファイアウォール、リバースプロキシ、セルフホストサービス

復旧できるホームラボのネットワーク。VLAN 設計、VLAN 間のルール、正規の証明書、安全なリモートアクセス、DNS、バックアップ。

· 創業者・開発者

公開日:

ネットワーク図。インターネットは OPNsense または pfSense ファイアウォールに届き、UDP 51820 の WireGuard だけを受け付けます。マネージドスイッチは VLAN 10〜50 をトランクします。VLAN 30 にはリバースプロキシ、Proxmox ホスト、NAS があります。アクセスポイントは SSID を Trusted、IoT、Guest の VLAN に対応付けます。

ホームラボは、たいていフラットなネットワークから始まります。Pi-hole を動かす Raspberry Pi、NAS、Proxmox と十数個のコンテナを載せたミニ PC が、プロバイダのルーターが配る 192.168.1.0/24 にすべてつながっている状態です。スマートテレビやファームウェア更新の止まったカメラが NAS の管理ページと同じネットワークにいて、2 年前に設定した Jellyfin のポートフォワードも開いたままです。

この記事では、IoT とゲストを分離し、サービスを安全に公開でき、復旧しやすいホームラボのネットワークを設計して、図に描きます。

ネットワークに求められること

  • 分離。 テレビ、カメラ、ゲストのスマートフォンはインターネットには届きますが、NAS やハイパーバイザーには届きません。
  • 安全な公開。 サービスごとにポートを開けるのではなく、認証と暗号化のある入口を 1 つだけ用意します。
  • 復旧しやすさ。 ディスクが壊れたら、記憶ではなくバックアップと図から再構築します。

ハードウェアは次のとおりです。二重 NAT を避けるためブリッジモードにしたプロバイダのモデム。VLAN 間のルーティングと DHCP、DNS、VPN を担う OPNsense または pfSense CE ファイアウォール(どちらもオープンソース)。802.1Q VLAN に対応したマネージドスイッチ。SSID を VLAN に対応付けるアクセスポイント。VM と LXC コンテナ用の Proxmox VE ホスト。そして NAS です。

VLAN 設計

RFC 1918 のプライベート範囲(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)から /16 を 1 つ選び、各 VLAN に /24 を割り当てます。外出先から自宅につなぐ元のネットワークでよく使われる 192.168.0.0/24 と 192.168.1.0/24、さらに 172.17.0.0/16(Docker の通常のデフォルトブリッジ)と 100.64.0.0/10(Tailscale のアドレス)は避けてください。この例では 10.23.0.0/16 を使い、VLAN ID を第 3 オクテットにしています。

VLAN 名前 サブネット 置くもの 許可する外向き通信
10 Management 10.23.10.0/24 ファイアウォール、スイッチ、AP、Proxmox の管理インターフェース 更新のみ
20 Trusted 10.23.20.0/24 自分のノート PC とスマートフォン インターネット、プロキシ、管理用端末から Management へ
30 Servers 10.23.30.0/24 VM、コンテナ、NAS、プロキシ、Pi-hole 更新用のインターネット
40 IoT 10.23.40.0/24 テレビ、スピーカー、カメラ、スマートプラグ インターネットのみ
50 Guest 10.23.50.0/24 来客 インターネットのみ

ファイアウォールからスイッチ、スイッチからアクセスポイント、スイッチから Proxmox はタグ付きトランクです。OPNsense のドキュメントは、ファイアウォールのトランクにタグなしの VLAN を混在させないよう警告しています。それ以外の機器にはタグなしのアクセスポートを割り当てます。

Proxmox ではブリッジを VLAN 対応にし、Proxmox VE のネットワークのドキュメントのとおり、ホストの管理アドレスを VLAN 10 に置きます。すると各 VM に個別の VLAN タグを付けられます。

auto vmbr0
iface vmbr0 inet manual
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 2-4094

auto vmbr0.10
iface vmbr0.10 inet static
    address 10.23.10.5/24
    gateway 10.23.10.1

無線の VLAN ごとに SSID を 1 つ作ります。Trusted、IoT、Guest の 3 つです。Cisco Meraki は推奨しています。アクセスポイント 1 台あたり最大 3 つまでです。各 SSID が最低データレートで 100 ms ごとに独自のビーコンを送るためです。

VLAN 間のファイアウォールルール

OPNsense と pfSense は、トラフィックが入ってくるインターフェースで、ルールを上から順に評価します。最初に一致したルールが適用され、どれにも一致しないものはデフォルト拒否に当たります。どちらもステートフルなので、Trusted からプロキシへの 443 を許可すれば、応答も戻れます。

各 VLAN について、必要な通信を許可し、RFC1918 という名前のエイリアスですべてのプライベート範囲をブロックし、そのあとでインターネットを許可します。IoT インターフェースでは次のようになります。

# アクション 送信元 宛先 ポート 理由
1 Pass IoT net Pi-hole、10.23.30.53 53 フィルタ済みの DNS
2 Block IoT net ファイアウォール自身のアドレス any 管理ページを見せない
3 Block IoT net RFC1918 エイリアス any 他の VLAN へは行かせない
4 Pass IoT net any any インターネット

ルール 2 は、エイリアスに含まれないファイアウォールのパブリック WAN アドレスをカバーします。pfSense ではこの宛先を This firewall (self) と呼びます。限定的な例外はブロックより上に置きます。Trusted からプロキシへの 443、管理用ノート PC から Proxmox の Web UI への 8006、Home Assistant から IoT への通信などです。エイリアスは IPv4 専用なので、VLAN に IPv6 プレフィックスを割り当てる場合は、そちらもブロックしてください。

キャストは毎回のように驚かされる点です。AirPlay と Google Cast は、224.0.0.251 のマルチキャスト DNS でデバイスを見つけますが、Apple によれば、これは通常サブネットをまたいでルーティングされません。OPNsense の os-mdns-repeater プラグインなどの mDNS リピーターを Trusted と IoT の間で動かし、Trusted からテレビへの通信を許可します。

リバースプロキシの背後のサービス

Servers VLAN に置いた 1 台のリバースプロキシ(Caddy、Traefik、Nginx Proxy Manager など)が TLS を終端し、ホスト名でルーティングします。そのためファイアウォールが 443 を許可する宛先は 1 つのアドレスだけです。

jellyfin.home.example.com のように、自分で所有するドメイン配下の名前を使います。.local は避けてください。RFC 6762 がマルチキャスト DNS 用に予約しています。.internal や home.arpa 配下の名前はローカルでは動きますが、公開 CA はそれらの証明書を発行しません。

証明書は DNS-01 チャレンジで Let's Encrypt から取得します。ACME クライアントが DNS プロバイダの API を通じて _acme-challenge.<name> に TXT レコードを作るので、インターネットから到達できる必要はありません。ワイルドカードを発行できるのもこの方式だけで、ワイルドカードは必要です。Let's Encrypt はすべての証明書を公開の Certificate Transparency ログに送信するため、*.home.example.com なら公開されるのはサービス一覧ではなく 1 つの名前だけです。Caddy 2.10 以降は、ほかのサイトが一致するワイルドカード証明書を再利用します。

*.home.example.com {
	tls {
		dns cloudflare {env.CF_API_TOKEN}
	}
	abort
}

jellyfin.home.example.com {
	reverse_proxy 10.23.30.21:8096
}

これには caddy-dns/cloudflare モジュール入りの Caddy ビルドと、Zone.Zone:Read と Zone.DNS:Edit に限定したトークンが必要です。証明書の有効期間は現在 90 日で、2028 年 2 月までに 45 日になるため、更新は自動化してください。

リモートアクセスの選択肢

選択肢 インターネットから見えるもの 手間 トレードオフ
443 をプロキシにポートフォワード 自分の IP と各アプリのログインページ 低 各アプリのログインが唯一の防壁。キャリアグレード NAT の内側では使えない
ファイアウォール上の WireGuard 認証されていないパケットを無視する UDP ポート 1 つ 中 到達可能なグローバル IP と、デバイスごとの鍵ペアが必要
Tailscale 受信はなし 低 Tailscale の調整サービス、またはセルフホストの Headscale に依存。無料の Personal プランは執筆時点(2026 年 11 月)のもの
Cloudflare Tunnel 受信はなし 低〜中 Cloudflare が TLS を終端してトラフィックを見る。ドメインが Cloudflare 上にある必要がある

自分用なら WireGuard が良い既定値です。WireGuard の論文によれば、認証されていないパケットには決して応答しないため、スキャナーからは見えません。それでも受信ポートが必要で、キャリアグレード NAT ではそれができません。WAN アドレスが RFC 6598 の共有範囲である 100.64.0.0/10 にあれば、その兆候です。

Tailscale と Cloudflare Tunnel は、代わりに外向きに接続します。Tailscale の DERP リレーは WireGuard で暗号化されたままのパケットを転送するだけで、サブネットルーターを使えば、すべての VM にクライアントを入れなくても Servers VLAN に届きます。VPN を入れてもらえない相手と共有するサービスには、トンネルが向いています。Cloudflare Access でログインを追加できます。ゼロトラストアーキテクチャ図では、ネットワーク上の位置よりアイデンティティが重要な理由を説明しています。

VLAN ごとの DNS と DHCP

ファイアウォールが各 VLAN で DHCP を提供し、サーバーには予約を割り当てます。OPNsense は、検証機能を持つ再帰リゾルバーの Unbound を既定で有効にしています。Trusted と IoT 向けに、Servers VLAN で Pi-hole か AdGuard Home を動かします。どちらも広告とトラッカーをフィルタし、*.home.example.com をプロキシに向けるローカルレコードを持ち、それ以外のクエリを Unbound に転送します(DNS の仕組みでは 1 回の名前解決を最初から最後まで追います)。ゲストはファイアウォールを直接使います。2 つ目のフィルタ用インスタンスを別のマシンで動かしてください。唯一のインスタンスが止まると、それらの VLAN は名前解決を失います。

バックアップと電源

3-2-1 に従います。3 つのコピー、2 種類のストレージ、1 つはオフサイトです。VM が 1 つ目のコピー、NAS または Proxmox Backup Server への夜間バックアップが 2 つ目、クラウドバケット上の暗号化コピーが 3 つ目です。Proxmox Backup Server は、増分、重複排除、暗号化されたバックアップを作成し、Proxmox は完全には信頼できない保存先でも安全だとしています。RAID とスナップショットはバックアップではありません。ファイアウォールの設定(OPNsense と pfSense では XML ファイル 1 つ)をエクスポートしてこの図と一緒に保管し、リストアをテストしてください。ディザスタリカバリアーキテクチャ図では RPO と RTO を扱っています。

ファイアウォール、スイッチ、Proxmox ホスト、NAS は UPS につなぎます。Network UPS Tools (NUT) では、UPS に接続したマシンがネットワーク経由でほかのマシンにシャットダウンを指示するため、スイッチも UPS につなぐ必要があります。容量は、コンセントでの消費電力とデータシートの稼働時間グラフから決めます。必要なのは数時間ではなく数分です。

ホームラボのネットワーク図

ネットワーク図。インターネットは OPNsense または pfSense ファイアウォールに届き、UDP 51820 の WireGuard だけを受け付けます。マネージドスイッチは VLAN 10〜50 をトランクします。VLAN 30 にはリバースプロキシ、Proxmox ホスト、NAS があります。アクセスポイントは SSID を Trusted、IoT、Guest の VLAN に対応付けます。

22 個のコンポーネント · 11 個の接続

Archboard で開く
ダイアグラムの内容
  • Internet
  • OPNsense or pfSense
  • Managed switch
  • Access point
  • VLAN 20 · Trusted
  • Laptops and phones
  • VLAN 40 · IoT
  • TV, cameras, plugs
  • VLAN 50 · Guest
  • VLAN 30 · Servers
  • Reverse proxy (Caddy)
  • Proxmox VE host
  • NAS (backups)
  • Links
  • deny inbound
  • WireGuard UDP 51820
  • trunk: 10–50
  • trunk: 10, 20, 40, 50
  • trunk: 10, 30
  • HTTPS 443 from Trusted and VPN
  • HTTP to apps
  • nightly backups
  • SSID home
  • SSID iot
  • SSID guest
OPNsense または pfSense ファイアウォールの内側にあるホームラボ。マネージドスイッチが 5 つの VLAN をトランクし、アクセスポイントが 3 つの SSID を VLAN に対応付け、Servers VLAN のリバースプロキシがアプリへの唯一の経路です。VLAN 間のそれ以外はすべて拒否します。

図の読み方は次のとおりです。

  • 最上段: インターネット、ファイアウォール、スイッチ。WAN は UDP 51820 の WireGuard(破線)を除くすべての受信を拒否します。
  • トランクはタグ付き VLAN を運びます: スイッチへは 10〜50、アクセスポイントへは PoE 経由で 10、20、40、50、Proxmox へは 10 と 30 です。
  • 枠は VLAN で、ID、名前、CIDR が付いています。VLAN 10 の Management は、スイッチの下のラベルです。
  • ティール色のエッジは許可された通信です: Trusted と VPN クライアントからプロキシへの HTTPS 443、そこからアプリへの HTTP です。灰色の破線は夜間バックアップです。
  • アクセスポイント は、SSID の home、iot、guest を VLAN 20、40、50 に対応付けます。
  • Markdown ブロック には VLAN 設計と設定が入っています。凡例はリンクの色を説明します。

ホームラボのネットワーク図をわかりやすく描くには

  • すべての VLAN に ID、名前、CIDR を付けて、枠そのものに書きます。
  • トランクには運ぶ VLAN を明記します。 あるトランクだけ VLAN が欠けているのは典型的なバグです。
  • ファイアウォールを VLAN 間の唯一の経路として描き、許可された通信にはポートを書きます。
  • 外からの入口を示します。 UDP ポート 1 つだけの場合でも同じです。
  • 省くもの: コンテナ、MAC アドレス、スイッチのポート番号。これらは物理図に属します。詳しくはネットワークトポロジー図のガイドを参照してください。
  • 設定のバックアップと一緒に保管し、ルールが変わったら更新します。

Archboard で作る

  1. Google または GitHub でサインインし、ダイアグラムを作成します。
  2. ネットワーク パックから、インターネット、OPNsense または pfSense というラベルの ファイアウォール、スイッチ を横一列に追加し、その右下にアクセスポイント用の 無線 ノードを追加します。
  3. VLAN 20、30、40、50 用に サブネット フレームを 4 つ追加し、それぞれに名前と CIDR を付けます。
  4. Servers の中に、リバースプロキシとして ロードバランサー(パックにはプロキシ型がありません)、Proxmox 用に サーバー、種類を NAS にした デバイス を追加します。Trusted にはノート PC の デバイス、IoT には IoT の デバイス を追加します。
  5. それらを接続し、各リンクの接続タイプを WAN、Ethernet、PoE、Wi-Fi のいずれかにして、VLAN または SSID をラベルに書きます。許可された通信はティールで、WireGuard とバックアップは破線で描きます。
  6. ネットワーク パックから ネットワーク凡例、基本 パックから VLAN 設計を書いた Markdown ブロック、基本の テキスト ラベルで各 VLAN のルールを追加します。

アプリが compose.yaml にあるなら、Docker Compose からダイアグラムへのツールがサービス側の下書きを作ります。ネットワーク図のページではパック全体を見られます。この例で使うダイアグラムノードは 15 個で、Free プランの範囲に収まります。これは Free のダイアグラムあたりの上限でもあります。

よくある質問

ホームラボにはどの VLAN が必要ですか? 通常は 5 つです。management、trusted、servers、IoT、guest です。デバイスごとに別のルールが必要なときだけ増やしてください。VLAN を増やすごとにルールが増え、SSID も増えることが多いです。

VLAN にはマネージドスイッチが必要ですか? はい。802.1Q 対応のマネージドまたはスマートスイッチと、SSID を VLAN に対応付けるアクセスポイントが必要です。アンマネージドスイッチではポートを VLAN に割り当てられません。

OPNsense や pfSense は Proxmox 上の VM で動かすべきですか? 機器が 1 台減りますが、ホストを再起動するたびに家全体がオフラインになります。小型の専用ファイアウォールのほうが復旧しやすいです。仮想化する場合は、WAN に専用の NIC を割り当て、設定のエクスポートをホストの外に置いてください。

セルフホストのサービスのためにポートを開けても安全ですか? アプリのログインページをインターネットに出すことになるため、そのセキュリティ更新があなたの防御になります。VPN をおすすめします。どうしても転送する場合は、443 だけをリバースプロキシに送り、前段に認証を追加してください。

内部だけのサービスに Let's Encrypt を使えますか? はい、DNS-01 を使います。TXT レコードでドメインの管理を証明するので、サービスがインターネットから到達できる必要はありません。ワイルドカードを使えば、サービス名を Certificate Transparency ログに載せずに済みます。

無料で始める — 1 シート、クレジットカード不要。

関連記事

← ブログに戻る

1分でキャンバスを開く

Google または GitHub でサインイン。1シートは無料で、チームが加わったらアップグレード。