見出し画像

おじいちゃんでも多分わかる!CentOSで基礎的なサーバをいろいろ構築するノート

こんにちは。
インフラエンジニアの卵のぐらです。
紆余曲折あって普通科高校から未経験IT就職することになり、その会社の研修でサーバを立てることになったので、その過程で発生した疑問点、やったことをノートに書いていました。
途中メンタルが死にかけ、そこからしばらくノートを更新できていなかったのですが、なんとか全行程を終了させることができたので、このノートで全まとめ大長編として締めたいと思いました。
言動行動が初歩的過ぎて鼻で笑われるかもしれないですが、良ければ見ていっていただけるとありがたいです。
僕と同じような境遇とかサーバの勉強始めたてみたいな人はぜひ、自分と一緒にサーバたててみてください。

〇この記事の対象者と前提知識について
この記事はサーバーの勉強を始めたばかり、もしくは今から勉強しようという初心者を対象とした、まだ何も知らない人に向けたゼロからすべて解説していく記事となっています。
ある程度知識のある方でも読んでいただけるのはありがたいですが、初歩的な単語や概念の説明が長々と記されているのでうんざりしてしまう可能性があることをご了承ください。(これに関しては記事公開後に随時別noteに分けていく予定です。)

Youtubeのサーバーの仕組み!といった動画で学べる基礎的な単語(ファイルとディレクトリや、サーバーといった基礎単語)を知っていることを前提としています。
上記知識が無くても調べながら読み進めていくことは可能ですが、それをするなら十数分程度の動画を見てから読んでいただく方が早いかもしれないです。

出来るだけ誰でもわかるように説明するつもりではありますが、専門用語の説明などがところどころ欠けていたりするかもしれないので、そのあたりはご自身で調べていただけるとありがたいです。
また、僕自身が初心者だというのがあり随所で誤解や間違った情報があるかもしれないです。
あったらごめんなさい; ;(指摘してもらえると助かります)

書いている途中で僕自身も思っているのですが、考えながら書いているせいで文章が一貫性が無くて読みにくいかもしれないです。
その辺は無料公開ということで目をつむってください🙏

〇進め方
どの章からどの順で進めてもらっても構わないですが、最低限の必須知識を順次説明しているほか、途中で構成したソフトやサーバーを連携して動作させたりすることがあるので、できれば最初から順番に進めていただくのが好ましいかと思います。

〇学習にあたって意識してみてほしいこと
これは持論なので参考程度にしてほしいのですが、最初のうちはわからないことはわからないと思ったときに徹底的に潰すのが良いと思っています。
単語の中にさらに知らない単語が入っていて、その中にさらに知らない単語が入っていることが平常なので、"わからないからいったん飛ばそう"で進めていくと結局全部わからなかったで一周してしまうからです。
初心者は特に、調べれば調べるほど知らないことが湧き出てきて滅入ってしまいますが、これがこの界隈最大の関門なので頑張って超えてください。

〇環境について
記事内で僕が実際に進めていく際の環境は以下のとおりです。
・Windows ホストOS
・VirutualBox
・CentOS 9 stream ゲストOS
僕はVirtualBoxで立てた仮想マシンのCentOS 9 streamで進めていきますが。
例えば仮想マシンではなくクラウドだとか、旧世代CentOSやUbuntuなどのUnix系OSでもいいです。
ただし、環境やOSの違いによってところどころで設定方法が違う(特にソフトインストール時のサービス名の違いなどが顕著です)可能性があるので注意してください。
OSに関してはいろいろ種類があるので各自で調べていただけるとありがたいです。

〇建てるもの
・DNSサーバー
・webサーバー
・データベース
・メールサーバー(受信、送信両方)
・プロキシサーバー
・ファイルサーバー



〇0 基本設定

構築をする前に、最低限必要な設定をします。
サーバーはクライアント側とは勝手が違うので、いろいろと設定をしないとアクセスできないなどの問題が発生します。
とりあえずサーバーに不自由なくアクセスできるように、
・IPアドレスの固定
・SELinuxの無効化
を行います。

IPアドレスの固定

まずはIPアドレスの固定です。
ネットワークにつながるマシンはIPアドレスというものを持ちます。
IPアドレスが各マシンに割り振られることによってインターネットやネットワーク内でマシンを判別することができるようになります。
これは普通DHCPという技術によって自動で割り振り、ローテーションされているのですが、サーバーというのはネットワークで常に一貫した情報で識別される必要があるため、IPアドレスが入れ替わらないように固定する必要があります。
固定といっても、要するにDHCPを使用せずに使用で割り当てるだけなのでそんなに難しくはないです。
IPアドレスを手動で割り振るにはコマンドならunix系osならnmcli、GUIであれば設定ソフトのネットワーク設定で行うことができますが、nmcliコマンドは設定項目ごとにいちいちコマンドを打たないといけないので少々煩わしいです。
GUIがあるなら設定ソフトを使うのが無難です。
(今回は設定ソフトで行います。)

設定を行う前に、まずIPアドレスとは何ぞやというところについて説明します。
結構長いので知ってるなら読み飛ばしてください。

まず、IPアドレスはIPv4もしくはIPv6で構成されます。

とりあえず、IPv4とPv6とは何なのかがわからない方が多いと思うので説明します。
🔍回線を早くする方法
とかを調べてると、IPv4だのIPv6とかいう単語を見かけることがあると思います。
IPアドレスというのはネットワーク上のマシンを識別するものです。

IPv4のアドレスは8ビット×4セグメント
例)0001.0010.0011.0100
で表され、これを十進数に変換して表示、設定します。
(上の例でいうと 1.2.3.4で、設定するときは10進数で行う)
コンピュータはonとoff、つまり1と0しか識別できないのに対し、人間は10進数を普段から見ているためそちらの方がわかりやすいからという理由で変換されています。
人間が設定する画面ではだいたいIPv4アドレスは10進数で表示されます。

次にIPv6についてです。
ネットに接続するコンピュータは時代の流れとともにどんどん普及していっています。
現代でも一人一台のスマホ、一家に一台のルーターがあり、サーバー、スイッチなど見えないところにも大量のネット接続機器があります。
8ビット×4セグメント(ビットというのはコンピュータが扱う最小単位で、1ビットは二進数の一桁=1になります。)で示せる約4000000000通りのアドレスでも、今は十分な数がありますが、通信技術の成長は目覚ましく、近いうちに限界が来ると考えられています。
そこでIPv6なる通信プロトコルが開発されました。
(プロトコルというのは通信におけるルールみたいなものです。
割と曖昧な概念なので聞きなれて何となくで理解するようにしましょう。)
このプロトコルは従来のIPv4よりも高速な通信が可能。
さらにIPアドレスは16ビット×8セグメントあり、
2^128=340282366920938463463374607431768211456
約34京のアドレスを表せます。
ちなみに、IPv6アドレスはまだ全体に普及しきっていないので、現在ではIPv4とIPv6の併用が推奨されています。
通信プロバイダでもv6プラスのような併用プランが提供されています。
これはプロバイダがネットワーク機器に両プロトコルのグローバルIPアドレスを提供するということです。
これをIPv6のみとかにすると、ユーザにIPv6アドレスしか付与されておらずIPv4が使えないため、IPv6に対応していないIPv4アドレスのみのサーバーとは通信ができません。
大手企業のサイトなどでも割と普通に非対応だったりするので、想像以上に困ります(一敗)

次に、IPアドレスは二種類あります。
・グローバルIPアドレス
・プライベートIPアドレス
の二つです。
どちらも機器を識別するためのアドレスに違いはないですが、用途性質が違います。
グローバルIPアドレスはインターネットに直接接続する際に使用するIPアドレスです。
これはICANNという組織によって管理されており、全世界で一意になっています。
一般ユーザーや企業に対してはISP(いわゆるNURO光とかのプロバイダ)によって割り当てられます。
プライベートIPアドレスはDHCPやユーザー自身によってネットワーク内の各機器に自由に割り振られ、ネットワーク内での通信で使われます。

グローバルIPアドレスを持つ機器(ルーターなど)がインターネットにアクセス

LAN内の機器はこの危機を通してインターネットに間接的にアクセスし、LAN内ではプライベートIPアドレスで識別される。

といった感じでインターネットにアクセスしています。

IPアドレスにはサブネットマスクという概念があります。
これはIPアドレスにおけるネットワークを識別する部分で、好きなビット数までをネットワークアドレスとして設定することができます。
たとえばIPv4アドレスの場合
8ビット×4セグメントの32ビット分あるので、最大32ビットまで指定できるわけです。(ただし32ビット指定するとネットワーク内の機器を識別する部分が無くなります)
例)192.168.100.96/24↔11000000.10101000.01100100.01100000
上の例の場合、24ビットつまり、
192.168.100、11000000.10101000.01100100
までがネットワークを識別するアドレスになるというわけです。
IPv6も同じような概念がありますが、先述した通り16ビット×8セグメントかつさらにそれを可読にするために16進数という意味の分からないやつに変換するという特性上、説明し始めるととんでもないことになるので今回は省きます。
面白くはあるので余裕があれば調べてみてください。
ここからさらに言うと、クラスがどうだとかいろいろで出してキリがないので、とりあえずこの程度の認識で行きます。
というか僕自身がそこまで深く理解してないので解説のしようがないんですよね。←

今回はIPv4アドレスのみ使用するという仮定で説明します。
実際のところIPv6も数値が複雑化するだけでそこまで難しくはないので、余裕があればやってみてください。

