CentOS8でローカルネットワークを作成し、ローカル間でsshやDB接続をするまで。



#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
```

```ifcfg-eth1.ini
# 前述のコマンド 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が設定されています。

```ifcfg-eth1.ini
# 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