ネットワークの関連

# ネットワークの基礎

## TCP/IPプロトコル
通信を行う上での取り決めをプロトコルという。企業や家庭内のLANやインターネットで最も一般的に使用されているプロトコル。

### TCP(Transmission Control Protocol)
HTTPなど固有のアプリケーション層のプロトコルを橋渡しするもので、ポート番号用いて識別し、担当のソフトウェアに振り分ける。信頼性が高いが即時性や高速性は得られにくい
**リアルタイム通信には不適切だが、webサーバーへのアクセスなどデータが抜け落ちて困る際に使用**

+ 途中で消失やエラーが発生したパケットを再送
+ パケットの伝送順所を整列

::: note info
TCPは**コネクション型プロトコル**で、相手に通信データが正しく届いていることを確認しながら通信するもので信頼性は高くなる。
:::


### IP(Internet Protocol)
TCPやUDP、ICMPなどのデータ転送(ルーティング)をつかさどるコネクションレス型のプロトコル。**コネクションレス型**とは、相手に通信データが正しく届いているかどうかを確認せず、一方的に送信するもの、信頼性は低くなるが伝送速度は速くなる。

+ IPアドレスの規定
+ データグラム(伝送単位)の規定
+ データグラムが伝送されるネットワーク経路の制御

### UDP(User Datagram Protcol)
DHCPなど各用途ごとに固有のアプリケーション層のプロトコルを橋渡しするもので、ポート番号用いて識別し、担当のソフトウェアに振り分ける。シンプルで低遅延だが信頼性は低い
**正確性はないが、動画ストリーミングやリモート会議などライブ配信など速度に重視した通信が可能**

### ICMP(Internet Control Message Protocol)
エラーメッセージや制御メッセージを伝送するコネクションレス型のプロトコル。pingコマンドやtracerouteコマンドで利用される




## OSI参照モデル
国際標準化機構(ISO:International Oraganaization for Standardization)によって**通信プロトコルを設計するための指標**として策定されたもの。

