Edited at

RHEL7 系のネットワーク設定

More than 1 year has passed since last update.

RHEL 6 系と変わった点、変わってない点を整理するために調査・確認してまとめた個人用メモです。書かれている情報を利用する際は併記されている情報ソースを必ず確認してください。主に参照した情報ソースは「RHEL7ドキュメント」「標準テキスト CentOS7」の2つ。


NetworkManger とは


情報ソース


概要


  • RHEL6 ではネットワークスクリプト(/etc/init.d/network)によりネットワーク設定が行われていた


    • ここが /etc/sysconfig/network-scripts/etc/sysconfig/static-routes などを読んでいた



  • RHEL7 より NetworkManager を使ってネットワーク設定することが推奨されている

  • ただしそのままスクリプトを継続して使用することもできる

  • NetworkManager は現在、RHEL 7 でデフォルトで使用されている

  • NetworkManager を無効すると、ネットワークインターフェイス管理には代わりに initscripts が使用される

  • NetworkManager の使用が増えてきているため、今後のメジャーリリースで Network Initscript が廃止になる可能性がある

  • NetworkManager は sysconfig 設定ファイルを使用するプライマリーアプリケーションとされており、/etc/init.d/network はフォールバックとなるセカンダリーとされている

  • RHEL7 でのネットワーク設定の方法には具体的には以下の4つの方法がある


    • nmcli

    • nmtui

    • GNOME コントロールセンター

    • ファイルを直接編集する




NetworkManager の制御


情報ソース


概要



  • NetworkMangersystemd によって管理されていて、デフォルトでは起動時に立ち上がる

  • 制御は systemctl コマンドを利用して以下のように行う

systemctl start NetworkManager

systemctl stop NetworkManager
systemctl restart NetworkManager
systemctl status NetworkManager


  • NetworkManager がデーモンで起動していることは次のように確認できる

# systemctl status NetworkManager

● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2017-12-26 05:04:04 JST; 1 day 22h ago
Docs: man:NetworkManager(8)
Main PID: 746 (NetworkManager)
CGroup: /system.slice/NetworkManager.service
└─746 /usr/sbin/NetworkManager --no-daemon


ネットワーク設定と設定ファイル

ネットワーク設定ファイルの位置はかわらずだが、ファイルを直接編集せず nmcli, nmtui などを利用することが推奨されている。サーバー構築時に主に設定する内容と対応する設定ファイルは以下のとおり。


  • ホスト名とIPアドレスの対応関係: /etc/hosts

  • 問い合わせ先DNSサーバ設定: /etc/resolve.conf


    • nmcli で DNS サーバーを指定すると自動的に更新される



  • ネットワーク名とネットワークアドレスの対応関係: /etc/networks

  • インターフェースの設定: /etc/syscnofig/network-scripts/ifcfg-*


    • NIC の命名が eth0, eth1 のような形ではなく、udev によりデバイスに応じて命名されている



  • インターフェースごとのルーティング設定: /etc/sysconfig/network-scripts/route-*


    • ip コマンドを使って設定した静的ルートは、システムが終了したり再起動すると失われる



重要な設定を一部抜粋して確認する


/etc/sysconfig/network-scripts/ifcfg-*


情報ソース


概要


  • ip コマンドを使ったネットワークインターフェースの設定は、システムが終了したり再起動すると失われる

  • システム再起動後も維持されるようにネットワークインターフェースを設定するには、/etc/sysconfig/network-scripts/ ディレクトリー内のインターフェースごとの設定ファイルに格納する必要がある

  • ファイル名は、ifcfg-

  • 設定項目はざっくりと以下のような具合


    • TYPE(Ehternet, Wireless, Bridge): 種類

    • BOOTPROTO(none, bootp, dhcp): 起動方法

    • DEFROUTE(yes, no): デフォルトルートとして使用されるか

    • IPV4_FAILURE_FATAL(yes, no): IPV4 で初期化に失敗したときにインターフェースを起動失敗扱いにするか

    • NAME: インターフェースの名前

    • UUID: そのまま

    • DEVICE: 物理デバイス名

    • ONBOOT(yes, no): 起動時にインターフェースを起動するか

    • IPADDR: IPアドレス

    • PREFIX: ネットマスク



