LPICひたすら暗記（1日目）

#1日目

##DNSについて
・代表的なDNSサーバソフトウェア：```BIND```
・サーバーデーモン：```named```
・DNSサーバーに問い合わせて名前解決するコマンド：

```ruby:①nslookup
   nslookup [オプション] [ホスト名/ドメイン名/IPアドレス]
```
| オプション | 説明 |
|:-----------:|:------------:|
| -type=レコード       | リソースレコードタイプを指定する        |
| -norecurse     | 再帰的な問い合わせをしない      |

```ruby:②host
   host [オプション] ホスト名/ドメイン名/IPアドレス [問い合わせ先DNSサーバー]
```

| オプション | 説明 |
|:-----------:|:-----------:|
| -t タイプ       | リソースレコードタイプを指定する        |
| -v    | 詳細な情報を指定する      |

```ruby:①dig
   dig [@問い合わせ先DNSサーバー] ホスト名/ドメイン名/IPアドレス [クエリタイプ]
```
　↓主なオプション

| オプション | 説明 |
|:-----------:|:------------:|
| -x       | 指定されたIPアドレスの逆引き        |
| -p ポート番号     | 問い合わせ先のポート番号を指定      |

 ↓使えるクエリ

| オプション | 説明 |
|:-----------:|:------------:|
| a       | ホスト名に対応するIPアドレス（デフォルト）        |
| ptr     | IPアドレスに対応するホスト名     |
| mx     | メールサーバー   |
| soa     | SOAレコード情報    |
| hinfo     | ホスト情報    |
| exfr     | ゾーン転送      |
| txt     | 任意の文字列      |
| any| すべての情報      |

##BINDの設定
・Bindの設定ファイル：```/etc/named.conf```
・いくつかのステートメントと、オプションから構成
・オプションの末尾には[　;　]を記載

###ステートメント一覧

|ステートメント|説明|
|:-----------:|:------------:|:------------:|
|acl|ACLの定義||
|controls|named(rndc)を操作できるホストの指定||
|include|外部ファイルの読み込み||
|key|認証情報の設定||
|options|namedの動作に関する詳細設定||
|zone|ゾーンの定義||

```ruby:aclステートメント（アクセス制御リストを定義）
   
　　構文）
　　acl ACL名 {
     アドレスマッチリスト
   　}

　　例）
　　acl group1 {
      192.168.120.0/24;
      192.168.120.0/24;
      }
```


```ruby:includeステートメント（指定した外部ファイル読み込み）
　　
　　構文）include "ファイル名";

　　例）include "/etc/*******";
```

```ruby:optionステートメント（named動作の詳細設定）
　　構文）directory ディレクトリパス;
```
|オプション|説明|
|:-----------:|:------------:|:------------:|
|directory|ゾーンファイルの格納先|
|datasize|データセグメントサイズ上限||
|coresize|コアファイルのサイズ上限||
|max-cachesize|最大キャッシュサイズ||
|recursion yes/no |再帰的問い合わせを受け付けるか否か||
|recursive-clients|再帰問い合わせの最大同時接続数||
|allow-query|問い合わせを受け付けるホスト||
|allow-recursion|再帰的な問い合わせを受け付けるホスト||
|allow-transger|ゾーン転送を許可するホスト||
|allow-update|ゾーン情報の動的アップデートを受け付けるホスト||
|blackhole|問い合わせを受け付けないホスト||
|forwarders {IPアドレス}|回送先DNSサーバー||
|forward onry/first|回送方法||
|notify|ゾーンデータの情報をスレーブサーバーに通知するか否か||
|version|バージョン表示||

```ruby:controlsステートメント（namedを操作できるホストを制御）
　　例）contlols {
        inet 127.0.0.1 allow { localhost ;};
        };
```

■ゾーンのタイプ

|オプション|説明|
|:-----------:|:------------:|:------------:|
|hinit|ルートDNSサーバーの指定|
|master|指定したゾーンに対してマスターDNSサーバーである||
|slave|指定したゾーンに対してスレーブDNSサーバーである||

```ruby:zoneステートメント(マスター)
　　例）zone "example.net" {
        type master ;
        file "example.net.zone"
        };
```

