RHEL/CentOS の基本的な設定：ネットワーク編

# ページ概要
RHEL/CentOSのネットワークについて、基本的な操作・確認手法についてまとめます。


# ネットワークの構造
Redhat系のOSでは、ネットワークは"NetworkManager.service"により管理されており、
以下の要素により構成されている。

| 要素 | 説明 |
|--- | ---|
|Device  | NIC。<br>物理的なネットワークハードウェア。|
|Connection  | 対象デバイスに適応するネットワーク設定。いわゆるプロファイル。<br>Deviceと関連付けすることで使用する。  |
|Interface   | DeviceとConnectionが紐づけられた、論理的なネットワーク実体。<br>OSやアプリケーションはInterfaceを使用してネットワーク通信を行う。|

▼1つのインタフェースのイメージ図
```
  App/OSがネットワークを使う際に見る
       ↓
┌-- Interface -------------------------┐
|                                      |
| 「Device」 ←-関連付け-- 「Connection」 |
|                                      |
└--------------------------------------┘
```

:::note warn
※Conenctionの設定ファイルについて、下記に存在するがファイルの直接編集は非推奨!
  nmcli/nmtuiにて操作すること。

/etc/NetworkManager/system-connections/インタフェース名.nmconnectio


:::



# 確認コマンド
## Device確認
- Device一覧
  ```
  # nmcli device
  
  DEVICE  TYPE      STATE           CONNECTION 
  br0     bridge    接続済み         br0        
  lo      loopback  接続済み (外部)  lo         
  enp6s0  ethernet  接続済み         enp6s0     
  wlp5s0  wifi      利用不可         --     
  ```
<br>

- 個別Deviceの詳細
  ```
  # nmcli device show enp6s0

  GENERAL.DEVICE:                         enp6s0            ※デバイス名
  GENERAL.TYPE:                           ethernet          ※インタフェースタイプ
  GENERAL.HWADDR:                         xx:xx:xx:xx:xx:xx ※MACアドレス
  GENERAL.MTU:                            1500              ※MTU
  GENERAL.STATE:                          100 (接続済み)     ※状態
  GENERAL.CONNECTION:                     enp6s0            ※紐づいたConnection
  GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
  WIRED-PROPERTIES.CARRIER:               オン               ※信号の状態
  IP4.GATEWAY:                            --
  IP6.GATEWAY:      
  ```
  
## Connection確認
- Connection一覧
    - Name：connection名
    - UUID：コネクションのUUID
    - TYPE：インタフェースの種類
    - DEVICE：関連付けられたDevice
  ```
    # nmcli connection 

    NAME    UUID                                  TYPE      DEVICE 
    br0     xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  bridge    br0
    lo      xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  loopback  lo     
    virbr0  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  bridge    virbr0 
    vnet0   xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  tun       vnet0  
    enp6s0  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  ethernet  enp6s0 
  ```
<br>

- 個別Connectionの詳細
  ```
  # nmcli connection show br0

   (結果一部抽出)
    connection.id:                          br0
    connection.uuid:                        xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    connection.stable-id:                   --
    connection.type:                        bridge
    connection.interface-name:              br0
    connection.autoconnect:                 はい
    ipv4.method:                            manual
    ipv4.dns:                               8.8.8.8
    ipv4.addresses:                         192.168.0.1/24
    ipv4.gateway:                           192.168.0.254
    ipv4.routes:                            --
    ipv6.method:                            disabled
  ```

## Interfaceの確認
- ip addr
    - インタフェース名
    - フラグ
    - MTU
    - MACアドレス
    - IPアドレス
    - ブロードキャストIP
  ```
  # ip addr
    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: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
        link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.1/24 brd 192.168.0.255 scope global noprefixroute br0
           valid_lft forever preferred_lft forever
  ```
<br>

- ip link show
    - インタフェース一覧
    - MACアドレス
    - 状態(UP/Down)
    - MTU
    - フラグ
  ```
  # ip link show
  
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP mode DEFAULT group default qlen 1000
        link/ether 18:c0:4d:92:3e:3e brd ff:ff:ff:ff:ff:ff
    3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
        link/ether 18:c0:4d:92:3e:3e brd ff:ff:ff:ff:ff:ff
  ```


  ## ルーティングの確認
  ```
  # ip route
  
    default via 192.168.10.1 dev br0 proto static metric 425 
    192.168.10.0/24  dev br0 proto kernel scope link src 192.168.10.10 metric 425
  ```


## DNSの確認
- nmcli
  ```
    # nmcli con show br0 | grep dns

    ipv4.dns:                       8.8.8.8
    ipv4.dns-search:                hoge.local,fuga.local
  ```

<br>

- ローカルの設定ファイル
  ```
    # cat /etc/resolv.conf

    # Generated by NetworkManager
    search hoge.local fuga.local
    nameserver 8.8.8.8
  ```
<br>

- hostsの確認
  ```
  # cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  ```


# 設定コマンド
:::note warn
設定変更はInterfaceの再起動により反映される
:::

## TUIによる設定
- コンソールの起動
    ```
    # nmtui
    ```

## コマンドによる設定
### IP設定
- IP変更
    ```
    # nmcli con mod 対象IF ipv4.addresses 変更後のIP/prefix
    ```
- IP追加(セカンダリIP)
    ```
    # nmcli con mod 対象IF +ipv4.addresses 追加IP/prefix
    ```
- IP削除
    ```
    # nmcli con mod 対象IF -ipv4.addresses 削除対象IP/prefix
    ```

### DNS設定
- DNS変更
  ```
  # nmcli con mod 対象IF ipv4.dns DNSサーバのIP
  ```
- DNS追加(2台目以降)
  ```
  # nmcli con mod 対象IF +ipv4.dns DNSサーバのIP
  ```
- DNS削除
  ```
  # nmcli con mod 対象IF -ipv4.dns DNSサーバのIP
  ```

### 経路設定
- デフォルトゲートウェイ変更
  ```
  # mcli con mod 対象IF ipv4.gateway ゲートウェイIP
  ```
- ルーティング追加
  ```
  # nmcli con mod 対象IF +ipv4.routes "宛先IP/prefix ゲートウェイIP"
  ```
- ルーティング削除
  ```
  # nmcli con mod 対象IF -ipv4.routes "宛先IP/prefix ゲートウェイIP"
  ```
- 即時適用の揮発設定(IF再起動したら消えるため注意!)
    - 追加 ※"dev IFデバイス"指定は、明示しなければ自動で設定される
      ```
      # ip route add 宛先IP/prefix via ｹﾞｰﾄｳｪｲIP dev IFデバイス
      ```
    - 削除
      ```
      # ip route del 宛先IP/prefix
      ```


### 自動接続
- 有効化
  ```
  # nmcli con mod 対象IF connection.autoconnect yes
  ```
- 無効化
  ```
  # nmcli con mod 対象IF connection.autoconnect no
  ```

# インタフェースのUP/Down
- 対象IFのUP/再起動 ※すでに起動状態なら再起動される
  ```
  # nmcli connection up 対象IF
  ```
- 対象IFのDown
  ```
  # nmcli connection down 対象IF
  ```