LinuxでのNTP（chrony）の構築

## 概要
今回、Linuxで用意されているchronyを用いてNTPサーバの設定を行う。
その際は、仮想環境を用いりながらと環境作成をvagrantを通して構築を行い、
環境構築をプロビジョニング化する。

## 要件
・NTPサーバ2台（サーバ側とクライアント側）を用意し、クライアント側がホスト側を参考に、
時刻ができるようにする。

・vagrantを用いて、作成した環境をCLI上から構築・確認できるようにする。

・作成したサーバは内部ネットワークでのみ疎通ができるようにする。
（外部またホストOSとの疎通はできない設定）

## 構成図
■サーバ構成図
![スクリーンショット 2023-08-19 22.45.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626890/5c47efd2-1695-af3d-e367-3273fbd693f9.png)

■仮想環境構成図
![スクリーンショット 2023-08-19 22.45.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626890/6cfbddd3-6d10-3818-4719-302017b8a18f.png)


## 構築環境
OS（ホスト）：MacOS 10.15.4　Darwin Kernel Version 19.4.0
OS（仮想）：Linux CentOS 7.9.2009 
仮想環境：virtualbox 6.1.32
使用ソフトウェア：vagrant 2.2.4



## 作成手順

### ①Vagratnfileを作成し、仮想環境の基本設定を行う
■ディレクトリ構成
今回の構築においてホストOS側のディレクトリ構成は以下のようにする。

        home--「ユーザー名」--Desktop--work----vagrant_ntp #参照先NTPサーバ
        　　　　　　　　　     　　　　　　　　|
                             　　　　　　　　--vagrant_ntp_client #クライアント側のNTPサーバ

<br>
<br>

**①−1** 上記のようにディレクトリーを作成する。
        
        # mkdir /home/「ユーザー名」/Desktop/work/vagrant_ntp
        # mkdir /home/「ユーザー名」/Desktop/work/vagrant_ntp_client

<br>
<br>

**①−2** 作成後は、それぞれvagrant環境の立ち上げを行っていく。

        # cd /home/「ユーザー名」/Desktop/work/vagrant_ntp
        # vagrant init 
    
        # cd /home/「ユーザー名」/Desktop/work/vagrant_ntp_client
        # vagrant init

※上記コマンド「vagrant init」にて仮想環境の設定ファイルであるVagrantfileを、
　それぞれのディレクトリの直下に作成される。


■設定項目
Vagrantfileには事前に設定項目が複数存在している。
デフォルトでは全てコメントアウトされているが、今回必要な箇所をコメントアウトを外したり、
また、値を追加したのが下記のようになる。

        Vagrant.configure("2") do |config|
            config.vm.box = "centos/7"
            config.vm.hostname = "testntp"
            config.vm.synced_folder "./", "/vagrant"
            config.vm.network "private_network", ip: "192.168.22.10", virtualbox__intnet: true
        end

| 設定項目 | 説明 |
| ---- | ---- |
| config.vm.box | 今回使用するboxを選択 |
| config.vm.hostname | それぞれのサーバのホスト名を入力 |
| config.vm.synced_folder | ホスト側とゲスト側で共有するフォルダーを記入。<br>イメージとしてどこのフォルダーを仮想側と同期させますかと言った感じ|
| config.vm.network | 仮想サーバ側で設定するIPを入力 |

それぞれこのような意味を持つ設定項目となる。


〜設定項目詳細については以下を参照〜
https://weblabo.oscasierra.net/vagrant-config-vm/

:::note 
 **Tips**
上記設定項目でも出てきている、vagrantならではのboxとnetworkの意味とその種類について、備忘録としてまとめておきます。

***box:***
        vagrantではあらかじめOSのパッケージのようなものを用意してくれており、
        そのパッケージのようなものをboxと言う。
        使用者は使用したOS（box）を指定するだけで、
        ローカルまたはvagrant cloud上から自動的にプロビジョニングしてくれる。
        要するに**わざわざOSのメディアだったりファイルを使用者が用意することなく**、
        構築が可能になる。

***network***:
        基本サーバのIPを設定する項目になるが、
        それ以外にも「どのようなネットワークで構築するか」を設定することができる。
        要するに**どことどこを通信できるようにするか**を決めることができる。
        (仮想OSどうしだけかホストOSと仮想OSどうしだけか、
はたまた仮想OSと外部ネットワークどうしを可能にするかなど)
:::

<br>
<br>
■設定後の疎通確認

**①−3** 設定後は実際にvagrantを立ち上げて設定したIPとホスト名、仮想サーバどうしで疎通ができているかを確認する。

        # vagrant up　　　　仮想サーバの立ち上げ
        # vagrant ssh　　　仮想サーバへのアクセス

        $ hostname　　config.vm.hostnameで設定した値が確認できる
        $ ip addr　　 config.vm.networkで設定した値が確認できる。
        $ ping [参照するNTPサーバのIP]

<br>
<br>

### ②起動したサーバにてchronyの設定
■chronyの設定ファイルの変更
**②−1** 同期先NTPサーバの設定ファイル（/etc/chrony.conf）を修正する

        allow 192.168.22.0/24  ⇦clientが疎通できる許可をここで設定する

他はデフォルトの状態にしておく。

**②−2** clientNTPサーバの設定ファイル（/etc/chrony.conf）を修正する

        server 0.centos.pool.ntp.org iburst　削除
        server 1.centos.pool.ntp.org iburst　削除
        server 2.centos.pool.ntp.org iburst　削除
        server 3.centos.pool.ntp.org iburst　削除
            
        server 192.168.22.10 iburst 追加

同期先NTPサーバのIPを設定する。

■設定の反映（サービスの再起動）
**②-3** サービスを再起動してステータスが正常なことを確認する。

        # systemctl start chronyd
        # systemctl status chronyd
           chronyd.service - NTP client/server
               Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
               Active: active (running) since 土 2023-08-19 13:33:37 UTC; 11s ago
                ~省略~

### ③client側の同期の確認
■同期先の確認
**③-1** client側にて設定したNTPサーバに同期できているか確認。
        
        chronyc sources
        210 Number of sources = 1
        MS Name/IP address         Stratum Poll Reach LastRx Last sample               
        ===============================================================================
        ^* 192.168.22.10                 2   6    17    15  -2638ns[  +25us] +/- 5581us

※「＊」があれば正常に同期が行えている。

## 全体を通して
NTP自体の設定・構築は簡単だった。
vagrantを通じてのvirtualboxの設定、ネットワーク関連に苦戦。
仮想環境の構築について今後もっと詳しい箇所まで触れてみたい
vagrantでできることをもっと知りたい

## 次回やってみたいこと…
上記でも述べましたが、今回でvagrantについてすごい興味を持てたので、
もっとvagrantの機能について触れていきたいと思います。
その中でもvagrantを通じてのAWS構築にも挑戦できたらと思います。

ざっと調べると、**vagrant-awsを導入することで実現可能とのこと。**

https://tech.speee.jp/entry/1510

上記サイトも参考にしつつ、設定を行なっていきたいと思います。