そしてIPアドレスの固定ですが、先述の通り今回は設定ソフトを使用します。
仮想マシンなどで有れば自動でホストOSのネットワークにホストから有線接続されますが、PCに直接OSを突っ込んだなどの場合はまず接続する必要があります。
有線なら線をつなげばいいですが、無線接続の場合、CUIでゼロからwifiに接続するならnmcli dev wifi connectコマンドで接続します。
詳しい方法に関しては調べてください。
GUIの場合はWindowsで行うようにネットワーク一覧から接続できます。

コマンドラインで行う場合はnmcli(unixの場合)を用いて各項目を一つずつ設定していきます。

設定画面

設定ソフトを開き、ネットワークから接続しているネットワークを選択すると、上画像のようなのが出てくると思います。
(上記画面は設定済みなので手動になっていますが、デフォルトでは児童になっていると思います。)
この設定項目のアドレス、ネットマスク、ゲートウェイ、DNSを設定します。
ゲートウェイのアドレスとサブネットマスクを知る必要があります。
ネットワークアドレスはip routeで確認できます。

ip route
#必要箇所だけ抜粋
default via 192.168.100.254 #ゲートウェイのアドレス .....
192.168.100.0/24 #ネットワークアドレス .....

以下のように出るので、ゲートウェイのアドレスとネットワークアドレスをメモなりコピペなりします。

つぎに、先ほどの設定画面でIPv4メソッドを手動に変更、ゲートウェイにip routeで調べたゲートウェイのアドレスを入力。
ネットマスクにネットワークのサブネットマスクを入力します。
サブネットマスクは、範囲内のビットを1、外を0とし、それを10進数に変換して記入します。
(上の例で言うと、192.168.100.0/24でサブネットマスクは24ビットなので、
11111111.1111111.11111111.00000000 で 255.255.255.0 になります。)
大体のネットワークでは24ビットがネットマスクになっていると思いますが、場合によっては16だったりします。
例えば23ビットみたいな中途半端な数字にすると、十進数に変換したときに非常に見づらくなってしまうので、まず8の倍数しか使いません。
最後にアドレスを設定します、こちらはネット範囲が一致していればなんでもいいです。
今回で言うと、ネットマスク範囲の192.168.100.以降の8ビットは好きな数値にすることができるので、任意に設定してください。
最後にDNSを設定します。
DNSに関しては次の章で詳しく説明するので、いったん8.8.8.8と8.8.4.4の二つを設定してください。
普通に使う分にはこの二つを設定しておけばまず困ることはないです。

・SELinuxの無効化

LinuxにはデフォルトでSELinuxというセキュリティソフトが入っています。
セキュリティ的には申し分ないのですが、こいつはとにかく他からのアクセスを蹴りまくる上、細かい設定が難しくてサーバーマシンとしては使い物にならないので無効化します。
無効化の方法として、
・コマンドラインからの一時停止
・設定ファイルでの常時停止
があります。
コマンドは

setenforce 0

設定ファイルは/etc/selinux/configです
viコマンドでファイルを開いて必要箇所を編集します。

sudo vi /etc/selinux.config
#sudoを使うと実行時にパスワードの入力を求められます。rootユーザーのパスワードを入力してください。
'ファイルを開いたら、Iキーを押して挿入モードに移行。
十字キーでカーソルを移動して下記の箇所を修正してください'
#修正前
SELINUX = enforcing
#修正後
SELINUX = disabled
'disabledではなくpermissiveでもいいです。
selinuxがアクセスを検知するかしないかの違いです'
#修正後、escキーを押してコマンドモードに移行し、wq!を入力してEnterで保存して終了できます。
#ファイルの編集に関しては後述するのでいったん流してください。

これで基本設定は終了です。


〇1 DNSサーバー

・DNSサーバーについて

普通にインターネットを使うなら、まず意識することはないであろうDNSサーバー。
機械はネットワークから他のマシンを探すときにIPアドレスという情報を見るのですが、人間がネットワークで他のマシンを探すときに、数列で構成されているIPアドレスを使用するのは難しいです。
なので、人間が読めるドメインと言う文字列、例えばgoogle.comのようなやつをDNSサーバーというものに問い合わせて、ドメインと結び付けられたIPアドレスを取得します。
構成としてはこんな感じ

ユーザーがgoogleでguraと検索する



googleは検索リストを表示し、クリックされたサイトのURLをアドレスバーに入れる

↓https://website.gura.wtf/test/file

ユーザはURLに含まれるドメインを設定しているDNSサーバに問い合わせる

↓website.gura.wtf

DNSサーバーがレコードに登録されたドメインに対応するIPアドレスを返す

↓1.2.3.4

IPアドレスを使ってサイトのサーバーを探す、それとURLを使ってページなどの単位でアクセスする。

どのDNSサーバーに問い合わせるかはWiFiのIP設定でしていできますが、基本的には8.8.8.8や8.8.4.4←googleが運営してるDNSサーバー に問い合わせることになります。
お名前.comのようなドメインを販売しているサービスがあり、これらドメイン販売サイトなどは、すべてこの8.8.8.8のドメインの管理権を販売しています。
(厳密には8.8.8.8自体のドメインではなく、8.8.8.8の権威DNSサーバであるお名前.comのDNSサーバのドメインの管理権を販売しています。おそらく権威DNSサーバーとかで調べれば出てきます)

・DNSソフトをインストールして接続できるようにする

DNSサーバを運用するのにもいろいろなサービスがありますが、今回はCentOSの有名どころであるBINDを使用します。
とりあえずBIINDをインストールします。
インストールができたらbindが起動時に自動で起動するようにしてください。

dnf install bind #インストール
systemctl start named #bindの起動、namedはbindのサービス名
systemctl enable named #起動時にbindが開くようにしておく
'必要に応じてsuやsudoなどで権限を付与して下さい、
コマンドが複雑になって理解しにくくならないように必要最低限のみ記入します'

次に設定を行います。
いろいろ細かい設定はありますが、ユーザーが問い合わせ➝サーバーが返答の一連動作で必要な設定は
・firewallとポートの設定
・ユーザーからのアクセス許可
・DNSレコード
です。

他のマシンにアクセスする/されるとき、全員を無差別に許可していてはセキュリティのかけらもないので、ほとんどのマシンでfirewallというものがアクセス制御を行っています。
日常生活でもたまに聞くことがあるので存在は知っている人がほとんどじゃないでしょうか。
firewallは基本的には
・IPアドレスやネットワークからのアクセス
・ポートへのアクセス
を許可、拒否することができます。
今回はそんなに厳格なサーバーをつくるわけではないのでIPアドレスの制限はしませんが、ポートへのアクセスはデフォルトではすべて閉まっているいるので、必要なポートを解放します。
ポートというのがなんなのかは後ほど説明するので、とりあえず53番ポートを開いてみてください。

firewall-cmd --add-port=53/tcp --zone=public --permanent #tcpプロトコルでの解放
'firewall-cmdはfirewall関連のあれこれをできるコマンドです。
add-portは解放ポートの追加、zoneはゾーンの指定、
permanentは恒常化で、指定しない場合は一時的=再起動されるまでの設定となります。'
firewall-cmd --reload #firewall設定の再読み込み。
'多くのサービスが設定ファイルをサービス起動時にしか読み込まないので、
再起動や再読み込みを行わないと設定が反映されません'
#こちらも権限のあれこれなどは任意に行ってください
firewall-cmd --list-all 
'必須ではないですがfirewallの設定を確認できるコマンドです
設定できてればportsのところに53/tcpと表示されます'

つぎにポートを読み込む設定です。
最初の説明でも言いましたが、他のマシンはIPアドレスを使って探します。
しかし、IPアドレスだけではそのマシン本体までしか特定できないので、各サービスに接続できません
ここで使うのがポートです。
ポートにはListenするという概念があり、各サービスが指定ポートをListenすることで、サービス単位でマシンに接続することができるようになります。
先ほど53番ポートの開放を行いましたが、本来は制限することを目的にしてるというよりは識別するためで、
どうせ使うんならポートでもアクセス制御できるようにした方が便利じゃん的なノリです。(多分)
ポートは0~65535=16ビットまであり、うち0~1024まではウェルノウンポートと呼ばれ、大まかな使い道が定められています。
以降のポート番号はユーザが必要に応じて開閉したり読んだりします。
例えば、53番ポートはDNSサービスがデフォルトでListenするコマンドです。
Listenするポートに関しては、bindでは/etc/named.comfファイルで設定することができます。
bindでポートをListenするには、ファイル内のoptionsディレクティブの中を編集します。

(ディレクティブは聞きなれない単語かと思うので少し説明します。
わりと曖昧な概念なのですが、ファイルシステムにおけるディレクトリ同様、カテゴライズする的な意味を持ちます。
たとえば、
/生き物/虫/甲虫/カブトムシ
において、生き物、虫、甲虫カテゴリまでがディレクトリに相当し、
カブトムシはファイルになります。
実際のファイルシステムでいうと、
/home/gura/file.text
において
homeディレクトリが home=ユーザのホームディレクトリ というカテゴリで、その中のguraディレクトリはgura(ユーザ名)というカテゴリ。
その中にあるファイルやディレクトリはguraのファイルになります。
同様にディレクティブなる概念においても、今回のoptionsであればオプションという意味のカテゴリになります。
多くの設定ファイルではこのディレクティブという概念が用いられています。)

そして設定方法です。
ファイルを開くと、下記のような感じで、optionsディレクティブの中にlisten-onという設定項目があると思います。
ここのポート番号を変更することでListenするポートを変更できます。
Listenポートを変更したら設定を再読み込みし、firewallも必要に応じて開閉させましょう。
この時、設定ファイルをコピーしてバックアップしておくことが望ましいです。
設定ファイルは文法が間違っているとエラーを起こします。
このとき、設定項目が少ないファイルだったり、文法チェック機能などが搭載されたソフトウェアであれば問題ないですが、設定項目が多いものだったり、文法チェックができないものだと、最悪ソフトウェアごと再インストールをせざるを得ない状況になっていしまいます。
設定ファイルをコピーしてバックアップしておけば、修正不可能な状況になってもバックアップをファイルに上書きすることによって前回のバックアップ時点からやり直すことができます。