```ruby:zoneステートメント(スレーブ)
　　例）zone "example.net" {
        type slave ;
        file "example.net.zone"
        master { 192.168.120.2 ; };
        };
```

##rndc


```ruby:rndc（namedを操作できるコマンド）
　　
　　構文）rndc [サブコマンド]

```

|サブコマンド|説明|
|:-----------:|:------------:|:------------:|
|stop|namedを終了||
|refresh|ゾーンデータをリフレッシュ||
|stats|統計情報を書き出す||
|status|namedのステータスを表示||
|dumpdb|キャッシュの内容をファイルに出力||
|reload ドメイン|指定したゾーンファイルを再読み込み||
|halt|namedを直ちに終了する||


##ゾーンファイル
■named.confのoptionステートメントで指定した配置場所へ
■zoneステートメントで指定したゾーンファイル名で
■$ORIGINでディレクティ：```ドメイン名が明示されていないレコードで補完するドメイン名```
■$TTLディレクティブ：```ゾーンデータをキャッシュに保管しておく時間```
■リソースレコード内にゾーンの情報を記載する

```ruby:ゾーンファイルの書式
   名前 [TTL値] IN リソースレコ＾ドタイプ 値
```

|リソースレコードタイプ|説明|
|:-----------:|:------------:|:------------:|
|SOA|管理情報の記載||
|NS|ゾーンを管理するDNSサーバーを記載||
|MX|メールサーバーを記載||
|A|ホスト名に対応するIPアドレスを記載（正引き）||
|AAAA|ホスト名に対応するIPアドレスを記載：ipv6（正引き）||
|CNAME|ホスト名の別名||
|PRT|IPアドレスに対応するホスト名||


###詳解
■SOAレコード：```ゾーンに関する基本的な情報の記載```

```ruby:SOAレコード
　構文）
  名前 IN SOA DNSサーバー 管理者メールアドレス (
  シリアル番号;Serial
  マスターのゾーン情報変更をチェックする間隔;Refresh
  スレーブ⇒マスターからの再試行;Retry
  スレーブ⇒マスターへアクセスできない場合のゾーン情報破棄までの時間;Expire
  存在しないドメインに関するキャッシュ;Negative TTL
```

■NSレコード：```DNSサーバーをFQDMで指定```

```ruby:NSレコード
　構文）名前 IN NS DNSサーバー名

　例）
　example.net. IN NS ns.eample.net
  example.net. IN NS ns2.eample.net 
```

■mxレコード：```メールサーバー名を指定```

```ruby:mxレコード
　構文）名前 IN MX プリファレンス値 メールサーバー名

　例）
　example.net. IN 10 MX ns.example.net
  example.net. IN 20 MX ns2.example.net 
```

■Aレコード：```ホスト名に対応するIPアドレス記載```

```ruby:Aレコード
　構文）ホスト名 IN A IPアドレス
　　例）ns.eample.net　IN A 10.10.0.4
```

■AAAAレコード：```ホスト名に対応するIPV6アドレス記載```

```ruby:AAAAレコード
　構文）ホスト名 IN AAAA IPv6アドレス
```

■CNAMEレコード：```ホスト名の別名を設定```

```ruby:CNAMEレコード
　構文）別名 IN CNAME ホスト名
　　例）host2.example.net　IN CNAME host1.example.net
```

■PTRレコード：```Aレコードの逆引き用```

```ruby:PTRレコード
　構文）IPアドレス IN PTR ホスト名
　　例）10.10.10.10.example.net　IN PTR　mx.example.net
```

###ゾーンファイルの構文チェック

```ruby:
   named-checkzone [オプション] ゾーン名 ゾーンファイル名
```

|オプション|説明|
|:-----------:|:------------:|:------------:|
|-t ディレクトリ|chrootしている場合にはそのディレクトリを指定||
|-w ディレクトリ|ゾーンファイルを置いているディレクトリを指定||

##DNSのセキュリティ

■DNSSEC
公開鍵暗号方式の電子証明を行い、ゾーンの改ざんがされていない事を保証

■TSIG
共有秘密鍵を利用し、ゾーンの改ざんがされていない事を保証