# 動的ネットワーク設定の例

DEVICE=em1
BOOTPROTO=dhcp
ONBOOT=yes

# 静的ネットワーク設定の例
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
PREFIX=24
IPADDR=10.0.1.27


  • ネットワークインターフェースの設定には以下の方法がある


    • nmcli コマンドを実行する

    • nmcli エディターを利用する

    • nmtui を利用する



コネクション名が扱いづらい形なので修正したほうが作業がしやすい

$ nmcli connection show

NAME UUID TYPE DEVICE
System ens192 ******************* 802-3-ethernet ens192

$ nmcli connection modify "System ens192" connection.id eth0
NAME UUID TYPE DEVICE
eth0 ******************* 802-3-ethernet ens192

設定はおおむね以下のような形

$ nmcli connection modify \

connection.autoconnect yes \
ipv4.dns 8.8.8.8 \
ipv4.method manual ipv4.addresses 10.*.*.*/24 \
+ipv4.routes "192.168.0.0/16 10.*.*.254"
ipv4.ignore-auto-routes no
ipv4.ignore-auto-dns yes


/etc/sysconfig/network-scripts/route-*


情報ソース


概要


  • ip コマンドを使って設定した静的ルートは、システムが終了したり再起動すると失われる

  • システム再起動後も維持される静的ルートを設定するには、/etc/sysconfig/network-scripts/ ディレクトリー内のインターフェースごとの設定ファイルに格納する必要がある

  • ファイル名は、route-

  • このファイルへの記述は次の2つの形式が利用できる


    • IP コマンド引数形式を使用した静的ルート

    • ネットワーク/ネットマスクディレクティブの形式



# IPコマンド引数形式の例

default via 192.168.0.1 dev eth0
10.10.10.0/24 via 192.168.0.10 dev eth0
172.16.1.10/32 via 192.168.0.10 dev eth0

# ネットワークネットマスクディレクティブ形式の例
ADDRESS0=10.10.10.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.0.10
ADDRESS1=172.16.1.10
NETMASK1=255.255.255.0
GATEWAY1=192.168.0.10


  • 静的ルートを設定するには、以下の方法がある


    • nmcli コマンドを実行する

    • nmcli エディターを利用する



# nmcli コマンドで静的ルート設定を追加

nmcli connection modify eth0 +ipv4.routes "192.168.122.0/24 10.10.10.1"

# nmcli エディタ
nmcli connection edit type ethernet con-name eth0
nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1


非推奨: /etc/sysconfig/network

個別のデバイス設定を用いることを推奨、グローバルのnetworkファイルは非推奨になった。


Red Hat Enterprise Linux ではグローバルの /etc/sysconfig/network ファイルの使用は非推奨となっており、ゲートウェイの指定はインターフェースごとの設定ファイルでのみ行なってください。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/networking_guide/sec-using_the_command_line_interface



nmcli コマンドについて

公式ドキュメント: https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/networking_guide/sec-using_the_networkmanager_command_line_tool_nmcli


  • nmcli は各種ネットワーク設定をコマンドラインから実行できるツール

  • 各パラメータは全方一致で省略が可能

nmcli [OPTIONS...] {help | general | networking | radio | connection | device | agent | monitor} [COMMAND] [ARGUMENTS...]


networking

ネットワークへの接続性を確認/制御できる



  • on, off, connectivity の三種類

$ nmcli network connectivity

full

connectivityの状態は、none(切断), portal(認証前), limited(インターネットに出れない), full(インターネットに出れる), unknown(不明) の5種類


general


  • NetworkManager の状態や権限などを表示できる

  • ホスト名, ログレベル, ドメインを取得できる

# Usage: nmcli general { COMMAND | help }

# COMMAND := { status | hostname | permissions | logging }

# hostname 表示/変更 => hostnamectl でも操作可能
$ nmcli general hostname
test01
$ nmcli general hostname prod01
$ nmcli general hostname
prod01
$ cat /etc/hostname
prod01

