構成例: Webサーバーとデータベースサーバーをローカルネットワークでつなぐ

[更新: 2026年11月12日]

さくらのVPS2台を、ローカルネットワークでつなぎ、Webサーバーとデータベースサーバーに役割を分ける構成を紹介します。
データベースサーバーは、インターネットからは接続できず、ローカルネットワークの、Webサーバーからだけ接続できるようにします。
本文書では、Webサーバーに標準OSのUbuntu 24.04を、データベースサーバーに標準OSのRocky Linux 10を使い、データベースにMariaDBを使う例を説明します。

構成の概要

Webサーバー

データベースサーバー

OS

Ubuntu 24.04

Rocky Linux 10

NIC1(インターネット側)

公開する(80番など)

SSH(22番)のみ

NIC2(ローカルネットワーク側)

192.168.1.1/24

192.168.1.2/24

動作するソフトウェア

Webサーバー、MariaDBクライアント

MariaDBサーバー(3306番)

この構成の特徴は、次のとおりです。

  • データベースは、ローカルネットワーク側のIPアドレス(192.168.1.2)だけで待ち受けます。

  • データベースへの接続は、Webサーバー(192.168.1.1)からのみ許可します。

  • インターネット側から、データベースには接続できません。

Note

ローカルネットワーク接続は、同じゾーン内の、同じスイッチに接続したサーバーどうしで利用できます。ゾーンをまたいだ接続はできません。
また、ローカルネットワーク接続は、さくらのVPS(バージョン v3以降)で利用できます。

あらかじめ用意するもの

手順

Step1. スイッチを作成する

コントロールパネルで、2台のサーバーを接続するスイッチを作成します。手順は、 スイッチの追加と削除 をご参照ください。

Step2. サーバーのNICをスイッチに接続する

2台のサーバーのNIC2を、Step1で作成したスイッチに接続します。手順は、 ローカルネットワーク接続 をご参照ください。
サーバーが起動している状態では、接続を変更できない場合があります。その場合は、サーバーを停止してから設定してください。

Step3. ローカルネットワーク側のIPアドレスを設定する

2台のサーバーに、ローカルネットワーク側のIPアドレスを設定します。
ここでは、プライベートアドレスの 192.168.1.0/24 を使います。2台が同じネットワークに入るよう、アドレスの範囲をそろえてください。

まず、NIC2のインターフェース名を確認します。NIC1より後ろに表示されるものが、NIC2です。

$ ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
ens3             UP             XX:XX:XX:XX:XX:XX <BROADCAST,MULTICAST,UP,LOWER_UP>
ens4             DOWN           XX:XX:XX:XX:XX:XX <BROADCAST,MULTICAST>
本文書では、NIC2を ens4 として説明します。インターフェース名が異なる場合は、読み替えてください。
コントロールパネルのネットワークの画面に表示される、NIC2のMACアドレスと、一致するものを選んでください。

Webサーバー(Ubuntu 24.04)

netplan の設定ファイルを、新しく作成します。

$ sudoedit /etc/netplan/02-local.yaml
/etc/netplan/02-local.yaml
network:
  version: 2
  ethernets:
    ens4:
      addresses:
        - 192.168.1.1/24
$ sudo chmod 600 /etc/netplan/02-local.yaml
$ sudo netplan apply

Note

設定ファイルのアクセス権限が、ほかのユーザーから読める状態だと、 netplan が警告を表示します。上記のとおり、 chmod 600 で権限を制限してください。
既存の 01-netcfg.yaml は、変更しません。

データベースサーバー(Rocky Linux 10)

nmcli で、NIC2の接続を新しく作成します。

$ sudo nmcli con add type ethernet ifname ens4 con-name local ipv4.method manual ipv4.addresses 192.168.1.2/24 ipv6.method disabled
$ sudo nmcli con up local

設定の確認

それぞれのサーバーで、アドレスが設定されていることを確認します。

$ ip -4 -br a show ens4
ens4             UP             192.168.1.1/24

Webサーバーから、データベースサーバーに ping を実行して、通信できることを確認します。

$ ping -c 3 192.168.1.2
3 packets transmitted, 3 received, 0% packet loss, time 2063ms

Note

ping が通らない場合は、2台のNIC2が、同じスイッチに接続されているかを、コントロールパネルで確認してください。
接続されていない場合、 ip neigh の結果が INCOMPLETE のままになります。

Step4. データベースサーバーを設定する

以降の手順は、データベースサーバー(Rocky Linux 10)で行います。

MariaDBをインストールして、起動する

$ sudo dnf install -y mariadb-server
$ sudo systemctl enable --now mariadb

起動した直後の状態では、MariaDBは、すべてのネットワークインターフェース(インターネット側を含む)で、3306番を待ち受けます。

$ sudo ss -tlnp | grep 3306
LISTEN 0      80           0.0.0.0:3306      0.0.0.0:*    users:(("mariadbd",pid=XXXXX,fd=20))
LISTEN 0      80              [::]:3306         [::]:*    users:(("mariadbd",pid=XXXXX,fd=21))

