【挑戦と挫折】0円の自作PCを最強VPSサーバー化しようとしたら、まさかの結末が…

「余ったPCパーツで、自分だけの最強サーバーが作れたら最高じゃないか?」

先日、友人からパーツを譲り受けたことで、偶然にも実質0円でハイスペックな自作PCが1台組み上がりました。

なおくん

今契約してる月額数千円のVPS、スペック不足でアプリが遅いんだよな…。このPCをサーバーにすれば、コストも浮くし爆速になるのでは…?

こんな夢のような計画から、私の「自作PC・VPS化計画」は始まりました。サーバーOSをインストールし、ネットワーク設定を学び、完璧な環境を構築。しかし、その先には全く予想外の「巨大な壁」が待ち受けていたのです…。

本記事では、私が体験した自作PCのサーバー化挑戦の全記録を、技術的な解説を交えながら赤裸々に語ります。そして、多くの人が見落としがちな自宅サーバー構築の致命的な落とし穴について、私の失敗談から学んでいただければ幸いです。

この記事を読み終える頃には、あなたは自宅サーバーの夢と現実を知り、同じ轍を踏むことなく、より賢明な選択ができるようになっているはずです。

この記事で分かること
  • 余った自作PCをサーバーにする具体的な計画と手順
  • VPS、レンタルサーバー、自宅サーバーの根本的な違い
  • Webサーバー公開に必要なネットワークの仕組み(IPアドレス、DNS、ポート開放)
  • 私が直面した、自宅サーバー化を阻む「CGNAT」という壁の正体
  • 挑戦が失敗に終わっても、そこから得られた学びと次のステップ
目次

発端:月額数千円のVPSより高性能な「0円PC」が爆誕

先日、私は1台の新しいPCを組み上げました。 友人がPCを新調するとのことで、これまで使っていたパーツをいくつか譲り受けたのです。それと、私の手元で眠っていたパーツを組み合わせ、新たな自作PCが誕生しました。

なおくん

すでにメインで使ってるWindows11 ProのPCがあるし、デスクトップ2台もどう使い分ければいいんだ…?

そう、デスクトップPCは1台で十分。この新しいPCをどう活用すべきか…と思案していたところ、ふとある問題を思い出しました。 現在契約しているVPS(仮想専用サーバー)で動かしている自作Webアプリが、スペック不足でどうにも動作が遅いのです。

ここで、契約中のVPSと、今回「実質0円」で組み上がったPCのスペックを比較してみましょう。

項目契約中のVPS今回の自作PC
CPU4コア(vCPU)Ryzen7 3700X(8コア16スレッド)
メモリ4GB48GB
ストレージNVMe SSD 150GBNVMe M.2 SSD 1TB
費用月額1,000~2,000円0円
なおくん

すでにメインで使ってるWindows11 ProのPCがあるし、デスクトップ2台もどう使い分ければいいんだ…?

この圧倒的なスペック差を見て、私は決意しました。

「そうだ、この自作PCを自分専用のVPSサーバーにしてしまえば、月額料金も節約できて、アプリもサクサク動く。一石二鳥じゃないか!」

こうして、私の壮大(?)な「自作PC・VPS化計画」は幕を開けたのです。

そもそもVPSとは?レンタルサーバーや自宅サーバーとの違い

計画を進める前に、まずは「VPS」という言葉について、少しだけおさらいしましょう。サーバーにはいくつかの種類があり、それぞれに特徴があります。

簡単に言うと、VPS(Virtual Private Server)は、1台の物理的なサーバーを、ソフトウェアを使って仮想的に複数に分割し、それぞれを「あなただけの専用サーバー」のように使えるサービスです。

他のユーザーの影響を受けにくく、管理者権限(root権限)があるのでOSやソフトウェアを自由にインストールできるのが大きな特徴です。

それぞれのサーバー形式メリット・デメリット比較