![OSI参照モデル](https://camo.qiitausercontent.com/d6a1429cdccec949aac629ba4e7a21e68c69cde5/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3133303330322f30623837326261622d333738642d366463642d376163372d3261333631663764313532662e676966)

**第1層　物理層**
コンピューターが扱うデジタルデータとケーブルが扱う電気信号の相互変換といった物理的な接続を定めるもの

**第2層　データリンク層**
通信回線を正確に通信する規則を定めるもの
代表的な組み合わせはMACアドレスによるネットワーク接続で、隣接したノード（機器）間で通信中のデータが壊れていないか、通信相手の識別や認識、信号の衝突の検知や回避をチェックしながらデータの受け渡しが実現される

**第3層　ネットワーク層(IGW/NAT ICMP)**
複数のネットワークを接続し、全体を一つのネットワークとして相互に通信可能な状態にすること。伝送経路の選択が主


**第4層　トランスポート層**
データの送信元と送信元の間での制御や通知、データ転送の信頼性やリアルタイム性など目的に応じた通信品質を実現する。代表的なプロトコルはTCPとUDP。

**第5層　セッション層**
通信の確立、維持、終了するまでの手順を管理している。セッションによって利用者の認証やログイン、ログアウトなどの状態管理を行うことが可能

**第6層　プレゼンテーション層**
アプリケーション間でやり取りされるデータの表現形式を定義する。
SMTP（メール送信時のプロトコル）やFTP（サーバーへのファイル転送時のプロトコル）が主流となっている。実行することにより、webブラウザで文字化けが発生せずに正確な文章が表示されるようになる。

**第7層　アプリケーション層**
ユーザーが操作するソフトウェアが提供する具体的な機能についての仕様や通信手順やデータ形式などを定めている

## IPアドレス
インターネット内で重複しないよう一意の割り当てが必要になる。1バイトごとに区切って10進数で表記する。

| クラス | IPアドレスの範囲 | サブネットマスク |
|:-:|:-:|:-:|
| A  | 0.0.0.0~127.255.255.255  | 255.0.0.0  |
| B  | 128.0.0.0~191.255.255.255  | 255.255.0.0  |
| C  | 192.0.0.0~223.255.255.255  | 255.255.255.0  |
| D  | 224.0.0.0~239.255.255.255  |   |
| E  | 240.0.0.0~223.255.255.255  |   |

+ クラスA
ネットワーク部1バイト、ホスト部3バイトの大規模ネットワーク
+ クラスB
ネットワーク部2バイト、ホスト部2バイトの中規模ネットワーク
+ クラスC
ネットワーク部3バイト、ホスト部1バイトの小規模ネットワーク


#### プライベートアドレスの範囲
| クラス | IPアドレスの範囲 |
|:-:|:-:|
| A  | 10.0.0.0~10.255.255.255  |
| B  | 172.16.0.0~172.31.255.255  |
| C  | 192.168.0.0~192.168.255.255  |

### CIDR(Classless inter-Domain Routing)
IPアドレスのクラスの概念を使わずに、任意の長さのサブネットマスクを利用する事。ネットワークアドレス部を1ビット単位で扱うことが出来る。
例えば、クラスCネットワークをサブネットマスクで分割すると、4つのサブネットワークに分割でき、それぞれのサブネットワークでは62のホストを扱える。

| IPアドレスの範囲 | ネットワークアドレス | ブロードキャストアドレス | 最大ホスト数 |
|:-:|:-:|:-:|:-:|
| 192.168.0.0~192.168.0.63  | 192.168.0.0  | 192.168.0.63  | 62  |
| 192.168.0.64~192.168.0.127  | 192.168.0.64  | 192.168.0.127  | 62  |
| 192.168.0.128~192.168.0.191  | 192.168.0.128  | 192.168.0.191  | 62  |
| 192.168.0.192~192.168.0.255  | 192.168.0.192  | 192.168.0.255  | 62  |

::: note warn
ホストアドレスを数える際、実際の数から下記項目の数を抜いたものが使用できる
+ 0.0.0.0のネットワーク自信を表すアドレス
+ ブロードキャストアドレス
+ ルータ分
:::



### IPv6
IPv4の32ビットに対して、128ビットになっている。16ビットずつ8つのブロックに区切られた**16進数**で表す。表示する際のルールが以下存在する

+ **各ブロックの先頭の0は省略できる**
+ **1か所だけ、0が連続するブロックは省略して「::」と表記できる**
+ **IPアドレス部分は括弧で囲み、末尾にポート番号と分かるように区別している**

さらに、IPv6は以下に分類される

| IPv6アドレスの分類 | 表記 |
|:-:|:-:|
| ローカルループバックアドレス  | ::1/128  |
| グローバルユニキャストアドレス(GUA)  | 2000::/3  |
| リンクローカルユニキャストアドレス(LLA)  | fe80::/10  |
| マルチキャストアドレス  | ff00::/8  |

「/8」の表記は、先頭からのビット数を表し、IPv6の場合は以下の通り言う。
どちらも**64ビット**になっている。
+ **サブネットプレフィックス**：IPv4のネットワーク部に相当する部分
+ **インタフェース識別子（Interface-ID）**：ホスト部に相当する部分

::: note info
**・リンクローカルアドレスとは？？**
同一リンク上でのみ有効なアドレス
**・エニーキャストアドレスとは？？**
複数のホストの集合に割り当てられるアドレス
**・マルチキャストアドレスとは？？**
IPv4のブロードキャストアドレス(同じネットワークに属する全てのホストに送信する特別なアドレス)に相当するもの
:::


#### IPv6ヘッダ
IPv6パケット内の制御情報のことで、IPv6ヘッダ（固定長）＋オプションの拡張ヘッダ（可変長）で構成されている。

![IPv6header](https://image.itmedia.co.jp/ait/articles/0110/05/r10zu02.gif)

| 項目 | ビット数 | 説明 |
|:-:|:-:|:-:|
| バージョン  |  4 | IPのバージョン番号。6が入る  |
| トラフィッククラス  | 8  | パケットの優先度をつける  |
| フローラベル  | 20  | アプリケーションフローの識別  |
| ペイロード長  | 16  | IPv6ヘッダを除くパケットのデータ部の長さ  |
| ネクストヘッダ  | 8  | IPv6ヘッダの次に来るヘッダのタイプを示す  |
| ポップリミット  | 8  | 通過できるルータの数(IPv4のTTLと同じ)  |
| 送信元アドレス  | 128  | 送信元のIPv6アドレス  |
| 宛先アドレス  | 128  | 宛先のIPv6アドレス  |

## ポート番号
IPアドレスを「住所」で例えるのであれば、ポート番号は「部屋番号」みたいなもの。
ポート番号は「**0番～65535番**」まで存在し、プロトコルやプログラムによってポート番号が決まる。世界共通の仕組みのため以下のルールに統一されている

### ・ウェルノウンポート(Well-Known Ports)
IANAが管理している番号。TCP/IPで使用されるポートのうち、特によく利用されている「**0番～1023番ポート**」のこと。著名なサービスやプロトコルのためにあらかじめシステムに予約されている。
**使用するには、root権限が必要**

### ・レジスタードポート(Registered Port)
IANAが管理している番号。サービスが増えていく未来に備えて管理してある「**1024番～49151番ポート**」のこと

### ・エフェメラルポート(ephemeral port)
IANAで正式に登録されていない番号。世界中の誰でも自由に設定できる「**49152番～65535番ポート**」のことで、よく使われるプログラムに割り当てられる。一般ユーザーは使用可能

::: note info
**・IANA(Internet Assigned Numbers Authority)とは？**
ドメイン名やIPアドレス、ポート番号といったインターネット資源を管理する組織
:::

それぞれの特性のサービスやプロトコルが利用するため、公開するサーバは該当するポート番号を利用することが推奨される
ポート番号とサービス名の情報は`/etc/services`に記述されている。

| ポート番号 | プロトコル | サービス名 | 説明 |
|:-:|:-:|:-:|:-:|
| 20 |  TCP |  ftp-data |FTPのデータを送る   |
| 21 |  TCP |  ftp |FTPの制御を行う   |
| 22 |  TCP/UDP | ssh  |暗号化技術を使用してリモート操作やファイル転送を行う   |
| 23 |  TCP | telnet  |暗号化技術を使用せずにリモート操作やファイル転送を行う   |
| 25 |  TCP | SMTP  | 電子メールの送信を行う |
| 53 |  TCP/UDP | dns  | DNSの名前解決に使用  |
| 80 |  TCP/UDP | http  |webサーバと通信する   |
| 123 | UDP  | ntp  |時刻同期に使用   |
| 443 |  TCP/UDP | https  |webサーバとの通信にSSLを使用   |

::: note warn
**必ずしもウェルノウンポートで指定されている番号に従う必要はない**。HTTPのプロキシサーバーなどは、わざと本来とは別のポート番号でサービス提供することもある
:::




# ネットワークの基本設定
設定するには、コマンドを使って設定するか、/etc以下の設定ファイルに記述する方法がある。コマンドを使った設定は再起動すると失われるため、設定ファイルに起動することで永続的な設定になる。


### /etc/hostname
**Debian系ディストリビューション**で使用され、ホスト名のみが記述されており、設定を行うことが可能。ディストリビューションによって`/etc/HOSTNAME`というファイル名になっている。

~~~ md
[root@localhost ~]# cat /etc/hostname
localhost
~~~

### /etc/sysconfig/network
**Red Hat系ディストリビューション**で使用され、ホスト名や、ネットワーク機能の有効/無効、デフォルトゲートウェイの設定などを記述する。

::: note info
Red Hat Enterprise Linux（RHEL）7からは、ホスト名の設定はDebian系同様`/etc/hostname`を使用するようになっている
:::

~~~ md
[root@localhost ~]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=localhost
GATEWAY=192.168.1.0
~~~


### /etc/hosts
名前解決に用いられるシンプルなテキストファイルで、IPアドレスとホスト名とを関連付けている。IPアドレスはIPv4、IPv6どちらでも指定可能。
小規模の閉じたネットワークなら、このファイルを作成し全てのホストに配布することで名前解決が実現可能。変更があった場合はその都度書き換えがいるので、大規模には向かない。
~~~ md
[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
~~~


### /etc/network/interfaces
Debian系ディストリビューションで、ネットワークインターフェースの設定を記述している

### /etc/sysconfig/network-scriptsディレクトリ 
Red Hat系ディストリビューションで、様々なネットワークインターフェースの設定ファイルが配置されている。ネットワークインターフェース名がeth0の場合、設定ファイル名はifcig-eth0となる。IPアドレスを固定で割り当てたい場合などに編集する。


::: note info
最新のRedHat系、CentOS7では、/etc/sysconfig/network-scriptsディレクトリを編集するのではなく、nmtui/nmcliコマンドを使って設定することが推奨されている
:::



### /etc/services
ポート番号とサービス名の情報が記述されている。

~~~ md
ticf-1          492/tcp                 # Transport Independent Convergence for FNA
ticf-1          492/udp                 # Transport Independent Convergence for FNA
ticf-2          493/tcp                 # Transport Independent Convergence for FNA
ticf-2          493/udp                 # Transport Independent Convergence for FNA
pov-ray         494/tcp                 # POV-Ray
pov-ray         494/udp                 # POV-Ray
~~~



### systemd-networkd
systemdの動作するシステムでネットワーク設定を管理するデーモン。設定は`/etc/systemd/network`配下の拡張子.networkのファイルで行う。



## NetworkManagerによる設定
CentOSやRed Hat Enterprise Linuxで導入されている動的にネットワークを管理する仕組み。ノートPCなどでネットワーク環境を切り替えるのに向いている。
以下のコマンドで利用状況を確認することが出来る

~~~ md
# systemctl status NetworkManager
~~~

システムで検出されたネットワークデバイスは**自動で管理**され、特定のインタフェースを管理しないように設定できる。
DHCPサーバが有効な環境であればDHCPによって動的なIPアドレスが割り当てられる。

**ethernet(有線)、wifi(無線)、bridge(異なるネットワーク間の接続**)のネットワークデバイスのタイプ種類がある。

+ 設定をしていない全てのインターフェースに対して設定を行う
+ 特別な設定をしてあるインターフェース以外はDHCPを設定する
+ 検出されたネットワークデバイスは自動でNetworkManagerによって管理される
+ 特定のインタフェースをNetworkManagerで管理しないように設定できる

### nmcli(Network Manager command-line)コマンド
**書式：nmcli オブジェクト [コマンド]**
ネットワークの設定、接続管理、状態の確認などを行えるコマンド。引数のオブジェクト(以下4種類)は、操作対象のカテゴリのことで省略することが可能。変更を伴う操作はrootユーザー権限のみだが、参照するだけであれば一般ユーザーでも可能。
引数なしで実行すると、現在認識しているデバイス情報が表示される。

+ **general**:NetworkManagerの状態や操作一般を扱う

| コマンド | 説明 |
|:-:|:-:|
| status  | NetworkManagerの状態を表示する  |
| hostname  | ホスト名を表示する  |
| hostname ホスト名  | 指定したホスト名に変更する  |

+ **networking**:ネットワーク管理全般を扱う

| コマンド | 説明 |
|:-:|:-:|
| on/off  | ネットワークを有効または無効にする  |
| connectivity [check]  | ネットワークの状態を表示する。[check]を指定すると再確認する |

【**connectivityで表示される設定項目**】

| 状態 | 説明 |
|:-:|:-:|
| full  | インターネットにアクセス可能なネットワークに接続している  |
| portal  | インターネットにアクセスする前のcaptive potralの状態である  |
| limited  | ネットワークに接続しているが、インターネットにアクセスできない  |
| none  | どのネットワークにも接続していない  |
| unknown  | 接続状態が見つからない  |

::: note info
**・captive portalとは？？**
Wi-Fiホットスポットやホテルなどで、インターネット利用前に強制的に認証や課金のWebページを参照させる技術。ログインが完了しないとインターネットにアクセスできない
:::

~~~ md
[root@localhost etc]# nmcli networking connectivity
full
~~~




+ **radio**:無線ネットワークを扱う

| コマンド | 説明 |
|:-:|:-:|
| wifi  | Wi-Fiの状態を表示する |
| wifi on/off  | Wi-Fi接続を有効または無効にする  |
| wwan  | モバイルブロードバンドの状態を表示する  |
| wwan on/off  | モバイルブロードバンド接続を有効または無効にする  |
| all on/off  | 全ての無線接続を有効または無効にする  |

+ **connection**:接続を扱う

| コマンド | 説明 |
|:-:|:-:|
| show [--active]  | 接続情報を表示する。activeが指定されればアクティブな接続のみ |
| modify インターフェース名 パラメータ  | 指定した接続を設定する  |
| up ID  | 接続を有効にする |
| down ID  | 接続を無効にする  |

+ **device**:デバイスを扱う

| コマンド | 説明 |
|:-:|:-:|
| status  | デバイスの状態を表示する  |
| show インターフェース名  | 指定したデバイスの情報を表示する |
| modify インターフェース名 パラメータ  | 指定したデバイスを設定する  |
| connect インターフェース名  | 指定したデバイスを接続する |
| disconnect インターフェース名  | 指定したデバイスを切断する |
| monitor インターフェース名  | 指定したデバイスを監視する |
| wifi list  | Wi-Fiアクセスポイントを表示する |
| wifi connect SSID  | Wi-Fiアクセスポイントに接続する |
| wifi hotspot  | Wi-Fiホットスポットを作成する |
| wifi rescan  | Wi-Fiアクセスポイントを再検索する |

~~~ md
##現在アクティブとなっているデバイス情報を取得する
$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  exxxxxxx-dxxx-3xxx-9xxx-xxxxxxxxxxxx  ethernet  eth0   
~~~

### nmtuiコマンド
curses(カーシス:UNIX向け端末制御ライブラリ)ベースのテキストユーザーインターフェース。テキストの組み合わせで画面を構成し、ボタンやメニューをキーボードで移動して操作する。


![スクリーンショット 2023-08-23 103433.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/1608c346-4344-05ba-17dc-ae9ca34ef0c8.png)




### hostnamectlコマンド
**書式：hosetnamectl [サブコマンド]**
ホスト名を設定するコマンド。サブコマンドなしに実行すると、ホスト名と関連情報が表示される。

| サブコマンド | 説明 |
|:-:|:-:|
| status  | ホスト名と関連情報を表示する(デフォルト)  |
| set-hostname ホスト名  | ホスト名を設定する  |

~~~ md
$ hostnamectl
   Static hostname: server1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 0ae27c0b9a48e140810fcddec0520100
           Boot ID: 6ff4d74225e9457381ae5f088024a000
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1160.6.1.el7.x86_64
      Architecture: x86-64
~~~




# ネットワークのトラブルシューティング

### pingコマンド
**書式：ping [オプション] ホスト名またはIPアドレス**
指定されたホスト(ホスト名もしくはIPアドレス)にICMPパケットを送り、その反応を表示するコマンド。送信回数を指定しなければ、Ctrl＋Cキーを押すまで繰り返しパケットが送られる。
通信に問題がある場合は、エラーの原因として時間超過や宛先到達不能などのメッセージが返される
IPv6の場合は、**ping6コマンド**を使用する。使い方は一緒

| オプション | 説明 |
|:-:|:-:|
| -c(count) 回数  | 指定した回数だけICMPパケットを送信する  |
| -i(interval) 間隔  | 指定した間隔(秒)毎にICMPパケットを送信する。デフォルトは1秒  |
| -n(numeric) | 結果表示時の形式をホスト名ではなくアドレスで表示  |

::: note info
停止しているサーバに対してpingを実行した場合は応答がない。
:::

### tracerouteコマンド
**書式：traceroute [オプション] 宛先**
指定されたホスト(ホスト名またはIPアドレス)までパケットが伝わる経路を表示する。宛先までのルータやホストが順に表示されるため、ネットワーク経路上に障害があった場合はその位置を特定できる可能性がある。

| オプション | 説明 |
|:-:|:-:|
| -n (numeric) | 結果表示時の形式をホスト名ではなくアドレスで表示  |

::: note info
IPv6の場合は、**traceroute6コマンド**を使用する。使い方は一緒
:::


### tracepathコマンド
**書式：tracepath ホスト名またはIPアドレス[/ポート番号]**
tracerouteコマンドと同様、指定されたホスト(ホスト名またはIPアドレス)までパケットが伝わる経路を表示し、PathMTUを確認する。
IPv6の場合は、**tracepath6コマンド**を使用する。使い方は一緒

| オプション | 説明 |
|:-:|:-:|
| -n  | 経路ホストの名前解決を行わない  |
| -b  | ホスト名とIPアドレスを両方出力  |
| -l  | 送信パケットサイズを指定する（デフォルトはtracepathで65536、tracepath6で128000）  |
| -m  | 最大ホップ (または最大 TTL) を 30 ではなく max_hops に設定する  |
| -p  | 使用する最初の宛先ポートを設定  |

::: note info
**・Path MTU Discoveryとは？？**
IPネットワーク上で特定の相手までの経路上の最小のMTU(Maximum Transmission Unit：機器が一度に送信できる最大のデータ量)を調べること
:::

~~~ md
[root@centos ~]# tracepath -b www.yahoo.co.jp
 1?: [LOCALHOST]                      pmtu 1500
 1:  web.setup (192.168.0.1)                               0.513ms 
 1:  web.setup (192.168.0.1)                               0.397ms 
 2:  web.setup (192.168.0.1)                               0.426ms pmtu 1454
~~~




### hostnameコマンド
**書式：hostname [ホスト名]**
ホスト名を一時的に変更するコマンド。ホスト名を指定しなかった場合、現在のホスト名を表示する。rootユーザー権限のみ可能。


### netstatコマンド
**書式：netstat [オプション]**
ネットワーク機能に関わる様々な情報を表示するコマンド。開いているポートの確認によく利用される。その際にはアドレスやポート番号の名前解決を自動で行って表示するが、この時に**DNSサーバに障害などがあると、名前解決が出来ずに結果が表示がされない**場合がある。
オプション無しで実行すると、有効なネットワーク接続や開いているソケットの情報等を表示する。


| オプション | 説明 |
|:-:|:-:|
| -a  | 全てのソケット情報を表示する  |
| -c  | 状況を1秒ごとにリアルタイムで表示する  |
| -i  | ネットワークインターフェースの統計状態を表示する  |
| -n  | アドレスやポートの名前解決をしないで表示する  |
| -p  | PIDとプロセスも表示する  |
| -r  | ルーティングテーブルを表示する  |
| -t  | TCPポートのみを表示する  |
| -u  | UDPポートのみを表示する  |

~~~ md
[root@localhost ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost.localdoma:ssh 10.0.2.2:59023          ESTABLISHED
tcp6       0      1 localhost.localdo:      tp-in-f26.1e100.ne:smtp SYN_SENT
tcp6       0      1 localhost.localdo:      ta-in-f26.1e100.ne:smtp SYN_SENT
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    12563    /run/systemd/shutdownd
unix  2      [ ]         DGRAM                    18830    /var/run/chrony/chronyd.sock
unix  3      [ ]         DGRAM                    7644     /run/systemd/notify
unix  2      [ ]         DGRAM                    7646     /run/systemd/cgroups-agent
unix  5      [ ]         DGRAM                    7657     /run/systemd/journal/socket

[root@localhost ~]# netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
enp0s3           1500      135      0      0 0           260      0      0      0 BMRU
enp0s8           1500      486      0      0 0           162      0      0      0 BMRU
lo              65536      161      0      0 0           161      0      0      0 LRU
virbr0           1500        0      0      0 0             0      0      0      0 BMU
~~~




### ssコマンド
**書式：ss [オプション]**
netstatの後継となるコマンド。ネットワークのソケットの情報を表示する。
ifconfig、route、arp、netstatコマンドなど旧来のネットワーク関連ユーティリティであるnet-toolsの代替として開発された**iproute2ユーティリティ**に含まれている

| オプション | 説明 |
|:-:|:-:|
| -a  | 全てのソケットを表示  |
| -n  | サービス名の名前解決をしない  |
| -t  | TCPソケットを表示  |
| -u  | UDPソケットを表示  |


### nc(netcat)コマンド
**書式：nc [オプション] 接続先アドレス 宛先ポート番号**
catコマンドと同様の働きをネットワーク上で行うコマンド。TCP/UDPを使った通信を手軽に行うことのできる便利なツール。ネットワーク通信の確認などに利用する。簡易的なサーバにもなれる。
宛先ポート番号が未指定の場合、デフォルトで31337番ポートが指定されたものとして動作する。

| オプション | 説明 |
|:-:|:-:|
| -l  | 指定したアドレス、ポート番号で接続の待ち受けをする  |
| -p ポート  | 送信元ポート番号を指定する  |
| -u  | UDPを利用する。デフォルトはTCP  |
| -o ファイル  | 指定したファイルに出力する  |


### routeコマンド
**書式：route [オプション]**
**設定書式：route add[オプション] 対象**
**削除書式：route del[オプション] 対象**
ルーティングテーブルの表示、追加、削除や操作を行うコマンド。引数なしで実行すると、ルーティングテーブルが表示される。

| オプション | 説明 |
|:-:|:-:|
| -F  | ルーティングテーブルを表示する  |
| -C  | ルーティングキャッシュを表示する  |
| -n  | 名前解決をせずルーティングテーブルを表示する。ルーティングテーブルの表示に非常に時間がかかってしまっている場合、表示までのプロセスを変えることによってすばやく表示することができる|
| -host  | 対象をホストのアドレスとみなす |
| -net  | 対象をネットワークアドレスとみなす |
| netmask  | サブネットマスクを指定 |
| gw  | ゲートウェイを指定 |
| default gw  | デフォルトゲートウェイを指定 |
| default  | IPアドレスを指定しないデフォルトゲートウェイ |


~~~ md
##デフォルトルート(デフォルトゲートウェイは192.168.122.1)を追加・削除
# route add default gw 192.168.122.1
# route del default gw 192.168.122.1

[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.0        0.0.0.0         UG    100    0        0 enp0s3
0.0.0.0         192.168.1.1     0.0.0.0         UG    101    0        0 enp0s8
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 enp0s3
192.168.0.0     0.0.0.0         255.255.255.0   U     101    0        0 enp0s8
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 virbr0
~~~

| 項目 | 説明 |
|:-:|:-:|
| Destination  | 宛先のネットワークもしくはホスト  |
| Gateway  | ゲートウェイのアドレス。「＊」は未設定  |
| Genmask  | 宛先のサブネットマスク  |
| Flags  | 経路の状態。U:経路が有効、H:宛先はホスト、G:ゲートウェイを使用、！:経路は無効  |
| Metric  | 宛先までの距離  |
| Ref  | ルートの参照数(不使用)  |
| Use  | 経路の参照数  |
| Iface  | この経路を使うネットワークインターフェース  |



### ipコマンド
**書式：ip オブジェクト [コマンド] 値**
ネットワークインターフェースやルーティングテーブル、ARPテーブルなどを管理するコマンド。オブジェクト（機能）に対して、コマンド（処理）を指定する形式で実行する。
[-s]オプションを付けることで、送受信バイト数などの統計情報も表示することができる。

| オブジェクト | 説明 |
|:-:|:-:|
| link  | ネットワークデバイス  |
| addr  | IPv4,IPv6アドレス  |
| route  | ルーティングテーブル  |
| neighbour(neighbor)  | IPv4のARPキャッシュ,IPv6のNDキャッシュ|


| コマンド | 説明 |
|:-:|:-:|
| show  | 現在の状態を表示する  |
| add  | 値の追加  |
| del  | 値の削除  |

~~~ md
##デフォルトルート(デフォルトゲートウェイは192.168.122.1)を追加・削除
# ip route add default via 192.168.122.1
# ip route del default via 192.168.122.1

##インタフェース「enp0s3」の送受信バイト数などの統計情報を確認
# ip -s link show dev endp0s3

##インターフェース「eth0」にIPアドレス「192.168.1.1」、クラスのデフォルト値を使用してサブネットマスクを追加する
# ip addr add 192.168.1.1/255.255.255.0 dev eth0

##インタフェースeth0を有効化する
# ip link set eth0 up
~~~





# ネットワークインターフェースの設定

### ifconfigコマンド
**書式：ifconfig ネットワークインターフェース名 パラメータ**
IPアドレスを確認するときによく使われる。ネットワークインターフェースの状態を表示したり、設定を行ったりする。引数なしで実行すると、有効化されている全てのネットワークインターフェースの状態を表示する。
設定した値は再起動すると失われる。永続的にする場合は、記述ファイルに記述する
表示結果からは、**インターフェースのMACアドレスやIPアドレス、ブロードキャストアドレス、サブネットマスク、MTU（最大転送単位**）などが確認できる。

| パラメータ | 説明 |
|:-:|:-:|
| IPアドレス  | IPアドレスを設定する  |
| netmask  サブネットマスク  | サブネットマスクを設定する  |
| up  | ネットワークインターフェースを有効化する  |
| down  | ネットワークインターフェースを無効化する  |

~~~ md
[root@localhost ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.1.0  netmask 255.0.0.0  broadcast 10.255.255.255
        inet6 0000::0:48:bf4a:ff20  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:7c:00:b0  txqueuelen 1000  (Ethernet)
        RX packets 472  bytes 37440 (36.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 418  bytes 60515 (59.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
~~~




### ifupコマンド
**Red Hat系書式：ifup ネットワークインターフェース名**
**Debian系書式：ifup ネットワークインターフェース名**
指定したインターフェースを有効にするコマンド。最近のディストリビューションでは使えないことがある。


### ifdownコマンド
**Red Hat系書式：ifdown ネットワークインターフェース名**
**Debian系書式：ifdown [オプション] ネットワークインターフェース名**
指定したインタフェースを無効にするコマンド。




# DNS(Domain Name System)の設定
DNSサーバがホスト名とIPアドレスの変換サービスを提供する。これを名前解決と言い、ホスト名からIPアドレスを求めることを**正引き**、その反対を**逆引き**という。

![キャプチャ14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3238179/3599935c-d4aa-27ce-2b4b-82ceb42e9ae5.png)

## 設定ファイル

### /etc/resolv.conf
参照先DNSサーバを設定する。複数指定する場合は、1行ずつ記述する。

| 項目 | 説明 |
|:-:|:-:|
| nameserver  | 名前解決に使用するDNSサーバ(1サーバ1行)  |
| domain  | 自サーバの所属するドメイン名  |
| search  | 名前解決の際に省略されうるドメイン名のリスト(スペース区切り)  |

+ nameserverは標準では3つまでしか設定不可。上限を変更する場合はライブラリの再コンパイルが必要。
+ domainは自身の所属するドメイン名を記述する。ホスト名のみの問い合わせの場合は同じドメインに所属するホストとみなされ、自動的にドメイン名が追加される。
+ searchは省略されうるドメイン名を列挙する。最大6つまでしか設定できず、上限を変更する場合はライブラリの再コンパイルが必要。
+ domainとsearchはいずれか一つしか設定できず、最後に記述されたものが有効になる。


~~~md
[root@localhost]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
~~~


### /etc/nsswitch.conf
NSS(Name Service Switch)と呼ばれる、GNU Cライブラリが**名前解決やサービス名解決の際の問い合わせ順序を指定するデータベースファイル**。「hosts:」に続けて優先順位の高い方から名前解決方法を記述する。最初の「files」で「/etc/hosts」ファイルを参照して名前解決をするように指定し、それができなければ続く「dns」でDNSサーバに問い合わせを行うように指定している。

~~~ md
##/etc/nsswitch.confファイルの書式
# cat /etc/nsswitch.conf
hosts:  files dns
services:  files
(files→/etc/hostsファイル、dns→DNSサーバ)
~~~


### /etc/systemd/resolve.conf
systemd-resolvedサービスを利用した名前解決の設定ファイル




### getentコマンド
**書式：getent データベース名 [キー ...]**
ユーザー情報、パスワード情報の取得、ホスト名からIPアドレスを取得する際の情報検索先などの情報を問い合わせるコマンド。データベース名には、passwd,hostsなど `/etc/nsswitch.conf`で指定できるサービス名を指定する。キー名にはデータベースのキーを指定する。キーを指定しなかった場合、指定したデータベースの全ての内容が表示される。

1. 名前解決の順序を`/etc/nsswitch.conf`で指定する
2. 「hosts」項目で設定
3. 「files dns」の設定であれば、`/etc/hosts`から検索
4. 見つからなければ次にDNSサーバに問い合わせを行う

~~~ md
##/ete/passwd内のユーザーuser01のエントリを表示する場合
# getent passwd user01

##yahoo.co.jpの名前解決を表示する場合
[root@localhost ~]# getent hosts yahoo.co.jp
183.79.250.251  yahoo.co.jp
183.79.217.124  yahoo.co.jp
183.79.249.124  yahoo.co.jp
182.22.31.124   yahoo.co.jp

~~~

::: note info
**・LDAP(Lightweight Directory Access Protocol)とは？？**
ディレクトリサービスに使われるプロトコル。ユーザー情報やグループ情報などを一元管理することが出来る
:::


### hostコマンド
**書式：host [オプション] ホスト名またはIPアドレス [DNSサーバ]**
DNSサーバを使ってホストやドメインに関する情報を表示するコマンド。最もシンプルに情報を得ることができ、ホスト名とIPアドレスの変換を行う。

| オプション | 説明 |
|:-:|:-:|
| -t  | 問い合わせる情報の指定(type)  |
| -v  | 詳細な情報を表示する  |

| 検索タイプ | 説明 |
|:-:|:-:|
| a  | IPアドレス  |
| aaaa  | IPv6アドレス  |
| any  | 全ての情報  |
| mx  | メールサーバの情報  |
| ns  | ネームサーバの情報  |

~~~ md
[root@localhost ~]# host -t a www.yahoo.co.jp
www.yahoo.co.jp is an alias for edge12.g.yimg.jp.
edge12.g.yimg.jp has address 182.22.16.251
~~~


### digコマンド
**書式：dig [オプション] [@DNSサーバ名] ホスト名またはドメイン名 [検索タイプ]**
DNSサーバへ直接問い合わせて、指定した名前に関するDNSサーバからの応答を表示するコマンド。知りたい情報のタイプは検索タイプで指定する。
デフォルトの検索タイプは[a](IPアドレス)になっている。

| オプション | 説明 |
|:-:|:-:|
| -t  | 問い合わせるDNSサーバを指定する  |
| -x  | IPアドレスからホスト名を検索する  |

| 検索タイプ | 説明 |
|:-:|:-:|
| a  | IPアドレス  |
| aaaa  | IPv6アドレス  |
| any  | 全ての情報  |
| mx  | メールサーバの情報  |
| ns  | ネームサーバの情報  |
| soa  | ゾーン(ドメインの範囲)の情報  |

~~~ md
## DNSサーバに登録されている、「yahoo.co.jp」のネームサーバの情報を表示する
# dig yahoo.co.jp ns

##外部のDNSサーバ8.8.8.8に「yahoo.co.jp」のIPアドレスを問い合わせる
# dig @8.8.8.8 yahoo.co.jp
~~~

### nslookupコマンド
**書式;nslookup [オプション] [ドメイン名またはIPアドレス] [DNSサーバ]**
DNSサーバに名前解決を問い合わせるコマンド。DNSサーバが正常に動作しているのかを調べる際にも、利用できる。

### whoisコマンド
whoisサーバのデータベースに問い合わせを行い、ドメインの登録者や管理者、所属団体等の情報を得るコマンド。