構成例: Webサーバーとデータベースサーバーをローカルネットワークでつなぐ¶
構成の概要¶
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 2台(それぞれ、SSHで接続できる状態)
Webサーバーに、 Webサーバーを立ててページを表示する(Nginx/Apache) の手順で、Webサーバーが動作している(本文書では、公開の設定は扱いません)
手順¶
Step1. スイッチを作成する¶
コントロールパネルで、2台のサーバーを接続するスイッチを作成します。手順は、 スイッチの追加と削除 をご参照ください。
Step2. サーバーのNICをスイッチに接続する¶
Step3. ローカルネットワーク側の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>
ens4 として説明します。インターフェース名が異なる場合は、読み替えてください。Webサーバー(Ubuntu 24.04)
netplan の設定ファイルを、新しく作成します。
$ sudoedit /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
[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))
データベースと、接続用のユーザーを作成する¶
'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サーバーからの接続だけを許可する¶
$ 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
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 と表示されれば、ローカルネットワーク経由で接続できています。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のルールの追加が必要です)。
スイッチに接続しているサーバーがある場合、スイッチは削除できません。ローカルネットワーク接続をやめる場合は、すべての接続を切断してから、削除してください( スイッチの追加と削除 )。