サブネット
Subnet
概要(サマリー)
サブネット(Subnet)とは、一つの大きなネットワークを、セキュリティや管理をしやすくするために細かく分割した、いくつかの「小さなネットワーク」のことである。
オフィスの「部署ごとの間仕切り(部屋分け)」にたとえられる。会社全体で一つの広いフロア(大きなネットワーク)をそのまま使うと、全員の会話(データ)が混ざってうるさくなり、関係者以外に秘密の話(重要な情報)が漏れてしまう。そこで「開発部」「総務部」といった部屋(サブネット)に区切り、それぞれの部屋ごとに通信を整理したり、セキュリティ上の立ち入り制限をかけたりする。
詳細解説
サブネットとは何か
インターネットや社内ネットワークに接続する機器は、すべてIPアドレスという住所を持っている。
しかし、数千台のPCが一つの同じネットワークに繋がっていると、誰か一人が送った一斉送信データ(ブロードキャスト)が全員に届いてしまい、回線が非常に混雑する。また、一般社員のPCから、給与データを扱うデータベースへ制限なしにアクセスできてしまうのはセキュリティ上極めて危険である。
そこで、IPアドレスの範囲をグループ分けし、独立したネットワーク領域(サブネット)に細分化して管理する。
サブネットマスクとCIDR表記
ネットワークを「どこで区切るか」を指定する仕組みとして、サブネットマスクやCIDR(サイダー)表記が使われる。
1. サブネットマスク
IPアドレス(例:192.168.1.15)の「どこまでがグループ名(ネットワーク部)で、どこからが個人の番号(ホスト部)か」を 255.255.255.0 のような形式で表したもの。
* 255の部分: グループ名。同じグループの機器は全員同じ値にする必要がある。
* 0の部分: 個人用の席番号。この範囲内で自由に番号を割り振る。
2. CIDR表記
サブネットマスクをよりシンプルに /24 のように表現する書き方(IPアドレスの左から何ビット目までをグループ名にするか)。
* 192.168.1.0/24: 左から24ビット分(=最初の3つの数字 192.168.1)がグループ名となり、最後の数字(残り8ビット、256通り)を各機器に割り振る。
なぜサブネットが必要なのか
- セキュリティの向上(ネットワーク分離):
インターネットと通信するWebサーバーが入る部屋(パブリックサブネット)と、顧客情報が入るデータベースサーバーの部屋(プライベートサブネット)を分けることで、外部のハッカーが直接データベースに侵入できないように防ぐことができる。 - 通信混雑(ブロードキャストストーム)の回避:
不要な一斉送信通信が別の部屋に流れ込まないようにシャットアウトし、ネットワーク全体の速度低下を防ぐ。
クラウド環境でのサブネット設計
AWSやGoogle Cloudなどのクラウドサービスでは、仮想ネットワーク(VPC / Virtual Private Cloud)の中にサブネットを作ることが一般的な設計である。
パブリックサブネット(インターネットゲートウェイを経由して外部と通信できる領域)にWebサーバーを配置し、プライベートサブネット(外部から直接アクセスできない領域)にデータベースを配置することで、外部からデータベースに直接触れられない堅牢な構成が実現できる。この「パブリック/プライベートのサブネット分離」は、クラウドインフラ設計の基本パターンとして広く採用されている。
AIコーディングとの関係
インフラ開発(AWSでのネットワーク構築や、Dockerを使ったローカルの開発環境構築など)において、サブネットの設定コード(IaC)をAIに生成させることがよくある。
- Docker Composeでのネットワーク設計指示:
AIに対して、「フロントエンドコンテナとバックエンドコンテナは同じネットワーク(サブネット)にし、データベースコンテナはバックエンドからしかアクセスできないように別のサブネットに分離した Docker Compose のコードを書いて」と指示する。
これにより、セキュリティに配慮した強固なローカル環境を構築できる。
Dockerでのネットワーク(サブネット)分離の例(AI生成):
version: '3.8'
services:
web:
image: nginx
networks:
- frontend_net # フロントエンド用ネットワークに接続
api:
image: node-app
networks:
- frontend_net # フロントエンドとバックエンドの両方に接続
- backend_net
db:
image: postgres
networks:
- backend_net # バックエンド用ネットワークのみ(webコンテナからは直接アクセスできない)
networks:
frontend_net:
ipam:
config:
- subnet: 172.20.0.0/16 # 独立したサブネットの範囲を指定
backend_net:
ipam:
config:
- subnet: 172.30.0.0/16
よくある勘違い
サブネットを分けると、別の部屋のPCとは絶対に通信できなくなる?
通信できなくなるわけではない。
サブネット同士を接続し、データの交通整理を行う「ルーター(またはレイヤー3スイッチ)」という機器を通すことで、ルール(ルーティングテーブル)に従った安全な通信を許可できる。サブネット化は「無制限な通信を禁止し、セキュリティと速度を管理できるようにコントロールする」ためのものであり、完全に遮断して孤立させるわけではない。
サブネットマスクはどれを使っても同じ?
設定を間違うと通信ができなくなる。
同じ部屋(サブネット)で通信し合いたい2台のPCのIPアドレスが、サブネットマスクの計算上「別のグループ」になってしまうと、ルーターを経由しない限り隣同士であっても通信が一切届かなくなる。ネットワーク機器を設定する際は、IPアドレスとサブネットマスクが論理的に正しく一致しているかを確認する必要がある。
サブネットを細かく分けるほど良い?
必ずしもそうではない。
サブネットを細かく分けすぎると、管理するネットワークの数が増えてルーター設定が複雑になり、保守の難易度が上がる。また、サブネットごとに使えるIPアドレス数に上限があるため、過剰に分割するとIPアドレスが足りなくなることもある。「セキュリティや管理上の必要性」と「管理の複雑さ」のバランスを考えながら、適切な粒度でサブネットを設計することが重要である。
まとめ
- サブネットは、一つの大きなIPネットワークをセキュリティや混雑防止のために細分化した小さなネットワーク。
- 「どこまでが同じグループか」を表すために、サブネットマスクやCIDR(
/24など)を使う。 - クラウド環境(AWSなど)では、外部公開するパブリックサブネットと、内部のみのプライベートサブネットを分ける設計が基本。
- AIにインフラコードを作らせる際は、コンテナやサーバーの役割に応じたネットワークの分離を指示することが安全性の向上に繋がる。
情報ソース
より詳しくAIに聞いてみよう
- IPアドレス
192.168.10.35でサブネットマスクが255.255.255.240の場合、同じサブネットに所属できるIPアドレスの範囲を計算する方法を教えてください。 - AWSの「VPC」を構築する際、パブリックサブネットとプライベートサブネットを分ける設定方法と、プライベート側からインターネットに繋ぐ「NATゲートウェイ」の役割を教えてください。
- CIDR表記の
/24や/16といった数値が表す意味と、それによって割り振れる最大IPアドレス数の関係を初心者向けに解説してください。 - DockerでコンテナごとにIPアドレスを固定(静的IPの割り当て)するための
docker-compose.ymlの記述方法を教えてください。 - 自宅のWi-Fiルーターの設定画面にある「ゲストポート(ゲストSSID)」機能が、サブネットの仕組みとどのように関係しているか教えてください。