# status 表示
$ nmcli general status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full enabled enabled enabled enabled


ip コマンドについて


  • RHEL7 系では route, ifconfig コマンド(net-tools)に代わり、ip コマンド(iproute2)の利用が推奨されている

  • ip コマンドはルーティング、デバイスなどを表示・設定できるコマンド

SYNOPSIS

ip [ OPTIONS ] OBJECT { COMMAND | help }

ip [ -force ] -batch filename

OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token }

OPTIONS := { -V[ersion] | -h[uman-readable] | -s[tatistics] | -d[etails] | -r[esolve] | -iec | -f[amily] { inet | inet6 | ipx | dnet | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] { maxi‐
mum-addr-flush-attempts } | -o[neline] | -rc[vbuf] [size] | -t[imestamp] | -ts[hort] | -n[etns] name | -a[ll] }


firewalld について


  • RHEL6 系までは iptables が利用されていた

  • RHEL7 系では firewalld がデフォルトとなった


  • firewalld は、デフォルトで iptablesip6tablesebtables のリストアコマンドを使用し、ルールセットを変更する全ファイアウォールアクションを高速化する

  • CLIツールとして firewall-cmd、GUI ツールとして firewall-config が用意されている

  • firewalld が提供するファイアウォールのサービスは、設定の変更はいつでも可能で即座に実行される


    • 変更は保存したり適用したりする必要がない



  • firewalld の設定は /usr/lib/firewalld//etc/firewalld/ に保存される

# Firewall 設定の起動/終了/再起動/確認

$ systemctl start firewalld
$ systemctl stop firewalld
$ systemctl restart firewalld
$ systemctl status firewalld

# Firewall の有効化/無効化
$ systemctl enable firewalld
$ systemctl disable firewalld

# Firewall 設定の確認
$ firewall-cmd --list-service
dhcpv6-client ssh


情報ソース


firewalld と system-config-firewall および iptables との比較

firewalldiptables(ip6tables) の本質的な違いは以下の2つ


  • 設定ファイルの場所が違う



    • iptables は設定を /etc/sysconfig/iptables/etc/sysconfig/ip6tables に保存する


    • firewalld は設定を /usr/lib/firewalld//etc/firewalld/ に保存する

    • RHEL7 の初期状態では firewalld がデフォルトでインストールされるので /etc/sysconfig/iptables ファイルが存在しない



  • 設定追加に iptables は全て再読み込みを行うが、firewalld は差分更新のみを行う


    • firewalld では既存の接続が瞬断されることなく設定追加が可能




情報ソース


firewall-cmd コマンドラインツールを使用したファイアウォールの設定


ゾーンの設定


  • firewalld には典型的な設定のテンプレートであるゾーンが用意されている

  • ゾーンの種類は以下のとおり


    • drop

    • block

    • public

    • external

    • dmz

    • work

    • home

    • internal

    • trusted



ゾーンの設定と確認方法は以下のとおり

# 確認

$ firewall-cmd --get-active-zones
public
interfaces: ens192 ens224

# 設定変更
$ firewall-cmd --change-interface=ens192 --zone=trusted
success
$ firewall-cmd --get-active-zones
public
interfaces: ens224
trusted
interfaces: ens192


ポート開放


  • dmz ゾーンに対して、ポート 8080 への TCP トラフィックを許可する場合は以下のようなかたち

  • かならず --parmanent で永続化する

$ firewall-cmd --zone=dmz --add-port=8080/tcp

$ firewall-cmd --zone=dmz --add-port=8080/tcp --permanent

サービスを追加する場合は以下のようにできる

# 80 を開放

$ firewall-cmd --zone=work --add-service=http
$ firewall-cmd --zone=work --add-service=http --parmanent

# 443 を開放
$ firewall-cmd --zone=work --add-service=https
$ firewall-cmd --zone=work --add-service=https --parmanent

# 確認
$ firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192 ens224
sources:
services: dhcpv6-client ssh http https
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:


情報ソース