KagoyaのVPSで多層ネットワークを構築する

はじめに

サーバーネットワークの一般的な構成と言えば、Webサーバー、アプリサーバー、データベースサーバーを多層にネットワークを分ける設計がよく用いられます。

この構成はAWS、Azure、GCP などのクラウドでも構築できます。しかし高い。
国内では、さくら、ConoHa、Kagoyaで構築できますが、さくらは月額課金しかなく、ConoHaは性能が低いため、ちょうど良い業者は「Kagoya」になります。

Kagoyaは京都にデータセンターを持つ企業で、主に法人向けのデータセンターのラック貸しなどで稼いでいるのですが、個人向けにもVPSサービスを提供しているという背景を持っています。

さて、なぜ多層にするかというと、これはKagoyaのセキュリティ設定が理由になります。
kagoyaには「セキュリティグループ」というAWSに似たファイアウォールの設定があるのですが、これが各サーバーの入り口に設定されます。(サーバー上でiptablesを設定しているような状態)
このため、サーバー上で特定のポートを空けていると、全世界に晒しっぱなしになってしまいます。

アプリケーションサーバーであれば、APIのエンドポイントのポート(3000とか9000とかがよく使われる)が、データベースサーバーならデータベースのポートが開いた状態になります。

これは流石に宜しくないということで、使用できるネットワークを絞ってしまうのが今回の対応です。

※ ちなみにConoHaやXserverはインターネット直下にFWがあるのか、VPS間はポートが空いている状態となります。インターネット向けのみ制限します。

環境

クラウド:Kagoya VPS (KVM)
OS:Rocky Linux 8.7 (CentOS系)

ネットワーク構成

こんな感じのネットワークを作ります。Webサーバーは1台だけですのでイメージです。

ただし、各サーバーはそれぞれインターネットに接続するグローバルIPを持っているため、完全なクローズドネットワークではない点に注意。管理の都合上、SSHには繋ぎたいので22番ポートだけは空けておきます。

SSHも閉じる場合は、マネジメントネットワークを別途作り、中継サーバー(踏み台サーバーとも呼ばれる)を経由して各サーバーに繋いだりします。ただしここではやらないので割愛。

設定方法

さて、では設定していきます。

基本的には以下の公式マニュアルに記載の通りなのですが、OSなど色々と情報が古いので、私のやった手順を残しておきます。

マニュアル - KAGOYA CLOUD VPS サポートサイト - ローカルネットワークの作成
はじめに KVMを利用している場合、複数のインスタンスをローカルネットワークで接続できます。 ローカルネットワークで接続したインスタンス同士で通信するには、サーバー側でネットワーク設定をする必要があります。 ⇒ サーバー側の設定 ロードバランサーを追加した場合、同時にローカルネットワークも追加されます。 作成可能な...

ちなみに黒塗りはサービス名などが入っているため隠しています。ご了承を。

サーバー

まず、①ロードバランサー(front_lb)、②Webサーバー(server1)、③データベースサーバー(db_master)の3つを作成し、全てシャットダウンしてしまいます。(シャットダウンしないとネットワークを付与できないため)

ネットワーク

ネットワークは以下のように割り当てます。
db_networkとserver_networkの両方にserver1を割り当てる必要がある点に注意。

セキュリティグループ

セキュリティグループは以下のようにしました。
SSHだけはCI/CDで使用したいためグローバルIPでもアクセスできるようにしてあります。
この辺はお好みで。

サーバー内の設定

Webの管理画面からの設定はここまでです。
次に、サーバーを起動し、各インターフェースにIPアドレスを割り当てていきます。

front_lb

まず、追加されたネットワークインターフェースを確認します。eth1が追加されているようです。

# nmcli device
DEVICE  TYPE      STATE                                  CONNECTION         
eth0    ethernet  connected                              System eth0        
eth1    ethernet  connecting (getting IP configuration)  Wired connection 1 
lo      loopback  unmanaged                              --   

eth1に割り当てられているコネクション”Wired connection 1″を指定して、ネットワーク設定を行います。

IPアドレスを指定して、自動的に起動するようにする

# nmcli connection modify "Wired connection 1" ipv4.address 10.0.10.1/24 connection.autoconnect yes

IPアドレスを指定する方式(手動)にする

# nmcli connection modify "Wired connection 1" ipv4.method manual

確認。デバイスがconnectedになっていることを確認し、ipアドレスが割り当てられていることを確認する

# nmcli device
DEVICE  TYPE      STATE      CONNECTION         
eth0    ethernet  connected  System eth0        
eth1    ethernet  connected  Wired connection 1 
lo      loopback  unmanaged  --                 
#
# ip address show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether ****************** brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4
    inet 10.0.10.1/24 brd 10.0.10.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 *****************/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

以上です。

他のマシンも同様に設定していきます。

server1

# nmcli device
DEVICE  TYPE      STATE                                  CONNECTION         
eth0    ethernet  connected                              System eth0        
eth1    ethernet  connecting (getting IP configuration)  Wired connection 1 
eth2    ethernet  connecting (getting IP configuration)  Wired connection 2 
lo      loopback  unmanaged                              --  
#
# nmcli connection modify "Wired connection 1" ipv4.address 10.0.10.11/24 connection.autoconnect yes
# nmcli connection modify "Wired connection 1" ipv4.method manual
# nmcli connection modify "Wired connection 2" ipv4.address 10.0.20.11/24 connection.autoconnect yes
# nmcli connection modify "Wired connection 2" ipv4.method manual
# 
# nmcli device 
DEVICE  TYPE      STATE      CONNECTION         
eth0    ethernet  connected  System eth0        
eth1    ethernet  connected  Wired connection 1 
eth2    ethernet  connected  Wired connection 2 
lo      loopback  unmanaged  --                

db_master

# nmcli device 
DEVICE  TYPE      STATE         CONNECTION  
eth0    ethernet  connected     System eth0 
eth1    ethernet  disconnected  --          
lo      loopback  unmanaged     --  
#
# nmcli connection modify "Wired connection 1" ipv4.address 10.0.20.1/24 connection.autoconnect yes
# nmcli connection modify "Wired connection 1" ipv4.method manual
#
# nmcli device 
DEVICE  TYPE      STATE      CONNECTION         
eth0    ethernet  connected  System eth0        
eth1    ethernet  connected  Wired connection 1 
lo      loopback  unmanaged  --  

動作確認

最後に動作確認をしていきます。pingを打つだけです。

LB -> Server

# ping 10.0.10.11
PING 10.0.10.11 (10.0.10.11) 56(84) bytes of data.
64 bytes from 10.0.10.11: icmp_seq=1 ttl=64 time=0.527 ms
64 bytes from 10.0.10.11: icmp_seq=2 ttl=64 time=0.301 ms
64 bytes from 10.0.10.11: icmp_seq=3 ttl=64 time=0.336 ms

Server -> DB

# ping 10.0.20.1
PING 10.0.20.1 (10.0.20.1) 56(84) bytes of data.
64 bytes from 10.0.20.1: icmp_seq=1 ttl=64 time=0.356 ms
64 bytes from 10.0.20.1: icmp_seq=2 ttl=64 time=0.413 ms
64 bytes from 10.0.20.1: icmp_seq=3 ttl=64 time=0.287 ms

成功すれば完了です。
ローカルネットワークのセキュリティも気になる方は、firewall-cmdなどでローカルネットワークも制限してしまいましょう。

以上!

関連記事

コメント

タイトルとURLをコピーしました