#CentOS8で複数のサーバーをローカルネットワークで接続する
通常、nginxやApacheがインストールされたサーバーとDBなどのストレージがインストールされたサーバーは別のサーバーとして、
構築することが多いと思いますが、CentOS7までは比較的簡易に設定ができていましたが、CentOS8からちょっと敷居が上がってしまって、
ローカルネットワークの構築に手間取ってしまったので、一度メモとして残しておきます。
私は、プライベートも業務上もKagoyaを利用することが 多いので、今回はKagoyaのVPSで実行しました。
ちなみに作成にあたって使用したインスタンスは既に削除済みです。
##WEBサーバー側NIC一覧
[root@v133-18-●●●-●●● ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:a9:21:a9 brd ff:ff:ff:ff:ff:ff
inet 133.18.202.69/23 brd 133.18.203.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.150.11.1/24 brd 10.150.11.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 2406:8c00:0:3409:133:18:202:69/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fea9:21a9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:31:b3:50 brd ff:ff:ff:ff:ff:ff
作成したWEBサーバー用インスタンスのNIC情報は上記のようになっています。
KAGOYAのネットワーク機能で作成した追加のNICが eth1 インターフェース となります。
まず以下コマンドで、コネクションの状態を確認します。
[root@v133-18-●●●-●●● ~]# nmcli con
NAME UUID TYPE DEVICE
Wired connection 1 05464f3c-c413-358b-8cd1-1b3adabd94d5 ethernet eth1
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
まず、上記の状態からコネクション名がWired connection 1となっているのをDEVICEと同じeth1と変更します。
[root@v133-18-●●●-●●● ~]# nmcli con mod "Wired connection 1" connection.id eth1
[root@v133-18-●●●-●●● ~]# nmcli con
NAME UUID TYPE DEVICE
eth1 05464f3c-c413-358b-8cd1-1b3adabd94d5 ethernet eth1
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
# 前述のコマンド nmcli con mod "Wired connection 1" connection.id eth1
# によって /etc/sysconfig/network-scripts 配下に、ifcfg-eth1 というファイルが作成される。
# コマンド実行直後は、ローカルネットワークに関するIPADDRといった記述は存在しない
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth1
UUID=9e0b8981-5d2e-32d2-9ab6-ba6705c33f6e
DEVICE=eth1
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
無事にコネクション名が、NICインターフェースと同じeth1と同じになりました。
次に、コネクションそのものと、デバイスを関連付ける命令を実行します。
[root@v133-18-●●●-●●● ~]# nmcli con mod "eth1" connection.interface-name eth1
上記コマンド実行後、以下のコマンドで任意のプライベートIPを設定できます。
[root@v133-18-●●●-●●● ~]# nmcli con mod eth1 \
ipv4.method manual \
ipv4.address "192.168.1.1/24" \
connection.autoconnect "yes" \
ipv6.method ignore
※バックスラッシュの後にスペースなどを入れないように
今回は、プライベートIPのセグメントを192.168.1/24で設定してますが、
ここは任意でお好みで設定して下さい。
上記コマンド実行後、以下のように設定を確認します。
[root@v133-18-●●●-●●● ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:a9:21:a9 brd ff:ff:ff:ff:ff:ff
inet 133.18.202.69/23 brd 133.18.203.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.150.11.1/24 brd 10.150.11.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 2406:8c00:0:3409:133:18:202:69/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fea9:21a9/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:31:b3:50 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/24 brd 192.168.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe31:b350/64 scope link
valid_lft forever preferred_lft forever
上記のように、eth1のインターフェースに任意で指定した192.168.1.1のプライベートIPが設定されています。
# eth1にIPアドレスを設定する コマンド
# nmcli con mod eth1 \
# ipv4.method manual \
# ipv4.address "192.168.1.1/24" \
# connection.autoconnect "yes" \
# ipv6.method ignore
# によって、下記にIPADDRとPREFIXといった設定が追加される
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=eth1
UUID=9e0b8981-5d2e-32d2-9ab6-ba6705c33f6e
DEVICE=eth1
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
IPADDR=192.168.0.1
PREFIX=24
ここまでいったんWEBサーバ―側インスタンスの設定は完了です。次に、DBサーバー用インスタンスも同様に設定していきます。
##DBサーバー側NIC一覧
[root@v133-18-●●●-●●● ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:84:9e:a6 brd ff:ff:ff:ff:ff:ff
inet 133.18.208.237/23 brd 133.18.209.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.150.11.1/24 brd 10.150.11.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 2406:8c00:0:3412:133:18:208:237/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe84:9ea6/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:b5:ef:3b brd ff:ff:ff:ff:ff:ff
inet6 fe80::e722:b88f:8d4d:d80d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
WEBサーバー側で確認したコマンドと同様なものを実行すると
まだeth1にはIPが割り振られていません。
では、先程と全く同じ手順を繰り返します。
まず、
nmcli con
上記コマンドで、コネクション状態を確認します。
[root@v133-18-●●●-●●● ~]# nmcli con
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
Wired connection 1 06b39142-cc39-38cd-813d-b9bbc39409dd ethernet --
先程と同じようにコネクション名にWired connection 1となっています。
なぜかDEVICEの表記が異なる理由はわかりません。
とにかく、コネクション名をeth1インターフェースに紐付けます。
[root@v133-18-●●●-●●● ~]# nmcli con mod "Wired connection 1" connection.id eth1
[root@v133-18-●●●-●●● ~]# nmcli con
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
eth1 06b39142-cc39-38cd-813d-b9bbc39409dd ethernet --
次に、名前を変更したコネクションと、インターフェースを関連付ける処理を行います。
[root@v133-18-●●●-●●● ~]# nmcli con mod "eth1" connection.interface-name eth1
[root@v133-18-●●●-●●● ~]# nmcli con
NAME UUID TYPE DEVICE
eth1 06b39142-cc39-38cd-813d-b9bbc39409dd ethernet eth1
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
すると先程の、Wired connection (有線接続)となっていた箇所がeth1インターフェースと関連づけれらました。
では最後に、DBサーバーインスタンス側にプライベートIPを設定します。
[root@v133-18-202-69 ~]# nmcli con mod eth1 \
ipv4.method manual \
ipv4.address "192.168.1.2/24" \
connection.autoconnect "yes" \
ipv6.method ignore
先程のWEBインスタンスは 192.168.1.1/24と設定したので、DBインスタンスは 192.168.1.2/24と設定しました。
では、もう一度 eth1のプライベートIPを確認します。
[root@v133-18-●●●-●●● ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:84:9e:a6 brd ff:ff:ff:ff:ff:ff
inet 133.18.208.237/23 brd 133.18.209.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.150.11.1/24 brd 10.150.11.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 2406:8c00:0:3412:133:18:208:237/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe84:9ea6/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:b5:ef:3b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:feb5:ef3b/64 scope link
valid_lft forever preferred_lft forever
eth1が指定した 192.168.1.2と設定されています。
以上でWEBサーバーとDBサーバーのローカル接続が完了したので、DBサーバーへはWEBサーバーのIP:192.168.1.1 のsshのみの接続を許可するようにKAGOYA上でセキュリティグループを設定します。
いったん、DBサーバー側の、sshd_configファイルで、rootユーザーでパスワード認証を許可します。
##WEBサーバー側からDBサーバーへSSH接続
DB側のSSH接続設定をRootログインおよびパスワード認証を許可し、且つ
IP:192.168.1.1とport:22でのみの接続を許可しておきます。
そして、自身のローカルPCからssh接続できないことを確認しておきます。
では、先程のWEBサーバー側ターミナルから
[root@v133-18-●●●-●●● ~]# ssh root@192.168.1.2
root@192.168.1.2's password:
Last login: Thu Aug 27 15:46:09 2020 from 61.22.158.140
[root@v133-18-●●●-●●● ~]#
上記のように、DBサーバーへプライベートIPを用いて、SSH接続することができました。
後は、個別にPostgresqlなども同じセグメントのホストからの接続のみ許可といった設定をすることで、
DBサーバを外部に公開せずWEBアプリケーションからアクセスができます。
今回の参考元文献は以下となります。
https://i1.fusioncom.jp/doc/ja/help/instance_nic_linux.html
https://densan-hoshigumi.com/server/linux/network/network2