サーバー形式メリットデメリットこんな人におすすめ
共用レンタルサーバー・安い
・管理が楽
・自由度が低い
・他ユーザーの影響を受けやすい
ブログ初心者、webサイト運営が目的の人
VPS・自由度が高い
・コスパが良い
・サーバー管理の知識が必要webアプリ開発者、自分だけの環境を構築したい人
専用サーバー・高性能
・自由度が最高
・非常に高価
・高度な管理知識が必要
大規模サービスを畝井する企業
自宅サーバー・初期投資のみ
・高性能
・完全に自由
・電気代や回線費がかかる
・セキュリティ管理が自己責任
探究心旺盛な人(俺)、究極の自由を求める人(俺)

今回私がやろうとしているのは、この「自宅サーバー」を構築し、VPSのように使おうという試みです。

デメリットとして電気代と回線費がかかりますが、実家なので電気代は自己負担0円、回線も専用回線ではなく自宅の回線を利用します。

今回目指す「自分専用VPS」の構成と技術選定の理由

さて、自宅サーバーを構築するといっても、ただPCにOSを入れれば終わりではありません。Webアプリを動かすためには、いくつかのソフトウェアを適切に組み合わせる必要があります。

OS:なぜ「Ubuntu Server」を選ぶのか

サーバーの土台となるOSには、Ubuntu Serverを選びました。 理由はシンプルで、以下のメリットがあるからです。

  • 無料: 個人開発において、コストがかからないのは最大の正義です。
  • 情報量の多さ: 世界中で最も使われているサーバーOSの一つなので、トラブルが起きても検索すれば大抵の解決策が見つかります。
  • 安定性と実績: 長年にわたり、多くの企業や開発者に支持されてきた実績があります。

サーバー用途なので、GUI(グラフィカルな操作画面)がなく軽量な「Server」版を選択します。

Webアプリ:なぜ「Python + Flask」なのか

私は生粋のPythonプログラマーなので、Webアプリも当然Pythonで開発します。フレームワークにはFlaskを採用しました。

PythonのWebフレームワークには「Django」という有名なものもありますが、個人で小規模なアプリを作る私にとっては、最低限の機能で軽量かつ自由度の高いFlaskが最適なのです。最近では「FastAPI」も人気ですが、文法がFlaskと似ているため、Flaskが使えれば応用が効きます。

サーバー構成:なぜ「Nginx + Gunicorn」が現代の主流なのか

Flaskで作ったWebアプリをインターネットに公開するためには、「Webサーバー」と「WSGIサーバー」という2つのソフトウェアが必要です。

WebサーバーとWSGIサーバーの役割

簡単に言うと、Webサーバー(英語話者)が外部からのリクエストを受け取り、WSGIサーバー(通訳)がそれをPython製のFlaskアプリ(日本語話者)が理解できる形に変換して橋渡しをします。この連携プレーによって、Webアプリは動作するのです。

この組み合わせにはいくつか選択肢がありますが、今回は「Nginx + Gunicorn」という構成を選びました。これが現代において最も人気があり、バランスの取れた構成だからです。

構成メリットデメリット
Nginx + Gunicorn・パフォーマンスが高い
・設定がシンプル
・Apachよりは機能が少ない
Nginx + uWSGI・さらに高パフォーマンス
・柔軟な設定が可能
・設定が複雑で上級者向け
Apache + mod_wsgi・設定の柔軟性(.htaacess)
・伝統的な実績と安定性
・Nginxに比べパフォーマンスで劣る

個人開発でシンプルかつ高性能を目指すなら「Nginx + Gunicorn」が最適な選択と言えるでしょう。

自宅サーバー公開に必須!ネットワークの「住所」の仕組み

サーバーの構成が決まったら、次はそれを「世界中からアクセス可能」にするためのネットワーク設定について理解する必要があります。ここが自宅サーバー構築の肝であり、少し複雑な部分です。

グローバルIPとローカルIP:家の外の住所と部屋番号