#ファイルのコピー
cp /etc/named.conf コピー先パス/ファイル名
#cpコマンドでファイルをコピーできます。cp コピー元パス コピー先パスです。
#バックアップの保存場所に関しては任意の場所でいいです。
#編集前
options {
        listen-on port 53 { 127.0.0.1 };
        listen-on-v6 port 53 { ::1; };
#編集後
options {
        listen-on port 任意のポート番号 { 127.0.0.1 };
        listen-on-v6 port 任意のポート番号 { ::1; };

CUIでのファイルの編集についてです。
CUIでは主にエディターというものを使ってファイルを編集します。
Winsowsでいうメモ帳やVisualStudio、office系ソフトのようなもので、ファイルを開いて編集するやつです。
CentOSであればviエディターやnanoエディターなどがデフォルトで入っているエディターになりますが、各自で調べて好きなものを使うのが良いです。
操作方法はエディターによって大きく変わってくるので調べて下さい。
僕は今はvimエディターを使っています。

次にアクセス許可を設定します。
firewallでアクセスを制限することができますが、サービス側でも制御することができます。
先ほどと同じ/etc/named.confを開き、
optionsディレクティブ内のallow-queryを編集します。
localhost=自身、any=全員、ネットワークやIPアドレスでの指定、acl(access controll listと言い、複数のIPアドレスやネットワークをまとめて管理することができます)での指定ができるので、アクセスするクライアントに応じて設定してください。

#編集前
options {
#間にいろいろ設定項目があります
allow-query { localhost; };
#編集後
options {
allow-query { 任意の値; };

・ゾーンファイルの設定

この段階でBIND自体へはアクセスできるようになりましたが、まだ何も書いていないので何の名前解決もできません。
なので次にDNSレコードというものを書きます。
DNSはレコードはゾーンファイルというものに書き込むのですが、bindではゾーンファイルが自動で生成されないので一から自分で作る必要があります。
ゾーンファイルは、
正引きファイル
逆引きファイル
の二種類あります。
正引きはドメイン➝IPアドレス
逆引きはIPアドレス➝ドメイン
で名前解決をします。
基本的な動作だけなら正引きだけで成立しますが、フィルタリングなどセキュリティを強化しようとするときに逆引きが使われます。
ファイルの名前とかは特に指定が無いので、それぞれのわかりやすい名前でつくってください。
仮にZoneS、ZoneRで作ります

touch ZoneS ZoneR
#touchはファイル作成コマンドです。パスを指定しない場合カレントディレクトリにファイルを作ります。

つぎにレコードを書いていきます。
まずは正引きから。
細かく言うといろいろあるのですが、主要なものとしては
・SOA
・NS
・A
・AAAA
・MX
・CNAME
あたりが挙げられます。
それぞれに違った役割があるのですが、書きながら理解するのが早いです。

まずはSOAレコード

@ IN SOA ns1.gura.wtf. mailaddress.gmail.com. ( 
    20240823 ; シリアル番号 
    3600     ; リフレッシュ間隔 
    1800     ; リトライ間隔 
    1209600  ; 有効期限 
    86400    ; 最小TTL )

SOAレコードはゾーンの管理情報を設定するレコードです。
レコードの書式は以下の通りです。

@
ゾーンのドメインで、IPアドレスでも指定できます。
@はルートドメインをあらわします。
ドメインは右から解決されます。
例えばserver.gura.comというドメインであれば、 まず一番右側の見えない.から解決され、
次にTLDのcom、SLDのgura、TLDのserverの順で解決されていきます。
つまり、@=.で指定するということは、この設定をすべてのドメインの解決時に適用するということになります。

IN
クラスの指定です。
他にもCHクラスなどがありはしますが、 現在ではほぼINしか使われないので、実質ここはIN固定となります。

SOA
見ての通りですがレコードの種類の指定です。
DNSレコードの書式はここまではです。

ns1.gura.wtf.
プライマリDNSサーバの指定、プライマリは英語でプライム=1番、 つまり最初に問い合わせるDNSサーバーの指定です。

mailaddress.gmail.com.
管理者のメールアドレス、管理者が自分なら自分のメールアドレスになります。
別にこれはこのゾーン内で解決されるドメインのメールアドレスである必要はないです。

;はゾーンファイルでのコメントです。
(コマンドラインや設定ファイルでは、効果を持たないコメントを書くことができます。
ものによって違いますが、例えば今回のゾーンファイルであれば、;をコメント文の前に記入することによって、その行をコメントアウトすることができます。)

シリアル番号
最終更新日を記します。

リフレッシュ間隔
スレーブ=従属DNSサーバがプライマリサーバーをチェックする間隔です。
秒数で指定します。
3600だと一時間に一回になるので、プライマリサーバーの設定を更新しても最大1時間従属サーバーの設定が更新されないことになります。

リトライ間隔
従属サーバーがプライマリサーバーへの通信に失敗した際に再度接続するまでの間隔です。

有効期限
従属サーバーがプライマリとの通信に失敗した際に既存の設定をいつまで保持するかの設定です。

最小TTL
TTLはキャッシュサーバーがDNSのクエリ結果をどれぐらい保存するかです。
このあたりの設定は従属サーバーとかキャッシュサーバーとかを使うほどの規模ではない今回においては、 あまり意味のない設定です。

ちなみに、ゾーンファイルではルートドメインを省略せずに記入します。
普通のサービスなどで設定するときにはすべてのIPアドレスに共通して存在するものなので、便宜上省略されます。

つぎにNSレコード

@ IN NS ns1.gura.wtf.

SOAとは打って変わって単純になりましたが、これがNSレコードです。
NSレコードはドメインに対してどのサーバが名前解決するかを示します。
SOAレコードでも書きましたが@はすべてのドメインを示すので、このレコードでは@=すべてのドメインをns1.gura.wtfが解決するということになります。
一人称だとわかりにくいですが、これがgoogleの超でかいDNSサーバーだと考えてみて下さい。
あらゆる国や場所などからくる大量ののDNSクエリをランダムに従属サーバーに振り分けるよりは、地理的情報などから分別して規則的に振り分けた方が効率的ですし、管理が簡単でしょう。

次にAレコードです

server.gura.wtf. 3600 IN A 1.2.3.4

AレコードはDNSの主役となる、ドメインとIPアドレスを結びつけるレコードです。
AレコードはIPv4アドレス限定のレコードです。
ぱっと見で何となく意味が分かると思いますが、server.gura.wtfドメインを1.2.3.4と結び付けています。
3600はTTLです、これは必ずしも指定する必要はなく、その場合デフォルト値が使用されます。

AAAAレコードです

server.gura.wtf. 3600 IN AAAA IPv6IPアドレス

だいたいAレコードと同じで、IPv6用のAレコードといったところです。
各部位の意味合いもAレコードとおなじです。

次にMXレコードです

@ 3600 IN MX 10 mail.gura.wtf.

MXレコードはドメインからのメールをどのメールサーバに送信するかという設定です。
メールについては後程説明しますが、ざっくり説明すると
ユーザ➝SMTPサーバ➝相手のSMTP送信サーバ➝相手ドメインのPOP、IMAPサーバ➝相手ユーザー
の順で送られていきます。
この、"相手のSMTP送信サーバー"を指定するのがこのレコードです。
詳しく説明すると長くなるので、いったん「送信先ドメインに対するそこへのメールをどのサーバーに送るか」だと考えていてください。(なんか余計わかりにくくなった気がする)
書式はNSレコードに似ていて、@の場所はどのドメインに対応させるか、mails.gura.wtf.はメールサーバのドメインになります。
3600はTTLで、10は優先度です。
優先度は同じドメインに対して複数のメールサーバーを対応させるとき、どのメールサーバーに優先して贈るかというものです。
数字が小さいほうが優先されます。

次にCNAMEレコード

cname.gura.wtf. 3600 IN CNAME server.gura.wtf.

CNAMEレコードはドメインのエイリアスを設定します。
エイリアスドメイン TTL IN CNAME 先ドメイン
です。
エイリアスのドメインを問い合わせられるとさらに元ドメインが返され、さらにそのドメインを問い合わせてIPアドレスが返ってきます。

以上が最低限必要なレコードです。
これらを組み合わせると

@ IN SOA ns1.gura.wtf. mailaddress.gmail.com. (
   20240823
   3600
   1800
   1209600
   86400 )

@ IN NS ns1.gura.wtf.
@ IN MX 10 mail.gura.wtf.

ns1.gura.wtf. IN A ネームサーバーのIPアドレス
;ns1.gura.wtfはネームサーバーのドメインとして使用します。
;こちらももちろん名前解決する必要があるのでAレコードまたはAAAAレコードを記入しま
す。
mail.gura.wtf. IN A メールサーバーのIPアドレス
server.gura.wtf. IN A その他サーバーのIPアドレス
cname.gura.wtf. IN CNAME server.gura.wtf.
;IPv6は設定がめんどくさいのでIPv4のみで構成していますが、IPv6を使用する場合は必要なAAAAレコードを書いてください
;ドメインは任意のもので構わないです、.を使うことでレベルを分けることができますが、別にgura.のようなTLDだけのドメインとかでも成立します
;また、メールサーバーについてはまだ立てていないので現段階ではMXレコードとそのAレコードは指定しなくてもいいです。

となります。
ちなみに、IPアドレスはネットワーク設定やifconfigコマンドで確認できます。

次に逆引きゾーンファイルを書いていきます。
正引きの逆のことを書くだけなのでそこまで難しくはないと思います。

逆引きレコードでも一部のレコードは同じです。
主に設定するものとしては、
・SOAレコード
・NSレコード
・PTRレコード
SOA、NSは名前解決におけるルールとネームサーバーの指定なので相変わらず必要です。
MXレコードはメールサーバーの指定ですが、メール送受信時に逆引きは必要ないので不要です。
そしてPTRレコードなのですが、こちらは逆引き版Aレコードです。
以上を踏まえて逆引きゾーンファイルは

@ IN SOA ns1.gura.wtf. mailaddress.gmail.com. (
   20240823
   3600
   1800
   1209600
   86400 )

@ IN NS ns1.gura.wtf.

96.100.168.192.in-addr.arpa IN PTR ns1.gura.wtf.
96.100.168.192.in-addr.arpa IN PTR server.gura.wtf.
;逆引き時はIPアドレスを後ろのセグメントから書き、in-addr.arpaをつけます。

といった感じになります。
ちなみに、今回の@もルート=すべてという意味ですが、逆引きなので中身はすべてのIPアドレスという意味合いになります。
ネットワーク内に他に追加したいデバイスとかもあれば、練習になるのでぜひ書いていってみてください。

以上でゾーンファイル本体の設定は終わりです。

次に、BINDがゾーンファイルを読み取れるように設定します。
まず、ゾーンファイルをBINDの権限がある場所に配置します。
/var/namedディレクトリあたりにbind関連のファイルなどが入っているので、そこに配置しましょう。
mvコマンドで両ファイルを移動させます

mv ゾーンファイル名 /var/named/
'mvコマンドはファイルを移動、改名するコマンドです。
厳密には、指定パスのファイルを指定パスまたは指定ファイルに置き換えるコマンドです'
#別に/var/namedでなくともbindがアクセスできる場所ならどこでもいいです。

mvコマンドを使うにあたってファイルのパスについて説明します。
ディレクトリやファイルは他のディレクトリの中に入っていて、それがたくさんの改装になっています。
コマンドラインでファイルの場所をしていするにはパスを指定する必要があり、その指定方法は
・絶対パス
・相対パス
の二種類あります、
絶対パスディレクトリの階層の最も上に位置するルートディレクトリからパスをしていする方式です。
/からパスを指定することで絶対パスを指定します。
ユーザーやサービスがどのディレクトリ内にいても同じ位置を示します。
相対パスは、ユーザーやサービスが現在いる位置からの相対的なパスを記すことができます。
例えば、ユーザーが/etc/named/ディレクトリにいるとすれば、相対パス./named.confでnamedディレクトリの一個下にあるnamed.confファイルを指定することができます。
ほかにも../で一個上のディレクトリから指定したりといったことができます。
必須知識なので知っておいてください。

・仕上げと確認

次にBINDがゾーンファイルを参照するように設定します。
設定ファイル/etc/named.confを開き、ゾーンの情報を設定していきます。
任意の場所に下記のような設定を追加します。

//正引き
zone "ドメイン" {
type master;
file 正引きゾーンファイルのパス;
};
//逆引き
zone "IPアドレス" {
type master
file 逆引きゾーンファイルのパス;
};
//ドメイン、IP範囲はNSレコードのように何を受け付けるかという設定で、
例えば.のように広い範囲を対象にすることも出来ます。
//ゾーンファイルに指定したドメイン範囲やIP範囲に応じて設定してください。

最後に、namedを再起動しましょう。
では実際にDNSクエリを送って名前解決ができるか検証します。
nslookupコマンドでDNSクエリを送ることができます。

#正引きクエリ
nslookup ドメイン 問い合わせ先サーバーのIPアドレス
#逆引きクエリ
nslookup IPアドレス(in-addr.arpaをつけて後ろのセグメントから記入) 問い合わせ先サーバーIPアドレス

成功すれば名前解決後の情報が返ってくるかと思います。
これでDNSサーバーの構築は完了です。

・DNSサーバーに問い合わせるようにする

ついでに、クライアントやサーバー自身が自動で任意のDNSサーバーに問い合わせるように設定します。
設定方法は簡単で、最初にIPアドレスの固定を行ったときと同じネットワーク設定にあった、DNSを編集するだけです。

設定画面

DNSに設定するIPアドレスは構築したDNSサーバーのIPアドレスと、インターネットを使用するのに必須な8.8.8.8 8.8.4.4です。
した二つのDNSサーバーに関しては基本設定で説明した通りです。
(これを登録しないとGoogle検索とか公開されているサーバーへのドメインでのアクセスができなくなります。)

長かったですが、これでDNSサーバーの構築は完了です。


〇2 webサーバー

次に、webサーバーを構築します。
今回はApacheというソフトを使って運用します。
その前に、webサーバーの仕組みについて簡単に説明します。
webサーバーは、その名の通りwebサイトを運用するサーバーです。
UIでは検索してクリックすると表示されますが、その中身は

1 ユーザーがワードを検索
2 ブラウザが検索結果を表示
3 ユーザーがサイト(URL)をクリック
4 ブラウザがURLを返す
5 URL内のドメインをDNSサーバーに問い合わせる
6 DNSで解決したIPアドレスとURLの情報でwebサーバーに接続
7 webサーバーがサイトを開く

といった流れです。
あくまでブラウザはアクセスを仲介する立場で、ブラウザ自体はサイトの処理を行っていません。

次にwebサイト自体の仕組みを説明します。
webサイトはHTMLやPHP、Javaなどの言語で書かれたファイルを、Apache、nginxなどのサーバーソフトウェアが実行することで、僕たちが見れるようにしています。
サーバーソフトウェアは、ドキュメントルートと言う位置以下に配置されたディレクトリやファイルを読み込みます。
ユーザーはURLを見てサイトやページにアクセスします。
URLはwebサーバーやサイト、ページの情報を記したものです。
URLは聞きなじみのある単語だと思いますが、仕組みまで理解している人は少ないと思うので説明します。
Uniform Resource Locator=URLには、どのサーバーのどこにどうアクセスするかという情報が含まれます。
例えば、今僕が編集しているこのnoteのURLはhttps://editor.note.com/notes/n1e737f49b599/edit/ 
なのですが、これを部分ごとに分けると
https 接続プロトコル
editor.note.com ドメイン
/notes/n1e737f49b599/edit/ ファイルのパス
になります。
さらに、隠されていますがドメインの後ろに接続ポートが記されています。
(より詳しく言うとここにクエリ内容やフラグメントなども加わるのですが、本筋に関係が無いので省きます。)

・環境の構築

それでは、実際にwebサーバーを立ててみましょう。
webサーバーはDNSサーバーと同じマシンでも別のマシンでも構わないですが、サーバー同士を異なるネットワーク上に配置しないようにして下さい。
(適切に設定すれば異なるネットワーク同士での通信は可能ですが、この段階では手間に見合うメリットが無いのでしません。僕に余力があれば後章で説明するかもしれないです。)
まずはサーバーソフトウェアをインストールします。
今回はApacheを使用します。

dnf install httpd #httpdはapacheのサービス名です

次にApacheを起動、有効化して、アクセスできるようにします。

systemctl start httpd
systemctl enable httpd
firewall-cmd --add-port=Listenポート/tcp --zone=public --permanent
firewall-cmd --reload #firewall設定再読み込み
#Listenポートを設定するファイルは/etc/httpd/conf/httpd.confのPortという項目です。
#設定ファイルを変更した場合もちろん再読み込みを行ってください。

以上でとりあえずwebサーバーにアクセスできるようになったので、テスト接続してみるのですが、せっかくなのでドメインを設定してみましょう。
正引きゾーンファイルを開き、webサーバーのIPアドレスと好きなドメインのAレコードを記入します。
次に、クライアントがDNSサーバーに問い合わせするように設定します。
クライアントマシンは同一ネットワーク内に配置されたマシンであればプライベートIPアドレスで直接接続できますが、異なるネットワーク上(例えば、スマホのモバイル通信とか)にある場合は、ルーターからポートフォワーディングを行う必要があります。
これに関しては現段階では深堀しないので、やりたい人は各自で調べてください。
DNSは基本設定の章で説明した通り、ネットワーク設定で設定できます。
DNSの欄に構築したサーバーのプライベートIPアドレスまたはポートフォワーディング元ネットワークIPアドレスを記入します。
それではいよいよ実際に接続してみます。
Apacheは初期状態ではhttpプロトコルでのアクセスとなります。
http://webサーバーのIPアドレス
http://ドメイン
の両方でアクセスして、テストページが表示されれば成功となります。

・中身を構成する

次に中身を構成します。
Apacheはデフォルトではhtml、CSS、JavaScript、画像ファイルなどを実行することができます。
これらの言語はサイトの情報が変動しない情的サイトの構成に適していますが、今回は経験の為(ついでに後に構成するDBを使うために)phpをインストールして使用します。

dnf install php php-cli php-common
#必要なソフトです、この中にapacheがphpを読み込むためのモジュールなども含まれています。

できたら、次にスクリプトファイルを作成します。
言語のあれこれに関してはサーバー分野ではないのでここでは触れません。
(もちろん、サーバー系でも言語ができるというのはかなりの強みになるので個人で学習するのはとても好ましいことです。)
とりあえず簡単なスクリプトで有ればChatGPTなどで生成することができるので、適当に命令して作ってもらってください。
(簡単なphpスクリプトを作成して。とかでいいです)
組める人は自身で組んでもらっても全然大丈夫ですが、僕は今のところ言語はまったくわからないので、スクリプトを組んでもらいました。
以下は時刻を表示するphpスクリプトです。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Simple PHP Example</title>
</head>
<body>
    <h1>Welcome to My PHP Page</h1>
    <p><?php echo "Today's date and time is: " . date('Y-m-d H:i:s'); ?></p>
</body>
</html>
<!ちなみに、phpなのにhtmlという単語が出てくるのは、htmlがマークアップ言語なのに対し
phpはサーバーサイド言語で役割分担をするからです。詳しくは調べて(N回目)>

スクリプトを生成したら、それをファイルに書き込みます。
生成したパソコンとサーバーが違うマシンである場合は、scpコマンドなど任意の方法でファイルを転送してください。

次にファイルを配置します。
先ほど説明した通りwebサーバーはドキュメントルート以下のディレクトリとファイルを読み込みます。
(ドキュメントルートは/etc/httpd/conf/httpd.conf内のDocumentRootで設定されています)

DocumentRoot "ドキュメントルートのパス"
#おそらくデフォルトでは/var/www/htmlディレクトリ設定されていると思います。
#変更しても構わないですが、ディレクトリのパーミッションに注意して下さい。

基本的にドキュメントルート以下にはどのような構造でファイルを配置しても大丈夫ですので、任意場所に配置してください。
例としてドキュメントルート直下に配置してみます。

#ドキュメントルートは/var/www/htmlディレクトリ、ファイルはclock.phpとします
mv clock.php /var/www/html
systemctl restart httpd

そうしたら、今回はファイルのパスを指定してアクセスします。
URLにおけるファイルのパスはドキュメントルート以下の相対パスで指定します。
の句の場合であれば、ドキュメントルート直下なので
http:/web.gura.wtf/clock.php
となります。

ブラウザ画面

アクセスして、配置したphpファイルが読み込み、表示できれば問題ないです。

・https/SSLの設定

ブラウジングしていると、企業や大手サイトのURLのプロトコル部分はほとんどがhttpではなくhttpsとなっていると思います。
webサーバーにアクセスするときのプロトコルはhttpとhttpsの二種類があり、これらの違いは"アクセス時にSSL暗号化をするかしないか"です。
通信を行うときに、データが盗聴されないように送受信時/中のデータを読めない暗号にする"暗号化"という技術があります。
SSL暗号化はwebサーバーとの送受信中のデータを暗号化するもので、httpsはSSL暗号化をするプロトコルになります。
個人ブログ等ならいいですが、ユーザーの個人情報などを扱う企業サイトで盗聴し放題のhttpでの通信を行うわけにはいかないので、暗号化されたhttpsで通信を行うわけです。
かなりメジャーな概念なので練習として導入してみます。
その前に、いったんhttpsにおいてどのような形式で暗号化されるまでに至るかを説明します。

まず、前提として暗号化について説明します
ついさっき言ったばかりですが、暗号化は通信データを読めない暗号にするセキュリティ技術です。
データを暗号にすることを暗号化、暗号を平文にもどすことを複合と言います。
暗号化は鍵というものを使って行うのですが、大きく二種類
・公開鍵暗号方式
・共通鍵暗号方式
があります。
公開鍵方式は、送信者が公開鍵とそれに結び付けられた秘密鍵を保持、公開鍵を相手に共有します。
実際の通信時は
1 送信者が受信者の公開鍵を使用して暗号化
2 受信者の秘密鍵を使用して暗号化
公開鍵は外部に公開していて、こいつ自身は暗号化のみを行うので流出しても問題ありません。
たとえばあるデータがあったとして、それを悪意ある第三者が公開鍵で暗号化を行ったとしても、受信者は秘密鍵で複合できますし、最悪データを送りなおせばいいだけです。
サーバーとクライアントでの通信においては上下関係を見出しがちですが、結局のところは一コンピュータ同士の通信なので、そこには送信者受信者の概念しかありません。

次に共通鍵方式は、送信者と受信者が同じ鍵(共通鍵)を持ちます。
実際の通信時は
1 送信者が共通鍵で暗号化
2 受信者が共通鍵で複合
です。
鍵の共有方法などについては必要になった時に説明しますが、https通信においては
1 サーバーの公開鍵をユーザーに送信
2 ユーザがそれを用いて共通鍵自体を暗号化してサーバーが送信
3 以降は共通鍵をもちいた共通鍵方式で通信する
です。
また、これらの工程はhttpsプロトコルによって自動で行われます。

https通信を行うには、クライアントとapacheの通信の間にOpenSSLというソフトを嚙ます必要があり、サーバー構築者は秘密鍵と署名された証明書を用意してから、OpenSSLにそれを読み込ませる必要があります。
証明書はサーバーの身分を証明するものなのですが、少しわかりにくいので実際に作りながら説明していきます。

まずは秘密鍵を作成します。通信プロトコルごとにやりくりするデータのタイプが違うので鍵の生成も別コマンドになります。
また、暗号化における鍵には、rsa、ECDSA、ED25519などの種類がありますが、今回はrsaキーを使用します。
SSLの鍵はopensslコマンドで生成できます。
このコマンドは他にもsslのいろいろなことができる、firewall-cmdやsystemctlなどと同系統のものです。

#opensslはおそらくもともと入っているかと思いますが、入っていなければインストールしてください。
dnf install opensl
#鍵の生成
openssl genrsa 2048 > server.key

次に証明書署名要求(CSR)を作成します。
これは、署名を行ってもらうときに必要な、秘密鍵などの情報を記しているものです。

openssl req -new -key server.key > server.csr
#reqサブコマンドはCSRの生成です、-keyで鍵の指定をしています

CSRを作成すると、CSRに記す組織情報の入力を求められます。
ここは本当ならまじめに打つ必要がありますが、今回はただのhttps通信ができるかという練習なので入力せずEnterキーで飛ばします。(もちろん、練習に入力してみるのもよいと思います)

そして最後に、証明書(CRT)を作成します。
証明書には本来、保険証に市役所のハンコを押してもらうのと同様、信頼できる第三者から署名してもらう必要があります。
しかしながら、この第三者に署名してもらうのは大体が審査が必要で、なおかつ年間数万円とかいう練習台にしては高すぎる金額がかかってしまうので、今回は自分で自分に署名を行います。
これはオレオレ証明書と言われるもので、信頼性も何もないので一般公開するサイトで行うのは好ましくありません。
オレオレ証明書ではサーバー管理組織の身元を保証することができないので、悪意を第三者からデータを守るためのhttps通信なのに、なんと第二者が悪意を持ってデータを盗んでいました!が発生してしまう状況にあります。
逆に言えば、ちゃんとしたhttps通信であればおおよそ安心して使用できるということにもなります。
証明書を作成するには下記コマンドを使用します。

openssl x509 -days 3650 -req -sha256 -signkey server.key < server.csr > server.crt
'x509で証明書に関するあれこれを行います。-daysは有効期限の指定、
-reqは証明書の発行、sha256は署名アルゴリズムの指定です。
-signkey server.keyは"署名に用いるサーバーの秘密鍵"の指定です。本来であれば、ここが第三者のものになりますが、今回は自分のものです。
<でserver.csrに入力された必要情報をコマンドに引き渡して、>でserver.crtを証明書として生成します。
何をしているのか全く分からないと思いますが、
自分で署名することなんてまともな状況ではまあ無いので深く理解する必要は無いです。'

言い忘れていましたが、時々出てくる<や>は、リダイレクトと言われるものです。
主に出力先を切り替えることができるもので、たとえばファイルの内容をコマンドに出力する、逆にコマンドの出力をファイルに入力するといったことができます。
同系統のものとして、コマンドの実行結果を別コマンドに引き渡す|や、条件付きで複数コマンドを実行する&&などがあり、コマンドを使いこなす上で必須級な知識なので、時間があるときに調べておきましょう。

次に、OpenSSLの設定ファイルで秘密鍵と証明書を指定します。
まずは秘密鍵と証明書をSSLが読み込める場所に移動させます。
今回はconf.d直下に配置しますが、ディレクトリの視認性などを加味すると"conf.d内にさらにディレクトリを配置してまとめて入れる"などにするのがで好ましいです。

mv server.crt /etc/httpd/conf.d/
mv server.key /etc/httpd/conf.d/

次に、設定ファイルでファイルの読み込み設定を行います。
まずはapacheとopensslをつなげるためのモジュールをインストールして、設定ファイルで鍵をと証明書を読み込むようにします。
sslの設定ファイル、/etc/httpd/conf.d/ssl.confを開いて、下記項目を編集します。

#編集前
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
#編集後
SSLCertificateFile /etc/httpd/conf.d/server.crt
SSLCertificateKeyFile /etc/httpd/conf.d/server.key
#上記は僕の設定の場合です。実際にcrtとkeyを配置しているパスを指定してください。

apcheを再起動して設定を反映させたら、最後にポート開放とListenを行います。
SSLがデフォルトでListenするポートは443です。
設定ができたら、いよいよhttpsプロトコルでサイトにアクセスしてみます。
URLのプロトコル部分をhttps、ポートを変更した場合はそちらも指定してアクセスしてみましょう。


ブラウザ画面

このように、httpsで接続できていることが確認できれば成功です。(ただし、今回のようにオレオレ証明書などを使用した場合、保護されていない通信と表示されます。)

・Tomcatへのプロキシ設定

最後に、Tomcatというソフトウェアにプロキシを送信できるようにします。
TomcatはApacheと同様、webサーバーを運用するソフトウェアなのですが、Apacheがリクエストの受付に特化しているのに対し、
Tomcatはリクエストの処理に適しています。
プロキシはリクエストを転送する技術で、Apacheで受け付けたリクエストをTomcatに転送して処理させることで、パフォーマンスを最適化、冗長化することができます。
正直これは現段階ではやらなくてもいいことだと思いましたが、僕の研修内容に含まれていたのでついでに解説します。

まずは、プロキシ以前にTomcatが正常に動作するかを確認します。

dnf install tomcat
systemctl start tomcat
systemctl enable tomcat
'Listenするポートはデフォルトで8080です。
変更する場合は/etc/tomcat/server.xmlで設定できますが、
ポートのListenの仕方が他ソフトと少々異なるので調べながら行ってください。'

設定できたら、tomcatがListenしているポートでアクセスして、テストページが表示されれば成功です。
今回は僕の環境でテストページが読み込めなかったので、動作チェックついでにファイルやディレクトリを配置してみます。
tomcatはtomcatのルートディレクトリ直下に配置されたディレクトリを独立した一アプリケーションとして管理するので、まずルート直下に一つディレクトリを配置し、その中にスクリプトファイルを入れます。
tomcatのデフォルトのルート位置は/var/lib/tomcat/webappsです。

mkdir /var/lib/tomcat/webapps/test
#今回は四則演算ができるkeisan.jspを配置します。
mv keisan.jsp /var/lib/tomcat/webapps/test
#ディレクトリ名、ファイル名、ファイル内容は何でもいいです。

出来たら、httpで接続して下さい。
apacheのポートではなくtomcatのポートにアクセスするので、例えば僕の場合であればhttp://web.gura.wtf:8080/test/keisan.jspになります。

このように、tomcatがListenしているポートでサイトにアクセスできれば成功です。

それでは、apacheへのリクエストをtomcatに転送する設定を行います。
全体のリクエストの流れとしては、
1 ユーザーがapacheサーバーにアクセス
2 apacheがリクエストをtomcatのポートに転送
3 tomcatが処理を行い、apacheに返す
4 apacheがユーザーに処理結果を返す
です。
このため、apacheにtomcatのポートにリクエストを流すコネクタを設定します。
まずはプロキシを利用できるようにモジュールを読み込むのですが、これはapacheのアップデートか何かで最初から読み込まれているようになったので、特に設定はいらないです。(OSの違いとかでもしかしたら設定が必要かもしれないです)
次にプロキシ先のパスを指定します。
/etc/httpd/conf/httpd.confに下記内容を追記してください。
(記入場所はどこでもいいですが、他のディレクティブ内に突っ込まないようにだけ注意してください。)

<Location />
ProxyPass ajp://localhost:8009/
ProxyPassReverse ajp://localhost:8009/
</Location>

まずは<Location /></Location>ディレクティブ。
これは設定対象とするパスの指定です。
<Location />の/は対象とするパスで、これはドキュメントルートからの相対パスを示します。
この場合であれば、/以下なのでapacheが読み込むすべてのディレクトリやファイルに適用します。
ProxyPassはプロキシ先の指定で、URLと同じ文法で記述します。
ajp:/ ajpプロトコル
/localhost:8009 localhostの8009ポート
/ この先の内容は元のクエリ内容を参照する
今回であれば、転送対象パスを指定していないのですべてのパスへのリクエストをapacheがajp://localhost:8009/としてクエリします。
例えば、apacheにhttps://web.gura.wtf/test/test.htmlというリクエストが届いたとすると、apacheはこれをajp://localhost:8009/test/test.htmlとしてクエリします。
また、この性質上、ファイルを読み込み実行しているのはtomcatなので、apacheのドキュメントルート以下に入っているファイルやディレクトリは、tomcatへプロキシを行っているときは参照することができません。
読み取りたいファイルなどはtomcatの読み込み位置に配置しましょう。
ProxyPassReverseはプロキシ先から帰ってきたURLなどを修正したりする役割を持ちます。
上記例ではtomcatからクエリが帰ってくるとき、ajp://localhost:8009/test/test.htmlとして帰ってきます。
クライアントはhttps://web/gura.wtf/test/test.htmlとしてアクセスしているので、帰ってきたクエリ内容が相違していて困惑してしまいます。
以降の記述はProxyPassと全く同じものにすれば問題ないです。

次にtomcatでajpプロトコルでのリクエストを受け付けられるようにします。
webサイトへのアクセスはhttpsやhttpで行いますが、プロキシはajpプロトコルで行います。
tomcatはデフォルトではhttpとhttpsプロトコルを受け付けるようになっているので、これを設定しなおす必要があります。
tomcatの設定ファイルは/etc/tomcat/server.xmlです。
開いたら、Connectorという項目を設定します。

<!--
元の設定
Connectorがたくさん記述されていますが、
おそらく一つだけコメントアウトされていないものがあると思います。
下記の初期設定は省略したものです。
-->
<Connector port="8080" protocol...
...
/>

<!--
変更後
変更と書きましたが、ここはエラーが出たときとかに戻すことが多いので、
コメントアウトして追記するのがおすすめです。
/>
<Connetor
   port="8009"
   protocol="AJP/1.3"
   secretRequired="false"
   redirectPort="8443" />

TomcatはConnectorというものでポートやプロトコルの受付をしています。
Connectorディレクティブでは、portは受け付けるポート、protocolは受け付けるプロトコル、secretRequiredはパスワードの有無、redirectPortはhttpsプロトコルを処理する際にリダイレクトする先のポートです。
また、これらポートも任意のものに設定することができます。
apacheやtomcatの設定を反映させ、firewallで必要ポート(設定例で言うと8009)を解放したら、実際にサイトに入ってみましょう。
tomcatが読み込むパスでアクセスするので、僕の場合はhttps://web.gura.wtf/test/keisan.jspとなります。

ブラウザ画面

現状は
1 ユーザーがhttpsプロトコルでOpenSSLがListenしているポートにアクセス
2 OpenSSLがApacheにリクエストを投げる
3 ApacheがリクエストをTomcatがListenするポートに流す
4 Tomcatが処理し、Apacheに返す(この過程でリクエスト内容をユーザーが送った元のものに戻す)
5 ApacheがOpenSSLに返す
6 OpenSSLがユーザーに返す
という流れで処理されているので、OpenSSLがListenするポートにhttpsで接続できていれば成功となります。

以上でwebサーバーの構築でした。

〇3 データベース

第三章はデータベースの構築です。
データベースはその名の通りデータを格納しているやつです。
例えば、A君の身長は何cm、体重は何kgで、B君は、、、
みたいなのを形式的に管理することができます。
今回使用するDBソフトはPostgreSQLで、今回は実環境に近い構成を組んでデータベースがどのように管理されているかを理解できるよう、
・枠組み(データベース本体)を作る
・Windowsクライアントから中身を管理してみる
・データベースをwebサイトで参照してみる
を実践してみます。

・インストールしてアクセスできるようにする

まずインストール、PostgreSQLの公式サイトにOSごとのインストール方法が記されているので、こちらを参照してインストールしていきます。
(PostgreSQLもリポジトリ名の指定でインストールができるのですが、起動までの工程が少しややこしいので公式サイトを参照するのが無難です。)

PostgreSQLのダウンロードサイトを開く

OSやバージョンなどを設定していきます。
(CentOSのバージョンはRHELのバージョンに対応しています)
4番目に表示されるインストール工程に従ってください。

ダウンロードサイト

上記でPostgreSQlをインストールしてデフォルトでの起動が設定された状態になっているので、つぎはPostgreSQLコンソールに入る

'PostgreSQL管理ユーザにログインする。
postgresはPostgreSQLのインストール時に自動で作成されるデフォルトの管理ユーザです'
su postgres
#コンソールに入る
psql
#管理ユーザにパスワードをかける。
ALTER ROLE postgres WITH PASSWORD 'パスワード';
'SQLのコンソールでは大文字と小文字が区別されません。
可読性を向上させるためにすべて大文字で記述することが多いですが、
技術的にはaLTeRみたいに訳の分からない記述方法でもまかり通ります。'

つぎにデータベースを作成します。

#データベースの作成
CREATE DATABASE データベース名;

では、Windowsから上記データベースにアクセスしてみましょう。
まずはPostgreSQLが接続を受け付けるように、二つの設定ファイルを編集します。
下記ファイルはPostgreSQLのバージョンによって配置場所が変わるので、コマンドで
1つがpostgresql.confで、これはpostgresql全体の設定、postgresqlサーバー自体へのアクセスをIP単位で管理できます。

#下記項目を編集(デフォルト状態だと多分コメントアウトされているので、その場合追記して下さい)
#編集前
listen_address = 'localhost'
#編集後
listen_adress = '好きなアクセス範囲'
#例えばLAN内だとか、全部だとか、特定IPのみだとか、必要に応じて設定して下さい。

次にpg_hba.confを編集します。
これはデータベースへの接続をユーザー、IP単位で制御できます。

#アクセス制御を記している場所があるので、そこに設定を記述します
#デフォルト設定
host all all 127.0.0.1/32 scram-sha-256
#追記内容
host 対象データベース 対象ユーザー アクセス範囲(IPアドレス単位) md5

・DBにアクセスして中身を編集する

設定が出来たら、次にWindowsにもPostgreSQLをインストールします。
CentOSに入れたときと同じく、公式サイトからインストーラーをダウンロードします。
OSでWindowsを選択して、好きなバージョンのインストーラーexeをダウンロードし、開いてください。
各項目を選択していきインストールが完了すると、
PostgreSQL "バージョン" というディレクトリが作成されているはずです。
(デフォルトでは、ドライブ/Windows/Start Menu/Programs/ディレクトリ内にダウンロードされていると思います)
pgAdminというSQL公式のエディターツールでアクセスしてみます。
ディレクトリ内のpgAdmin 4を開いてAdd New Serverをクリックすると、サーバー情報やアクセスするデータベース情報を入力できます。
先ほど作成したデータベースの情報を入力して、アクセスしてください。

アクセス出来たら、軽くデータベースの中身を作ってみましょう。
データベースは
サーバー>データベース>テーブル>カラム
という構造になっています。
データベースはカテゴリのようなもの、テーブルはデータの種類、カラムは項目だと思ってください。
おそらく中身を作っているうちに何となくは理解できると思われます。
ここまでの工程でデータベースは作成したので、次はテーブルを作成します。

pgAdminの操作方法については僕も全然わからないので詳しくは調べていただきたいのですが、データベースにクエリを出すにはデータベースを選択した状態でQuery ToolかPSQL Toolを開きます。
Query Toolはデータベースにクエリを出せるツールで、PSQL Toolはシェルに接続できるものです。
好きな方で操作して下さい。
次に、テーブルを作成するクエリを打ちます

CREATE TABLE テーブル名 (初期カラム)
/*カラムの記述方法について、カラムはデータベースにおける項目です。
たとえば名前-健太、俊彦のような、この場合では"名前"がカラムになります。
カラムは後からでも追加できますが、最初に最低一つ作成する必要があります。*/

作成出来たら、シェル上でテーブル一覧を確認します

--テーブル一覧を表示
\dt
--または、pgAdmin 4のデータベース内のschemasの中にTablesがあるので、

作成したテーブルが一覧にあれば成功となります。

最後に、カラムに値を入力してみましょう。

--INSERTでカラムに値を挿入できます
INSERT INTO テーブル名 (対象カラム) VALUES (挿入値);

値を挿入したら、テーブルの中身を確認します。

--SELECTでテーブルの中身を表示します
SELECT 表示カラム(特に項目を絞らない場合は*ですべて表示) FROM テーブル名
/*または、pgAdminのデータベースのSchemasのTables内に各テーブルがあるので、
テーブルを選択してAll Rowsでテーブルの内容を表示編集できます。

テーブルの中身に追加した値があれば成功です。

EX 次に、webサイトからデータベースの内容を引用してみましょう。

〇4 メールサーバー(送受信)

次に作るのはメールサーバーです。
メールサーバーは構造が少々ややこしいので、作る前にそれについて解説します。
環境によって変動しますが、メールを送信するには
・送信元用のメールSMTPサーバー
・送信先用のメールPOP3、IMAPサーバー
・送信先用のメールSMTPサーバー
が必要です。
これだけ言われても何のことか全くわからないと思うので、実環境の例で説明します。
今回実際に構築していくSMTPサーバー用のソフトはPostfix、POP3、IMAPサーバー用のソフトはDovecotです。(SMTPはメール送信用のプロトコルで、POP、IMAPはメール受信用のプロトコルです。)
以上を踏まえて、自分がメールを送信した場合
1 クライアントがメールを送信、メーラーなどの設定から、送信用メールサーバー(Postfix)に送信される
2 Postfixが送信先ドメインをDNSのMXレコードに問い合わせる。
3 DNSから送信先SMTPサーバーのドメインが返される、それをさらに問い合わせてIPアドレスを取得する。
3 送信先SMTPサーバーに対してPostfixがメールを送信
4 送信先POP3、IMAPサーバーが送信先SMTPサーバーのスプールからメールを取得する。
相手がメールを送信する場合、順序が逆になります。
(同一ドメインへメールを送るとき、SMTPサーバーのメール送信先は自分自身となりますが、この場合でも、特に特別な手段は使わず自分自身へ一度メールを送信します。)

・SMTP(送信)サーバー

それでは、まずはSMTPサーバーを建てましょう。
いったとおり、SMTPサーバーはPostfixで作ります。

#インストール
dnf install postfix

そしてポートを開けます。
SMTPサーバーはユーザー➝SMTPサーバーのメール送信時のポートと、SMTPサーバー➝SMTPサーバー(送信先)のやり取りでListenする二つのポートが必要です。
デフォルト値は前者が587、後者が25です。
/etc/postfix/master.cfのserviceという設定で変更ができますが、クライアント側の設定がメーラーソフトごとに違ったりして面倒くさいので、特に変更しない方が無難かもしれないです。

次に設定ファイルをいじります。
/etc/postfix/main.cfを開き、英語が読めない自分にとっては無駄でしかないやたらと丁寧な英語の説明コメントを飛ばし見しつつ、必要項目を設定します。
最低限必要なのは以下の6項目です。
・myhostname
ホストのドメインを設定します。
これはSMTP送信時に相手サーバーに自分のドメインを提示して照合したりするのに貢献します。
・mydomain
メールサーバーで使用するドメインを指定します。
正規手段では1メールサーバーには一つしかドメインを登録できません。
・myorigin
ローカルメールの送信時(ローカルメールは名前の通り同じサーバー内でのメールです。)に送信元のドメインとして引用します。
あまり深く考えず$mydomainで同じ値に設定しておけば大丈夫です。
・inet_interfaces
SMTP接続の受け入れ許可を設定できます。
SMTPサーバー➝SMTPサーバー(送信先)の時SMTPサーバー(送信先)がどこからの接続を受け入れるか、ということです。
・mydestination
ローカルメールの受け入れ対象を設定できます。
特に理由がない場合は上から二つ目の設定($myhostname,localhost.$mydomain,localhost,$mydomain)
を選べば大丈夫です。
・home_mailbox
メールボックスへの保存方式を設定できます。
MailboxとMaildir/の二つを選べ、各保存方式の特性としては、

Mailbox
Mailboxは正確にはmbox方式での保存ファイル名を指し、これはメールディ レクトリ内の1ファイルにすべてのメールを保存します。

Maildir/
Maildirディレクトリを作成し、その中でさらにメールの種類に応じたディレクトリに分別します。
メールは一つごとに1ファイルに保存されます.

といった感じで、どちらの設定でもユーザごとにホームディレクトリにメールボックスが生成されます。
(ちなみに、POP3、IMAPサーバーがメールを読み取る際はメールボックスではなく、メールスプールと呼ばれる別の場所からメールを読み取ります。)

#例
home_mailbox = Maildir/

これで最低限メールを送る設定ができました。
このほかにもセキュリティ系の設定などを行えますが、今回は面倒なので飛ばします。

・POP3、IMAP(受信)サーバー

送ったメールは受け取れないと意味がないので、受信用サーバーの設定も行います。
こちらも先ほど言った通り、Dovecotを使用します。

dnf install dovecot

ポートを開けます。
メール受信時のプロトコルはIMAPとPOP3の二種類あり、ポートも二つ設定する必要があります。
デフォルト値は
POP3 110
IMAP 143
です。
設定したい場合は/etc/dovecot/dovecot.confのservice プロトコル名-loginディレクティブでできます。

次に設定を行います。
/etc/dovecot/10-mail.confを開き、mail_locationを編集します。
これはdovecotがメールをどの方式でどこから読み取るかという設定です。

mail_location = メールの保存方式:保存場所
#設定例
mail_location = maildir:~/Maildir
#ファイルの設定欄のちょっと上に設定例が記述されてると思うので、そちらを参照して下さい。

次にSSLを無効にします。
これはdovecotとクライアント間でのSSLの有無効の設定です。
導入してもいいですが、メールのセキュリティ対策は種類が多くてやりだすとキリがないのでしません(僕は)
/etc/dovecot/10-ssl.confを開き、sslをnoにします。

ssl = no

ssl自体はこれで無効になりますが、これとは別に平文でのやり取りを許可するかどうかという設定があります。
/etc/dovecot/10-auth.confを開き、disable_plaintext_authをnoにします。

disable_plaintext_auth = no

これでdovecotとクライアントでの平文でのやり取り拒否が無効化され、SSL無しでの通信ができるようになりました。

・メーラーでメールをやり取りしてみる

では、メーラーを導入してメールを送受信してみましょう。
メーラーは何でもいいですが、認証などの要素を加味すると、今回はThunderbirdを使用するのが好ましいです。
(Outlookとかの方がメジャーですが、セキュリティの認証などの要素が厳しいのか、今回のようなガバガバサーバーでは接続拒否されてしまいました。)
Postfixのユーザーアカウントは基本的にはサーバーのローカルユーザーの名前、パスワードを使用する形になります。
なのでメールアドレスのユーザー名はサーバーのローカルユーザーの名前を使用し、パスワードもローカルユーザーのものを入力してください。
ローカルユーザーを作成するには、useraddコマンドを使用します。

#ユーザー追加
useradd ユーザー名
'ユーザーのパスワードはなくても登録はできますが、パスワードなしの状態で登録すると、
おそらくメーラーからパスワードの入力を永遠に求められるようになるので登録しましょう。'
passwd ユーザー名
'ちなみに、初期作成したユーザーは名前のショートカット設定のせいか
メーラーでログインできなかったので、僕は検証用のユーザーを二人作成しました'

各サーバーのIPアドレスなどの情報を入力して、
メーラーで使用するユーザー@Postfixに登録したドメインでログイン。
なんでもいいのでメールを送信してみましょう。

メーラー画面

このように、メールを受信できれば成功となります。
(上記画像ではmailtester@gura.wtfからgura@gura.wtfに送信しています。)

・複数メールサーバー間でのメール送受信をしてみる

メーラーを見ると、企業からのメールアドレスなどはおおよそその企業のドメインが使用されていることを確認できると思います。
実際の環境ではほとんどの場合、異なるSMTPサーバー間でのメール配送が行われているわけです。
先ほどまでは同一ドメイン間でのメール送信を行っていましたが、勉強のために異なるドメイン間でのメール配送を行ってみましょう。
まずは、DNSに二種類目のドメインを設定します。
次に、二つ目のSMTPサーバーを用意します。
ハードウェアが足りない人は仮想マシンやクラウドの使用をお勧めします。
第二サーバーのIP設定やDNS登録、アクセス設定などを行ったら、DNSサーバーのゾーンファイルを開いて新しくドメイン設定を追加します。
例えば、これまでのgura.wtfとtestdomainの二つを登録した場合、このようになります。

正引き(ドメインを複数設定するにあたって、視認性向上のためにネームサーバーのドメインも分けました。)

@ IN SOA gura.ns. guraaaaa777.gmail.com. (
   20240823
   3600
   1800
   1209600
   86400 )

;複数ドメインの登録
;ネームサーバー
@ IN NS gura.ns.
gura.ns. IN A 192.168.100.196

;gura.wtfドメイン
gura.wtf. IN MX 10 mail.gura.wtf.
mail.gura.wtf. IN A 192.168.100.196

server.gura.wtf. IN A 192.168.100.196 
web.gura.wtf. IN A 192.168.100.196
subPC.gura.wtf. IN A 192.168.100.96

;testdomainドメイン
testdomain. IN MX 10 mail.testdomain.
mail.testdomain. IN A 二つ目のサーバーのIPアドレス
server.testdomain IN A 二つ目のサーバーのIPアドレス
subPC.testdomain IN A 192.168.100.96
;不必要なレコードもいろいろ登録しているので、完コピしなくても大丈夫です。

逆引き

@ IN SOA ns1.gura.wtf. guraaaaa777@gmail.com. (
20240823
3600
1800
1209600
86400
)

@ IN NS ns1.gura.wtf.

196 IN PTR ns1.gura.wtf
196 IN PTR server.gura.wtf
197 IN PTR server.testdomain.

ちなみに、上位レベルのドメインが同じでも低レベルで分ける(例えばmail1.gura.wtf、mail2.gura.wtf)ことでメールサーバーを複数設定することはできますが、今回は視覚的にわかりやすいようにまったく別のドメインを登録しています。

DNSの設定ができれば、次にメールサーバーをもう一つ構築します。
設定等は基本的に一つ目のものと全く同じでいいですが、当然main.cfのmyhostnameなどは新規登録したドメインを設定しないといけないので注意して下さい。
また、ドメインを追加するとnamed.confのゾーン設定も変更しなければいけないことがあるので注意して下さい。(受付ドメイン範囲などの設定の問題です。たとえば今回の場合、gura.wtfとtestdomainを両方登録するか両方に対応するドメイン範囲(.)を指定しないといけないです)
最後に、両SMTPサーバーにmynetworksの設定をします。
Postfixはデフォルトではクライアントからの外部へのメールリレーを許可せず、これはSMTPサーバーをリレーの踏み台とした第三者によるスパムメールの送信などといった悪用を防ぐためです。
/etc/postfix/main.cfでmynetworksを設定することで指定範囲のクライアントからの外部へのメール送信を許可します。

mynetworks = 許可範囲(ネットワークやIPアドレス)

ここまでの設定が完了したら、アカウントにメーラーからログインして、別ドメインに対してメールを送信してみましょう。

メーラー画面

このように、異なるドメイン異なるサーバーへのメール送信ができれば成功です。
メーラーで遅れている実感がなければサーバーのメールログなどを確認すればわかりやすいかと思います。(/var/log/maillogとか)

〇5 プロキシサーバー

プロキシサーバーを組むといっても、そもそもプロキシサーバーが何なのかよくわからないと思います。
webを立てたときに出てきたプロキシという単語の通り、プロキシサーバーはリクエストをほかの場所に転送するサーバーです。
プロキシを扱うソフトウェアを導入することで、そのマシンでデバイスの接続を仲介することができます。
流れとしては、
1 クライアントが外部接続時、プロキシサーバーへリクエストを転送する
2 プロキシサーバーはリクエストとその返答の受け取りを仲介する
3 プロキシサーバーが仲介し、返答をクライアントが受け取る。
プロキシソフトは今回はsquidを使用します。

dnf install squid

もちろん起動し、ポートも開けます。
squidはデフォルトでは3128をListenします。

設定ファイル/etc/squid/squid.confを開き、アクセス許可を設定します。
デフォルトでLANが許可されているので、ポートフォワードして外部接続するとかでなければ特に設定はいらないです。

#接続許可
acl localnet src 許可対象マシン、ネットワーク

また、同ファイルでsquidを通して接続できるポートも指定できます。

#ポートへの接続許可
acl Safe_ports port 許可ポート

squidで他に設定しなければいけないことは特にないです。
早速クライアントからプロキシを通して接続してみましょう。
接続するクライアントはなんでもいいですが、僕はWindowsを使用します。
ネットワーク設定のプロキシをクリックし、サーバーのIPアドレスとsquidのポートを記入。
設定を反映し、任意ポートへのアクセスができれば成功です。
(出来ているのか実感がわかないという人はログ(/var/log/squid/access.log)を見て、ウェブサイトなどにアクセスしたときにログが出力されていれば成功です。

〇6 ファイルサーバー

いよいよ最後となりました。
最後はファイルサーバーです。
これはいわゆるファイル共有というやつです。
Ondriveなどクラウドストレージに上げて引っ張ってくるのがメジャーですが、サーバーを建ててそこから引っ張ってくることも出来ます。
ファイルサーバーに今回使用するソフトウェアはsambaです。

#インストール
dnf install samba

起動設定を行い、ポートを解放します。
sambaがListenするデフォルトのポートは137、138、139、445と多く、一つずつ設定すると管理が手間なので、サービス単位で解放しましょう。

#firewallはサービス単位でのポート開放も出来ます
firewall-cmd --add-service=smb --zone=public --permanent
#サービスがListenするポートをすべて自動で解放できますが、
使わないポートなどが存在する場合はセキュアでないので一つ一つ設定する必要があります。

まずは共有するディレクトリを作成します。
場所は基本どこでもいいのですが、今回は/mntにshareディレクトリを作成します。

#ディレクトリ作成
mkdir /mnt/share
'ディレクトリのデフォルトパーミッション755だと外部からのディレクトリ内の編集ができないので、
777にします。
逆に言えば、この状態だとディレクトリ内ならだれでも編集できるので、
重要なファイルなどを配置するのは危険であるとも言えます。'
chmod /mnt/share 0777

つぎに、/etc/samba/smb.confを開いて設定を行います。
設定ファイルには初期だとglobal、homes、printers、printsセクションが記入されていると思います。
使うならいいですが、僕はプリンターが家にないのでこちらはコメントアウトしてします。
次に、grobalセクションのworkgroupにアクセスするクライアントのワークグループ名を記入します。
ワークグループはLAN内でPCをグループ分けするためのもので、デフォルト値はWORKGROUPで、ワークグループの確認方法は環境によって違う可能性が高いので、各自調べていただけるとありがたいです。

#編集前
[grobal]
        workgroup = SAMBA
#編集後
[grobal]
        workgroup = ワークグループ名

次は[share]セクションを設定します。
[share]セクションはファイルの共有設定を記入できます。
自分の場合は以下のように設定しました。

[share]
path = /mnt/share
writeable = yes
guest ok = yes
browsable = yes
create mask = 0777
directory mask = 0777

各項目の意味を説明すると、

path
共有ディレクトリの指定

writeable
書き込みの許可

guest ok
ゲストの許可

browsable
検索の可否

create mask
共有ディレクトリ内に生成されるファイルの初期パーミッション

directory mask 
ディレクトリの初期パーミッション

です、他にもいろいろ設定項目があるので必要に応じて設定して下さい。

次にユーザーを作成します。
sambaのファイル共有へのアクセスはsambaの独自ユーザでのログインが必要です。

#sambaのユーザーを作成するコマンド
pdbedit -a "ユーザー名"
#実行後パスワードの入力を求められます

では、共有ファイルにアクセスしてみましょう。
※以下はWindowsのファイルマネージャを想定した工程です
ファイルマネージャを開き、PCディレクトリをクリックします。
ネットワークドライブの割り当てから、ドメイン/IPとフォルダのパスを指定します。

ドライブとはマシン内外のストレージの切り分け、区分です。
最もメジャーなのはCドライブで、これは一つ目の物理ストレージの容量として割り振られるドライブです。
普通にPCを使う場合はおそらくCドライブにすべてのファイルを保存しているでしょう。
ファイル共有ではファイルがクライアントのローカルではなくサーバーのローカルに保存されているので、クライアント側はそれ用に新しくドライブを一つ割り振る必要があるというわけです。

ネットワークドライブの割り当て

ドライブ(D):は作成するドライブの種類です。
べつに何のドライブは何に適しているとかの違いはないです。
フォルダー(O):はファイル共有元の指定です。
¥¥マシンのIPアドレスやドメイン¥共有フォルダー以下のパス
今回でいうと、共有ディレクトリは/mnt/shareなので、¥¥gura.wtf¥shareもしくは+share以下のパスということになります。
適当にサーバー側とクライアントから共有にファイルを入れてみて、相手側からファイルが入っていることを確認できれば成功となります。

〇最後に

以上で、今回構築するサーバーはすべてです、お疲れ様でした👍。
僕も超未熟なのでうまく説明しきれてない部分が多いですが、超初心者の助けになってれば幸いです。
今回作ったサーバー以外にもあればちょっと便利なサーバーとか、今回のものでも応用してもっとあれやこれやすることも出来るので、気が向けばぜひいろいろやってみてください。
ではまた👋

この記事が気に入ったらサポートをしてみませんか?