警告

この状態のまま、インターネットに公開すると、データベースへの不正な接続の試行を受ける可能性があります。
次の手順で、待ち受けるアドレスと、接続を許可する相手を、制限してください。

ローカルネットワーク側だけで待ち受けるようにする

設定ファイルを新しく作成します。

$ sudoedit /etc/my.cnf.d/60-local.cnf
/etc/my.cnf.d/60-local.cnf
[mysqld]
bind-address=192.168.1.2

MariaDBを再起動して、待ち受けているアドレスを確認します。

$ sudo systemctl restart mariadb
$ sudo ss -tlnp | grep 3306
LISTEN 0      80       192.168.1.2:3306      0.0.0.0:*    users:(("mariadbd",pid=XXXXX,fd=20))

データベースと、接続用のユーザーを作成する

Webサーバーからだけ接続できるユーザーを作成します。ユーザー名の後ろの '192.168.1.1' が、接続を許可するサーバー(Webサーバー)のアドレスです。
appdb 、 webapp 、 PASSWORD の部分は、お客様の環境に合わせて、変更してください。
$ sudo mariadb
MariaDB [(none)]> CREATE DATABASE appdb;
MariaDB [(none)]> CREATE USER 'webapp'@'192.168.1.1' IDENTIFIED BY 'PASSWORD';
MariaDB [(none)]> GRANT ALL ON appdb.* TO 'webapp'@'192.168.1.1';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT

Note

PASSWORD には、推測されにくい、十分に長いパスワードを設定してください。

ファイアウォールで、Webサーバーからの接続だけを許可する

Rocky Linux 10では、OS内のファイアウォール(firewalld)で、送信元のアドレスを限定して、3306番を許可します。
firewalldを有効にしていない場合は、先に Firewalldの設定方法 をご参照いただき、 SSH(22番)を許可してから有効にしてください。
$ sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.1/32 port port=3306 protocol=tcp accept"
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-rich-rules
rule family="ipv4" source address="192.168.1.1/32" port port="3306" protocol="tcp" accept

Note

パケットフィルターは、インターネット側(NIC1)の通信にだけ適用され、ローカルネットワーク側の通信には適用されません。
そのため、ローカルネットワーク側の通信は、OS内のファイアウォールで制限します。

Step5. Webサーバーから接続する

以降の手順は、Webサーバー(Ubuntu 24.04)で行います。

MariaDBのクライアントをインストールして、データベースサーバーに接続します。

$ sudo apt install -y mariadb-client
$ mariadb -h 192.168.1.2 -u webapp -p appdb
Enter password:
MariaDB [appdb]>

接続できたら、動作を確認します。

MariaDB [appdb]> SELECT @@hostname AS db_host, USER() AS who;
+-------------------------------+--------------------+
| db_host                       | who                |
+-------------------------------+--------------------+
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXX | webapp@192.168.1.1 |
+-------------------------------+--------------------+
db_host が、データベースサーバーのホスト名で、 who が、 webapp@192.168.1.1 と表示されれば、ローカルネットワーク経由で接続できています。
Webアプリケーションの設定では、データベースのホストに、 192.168.1.2 を指定します。

Step6. インターネット側から接続できないことを確認する

データベースサーバーのインターネット側のアドレスに、接続できないことを確認します。

インターネット側のアドレスへ接続する場合
$ mariadb --connect-timeout=5 -h XXX.XXX.XXX.XXX -u webapp -p
ERROR 2002 (HY000): Can't connect to server on 'XXX.XXX.XXX.XXX' (110)
XXX.XXX.XXX.XXX は、データベースサーバーの、インターネット側のIPアドレスです。
ERROR 2002 と表示され、接続できなければ、期待どおりの状態です。

また、パスワードが誤っている場合は、接続が拒否されます。

パスワードを誤った場合
$ mariadb --connect-timeout=5 -h 192.168.1.2 -u webapp -pWRONG -e 'select 1'
ERROR 1045 (28000): Access denied for user 'webapp'@'192.168.1.1' (using password: YES)

運用上の注意

  • データベースのバックアップは、お客様にて取得してください。データベースサーバーの障害や、操作の誤りに備えて、定期的な取得を検討してください。

  • サーバーを増やす場合は、接続を許可するアドレスを追加します(ユーザーの追加と、firewalldのルールの追加が必要です)。

  • スイッチに接続しているサーバーがある場合、スイッチは削除できません。ローカルネットワーク接続をやめる場合は、すべての接続を切断してから、削除してください( スイッチの追加と削除 )。

完了の確認

次の項目を確認してください。

  • 2台のNIC2が、同じスイッチに接続されている

  • Webサーバーから、データベースサーバーの192.168.1.2に、 ping が通る

  • MariaDBが、 192.168.1.2 だけで、3306番を待ち受けている

  • Webサーバーから、 webapp ユーザーで、データベースに接続できる

  • インターネット側のアドレスから、データベースに接続できない

  • データベースへの接続を許可するアドレスを、必要なサーバーだけに限定している