IPアドレスには大きく分けて2種類あります。

  • グローバルIPアドレス: インターネットの世界における、あなたの家(ルーター)の世界で一つだけの住所です。プロバイダーから割り当てられます。
  • ローカルIPアドレス: あなたの家の中だけで使われる住所です。Wi-Fiに接続されたPCやスマホ、ゲーム機など、一つ一つの機器に割り当てられます。いわば「リビングのPC」「寝室のスマホ」といった部屋番号のようなものです。

外部の人があなたのサーバーにアクセスするには、まず「グローバルIPアドレス」を頼りにあなたの家までたどり着き、そこから特定の「ローカルIPアドレス」を持つサーバーPCに繋いでもらう必要があります。

ドメインとDNS:インターネット世界の「表札」と「電話帳」

「123.45.67.89」のような数字の羅列であるIPアドレスは、人間には覚えにくいですよね。そこで登場するのがドメイン(例: google.com)です。これはIPアドレスに付けられた、分かりやすい「表札」のようなものです。

そして、そのドメイン名とIPアドレスを結びつけて管理しているのがDNSサーバーで、インターネット世界の「電話帳」の役割を果たしています。

ポート開放:特定の通信だけを通す「専用窓口」

あなたの家(ルーター)には、外部からの通信を通すためのドア(ポート)がたくさんあります。セキュリティのため、普段これらのドアは固く閉ざされています。

Webサイトの閲覧に使われる通信(HTTP/HTTPS)は、通常80番や443番のポートを通ります。自宅サーバーを公開するには、ルーターに「80番ポートに来た通信は、サーバーPC(ローカルIP: 192.168.1.10など)に繋いでください」と設定してあげる必要があります。これをポート開放(ポートフォワーディング)と呼びます。

固定IPアドレス:サーバーの住所を固定する理由

通常、PCやスマホのローカルIPアドレスは、ルーターの再起動などで変わってしまうことがあります。サーバーの住所が変わってしまうと、ポート開放の設定が無意味になり、外部から誰もたどり着けなくなってしまいます。

そうならないために、サーバーPCのローカルIPアドレスは「常にこの番号(例: 192.168.1.10)を使う」というように固定しておく必要があります。

いざ実践!自作PCにサーバーOSをインストール

理論はここまで。いよいよ実践です!

STEP
Ubuntu Serverのイメージファイルを準備

まずは公式サイトからUbuntu ServerのISOイメージファイルをダウンロードします。そして、「balenaEtcher」のようなツールを使って、余っていたmicroSDカードにイメージファイルを書き込みます。

STEP
サーバーPCにインストール

作成したmicroSDカードを自作PCに接続し、そこから起動します。あとは画面の指示に従って、対話形式でインストールを進めるだけ。非常に簡単です。

サーバー構築とポート開放、そして運命のアクセス確認

OSのインストールが無事完了。ここからは、私のメインPCからSSHという機能を使って、サーバーPCに遠隔で接続して作業を進めます。

SSHで接続し、各種ソフトウェアをインストール

まずは、以下のコマンドで必要なソフトウェアをインストールしていきます。

# パッケージリストを更新
sudo apt update

# NginxとPythonをインストール
sudo apt install nginx python3-pip python3-venv -y

# Gunicornをインストール
pip install gunicorn

次に、動作確認用の簡単なFlaskアプリ (app.py) を作成します。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, My VPS World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

そして、サーバーのローカルIPアドレスを192.168.1.50に固定する設定も、yamlファイルを編集して完了させました。

Flaskアプリを起動し、ルーターのポート開放設定を行う

サーバー側でFlaskアプリを起動し、準備は万端。 最後に、自宅のルーターの設定画面にアクセスし、ポート開放(仮想サーバー)の設定を行います。

「外部からの80番ポートへのアクセスは、内部のIPアドレス192.168.1.50の80番ポートへ転送する」という設定を追加しました。

なおくん

よし、これで完璧だ!自分のグローバルIPアドレスにアクセスすれば、世界中どこからでも”Hello, My VPS World!”が見えるはず…!

ローカル接続は成功、しかし外部からは…

期待に胸を膨らませ、まずはスマホをWi-Fiに繋いだ状態(ローカルネットワーク内)で、サーバーのIPアドレスにアクセス。

…表示された!「Hello, My VPS World!」 サーバーは正常に動いています。

次に、スマホのWi-Fiを切り、モバイル回線(外部ネットワーク)から、我が家のグローバルIPアドレスにアクセスします。

なおくん

さあ、感動の瞬間だ…!

…しかし。 いくら待っても、ページは表示されません。「このサイトにアクセスできません」という無情なメッセージが表示されるだけです。

あれ…?設定ミスかな?

その後、ルーターの設定を見直し、サーバーのファイアウォールを確認し、考えられる全ての試行錯誤を繰り返しましたが、結果は同じでした。

巨大な壁「CGNAT」とは?自宅サーバー化の夢、破れる

万策尽きた私は、途方に暮れながら原因を調べていました。 そして、ある一つのキーワードにたどり着きます。

我が家の回線は「CGNAT」だった

調査の結果、私が契約しているプロバイダー「eo光」のインターネット接続サービスが、CGNAT(キャリアグレードNAT)という仕組みを採用していることが判明しました。そして、このCGNATこそが、外部からアクセスできない全ての元凶だったのです。

CGNATの仕組みと、なぜ外部からアクセスできないのか

通常、グローバルIPアドレスは各家庭に一つずつ割り当てられます。しかし、IPアドレス(特にIPv4)は世界的に枯渇しており、数が足りません。

そこで登場したのがCGNATです。 これは、プロバイダー側で一つのグローバルIPアドレスを、複数の契約者(家庭)で共有する技術です。

例えるなら、巨大なマンション(プロバイダー)全体で、一つのポスト(グローバルIPアドレス)を共有しているような状態です。 この状態では、外部から「マンション宛」に手紙を送っても、どの部屋の住人(契約者)に届けたいのか、マンションの管理人は判断できません。

これと同じ理由で、CGNAT環境下では、グローバルIPアドレスを指定して特定のサーバーにアクセスすることが、原理的に不可能なのです。

「そんな…、サーバーのスペックでも、設定でもなく、まさか大元のネット回線が原因だったなんて…。」

ちなみに、調べてみると、月額+4,000円ほどの追加料金で固定グローバルIPアドレスを契約できるオプションもあるようでした。しかし、月額料金を節約するために始めた計画で、逆にVPSより高い料金を払うのは本末転倒です。

こうして、私の「自作PC・VPS化計画」は、夢と散ったのでした。

まとめ:挑戦は失敗した。しかし無駄ではなかった

今回の挑戦を改めて振り返ります。

本記事のまとめ
  • 余った自作PCパーツで、高性能なサーバーPCを構築。
  • 月額料金節約のため、VPSの代わりに自宅サーバー化に挑戦。
  • Ubuntu Server, Nginx, Gunicorn, Flaskで環境を構築。
  • ポート開放など、全てのサーバー設定は完璧だった。
  • しかし、契約プロバイダーが「CGNAT」だったため、外部からのアクセスは不可能だった。

結論として、Webサーバーを自宅で公開するという夢は叶いませんでした。 しかし、この挑戦は決して無駄ではありませんでした。IPアドレスの仕組み、ポート開放、サーバー構築の一連の流れ、そして何よりCGNATという現代のインターネット事情について、身をもって学ぶことができたからです。

なおくん

これから自宅サーバーに挑戦しようと考えているあなた。まずはご自身のプロバイダーがCGNAT環境でないか、確認することから始めてみてください!

ちなみに、この高性能サーバーは今、外部公開が不要なDiscordのBotを動かしたり、定期的にデータ処理を行うスクリプトの実行環境として、元気に第二の人生を歩んでいます。これはこれで、アリなのかもしれません。

結局のところ、手軽さと確実性を求めるなら、やはり専門のVPSサービスを利用するのが最良の選択肢と言えそうです。

目次