SlideShare a Scribd company logo
ver1.4 中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
RHEL7/CentOS7
NetworkManager徹底入門
2
RHEL7/CentOS7 NetworkManager徹底入門
自己紹介
 中井悦司(なかいえつじ)
– Twitter @enakai00
 日々の仕事
– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.
企業システムでオープンソースの活用を希望される
お客様を全力でご支援させていただきます。
 昔とった杵柄
– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
好評発売中!
3
RHEL7/CentOS7 NetworkManager徹底入門
Contents
 NetworkManagerの概要
 nmcliによる設定
 仮想ブリッジ/VLANデバイスの作成
 Teamデバイスの作成
 参考資料
NetworkManagerの概要
5
RHEL7/CentOS7 NetworkManager徹底入門
NetworkManagerとは?
 NetworkManagerは、RHEL7のネットワークを動的に設定するサービスです。
– ネットワークデバイスが動的に追加・削除される環境に対応することができます。 
RHEL7ではデフォルトのネットワーク管理機能となっており、動的変更が不要な場合で
も利用が必須です。
 設定内容を表す「接続(Connection)」とネットワークデバイスを表す「(デバ
イス)Device」を別々に定義して、それらを紐付けるという処理を行います。
– 新しい「デバイス(Device)」が追加された際に、既存の「接続(Connection)」に自
動で紐付けることで動的変更に対応します。管理者が明示的に紐付けを指定することも
できます。
NAME="Ethernet connection 1"
UUID="bc302e8f-f5f3-478d-bf87-e77d3288dac7"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR0="192.168.122.10"
...
NAME="Wi-Fi connection 1"
UUID=6fda7095-1685-468f-a138-608f53eb6048
TYPE=Wireless
BOOTPROTO=dhcp
ESSID="mynet"
...
eth0
接続(Connection)
適用
デバイス
(Device)
6
RHEL7/CentOS7 NetworkManager徹底入門
NICのネーミングルールについて
 RHEL7では、NICのネーミングルールに「Predictable Network Interface
Names」が採用されています。
– 典型的には、「ens6」「enp0s25」「wlp2s0」などのデバイス名になります(*)
。
 デバイスの物理ロケーションに応じて、固定的なデバイス名を割り当てます。
– 後半の「s6」の部分は、BIOSから取得した論理番号で、PCIスロット番号などに基いて、
BIOSが独自に提供します。BIOSが論理番号を提供しない場合は、カーネルが認識したPCI
バス番号とスロット番号に基いて、「p<Bus>s<Slot>」のルールになります。
– ロケーション情報を取得できないデバイスは、古典的な「ethX」になります。Linux
KVMのvirtio NICなどが該当します。
ens6
en:イーサネット
wl:ワイヤレス
o:オンボード
s:PCI Express
デバイス番号(PCIスロット番号などに対応)
(*) DELL製のサーバーでは、また異なるネーミングルール(biosdevname)になります。
 (参考)「RHEL7のNICのネーミングルール」http://d.hatena.ne.jp/enakai00/20140728/1406504163
7
RHEL7/CentOS7 NetworkManager徹底入門
net-toolsとiproute2について
 RHEL7を最小構成でインストールした環境では、「ifconfig, route, netstat,
arp」などのネットワーク関連コマンドが入っていません。
– これらのコマンドは、「net-tools」パッケージを追加することで利用可能になります。
 「net-tools」パッケージを導入しない環境では、「iproute2」パッケージに含ま
れる「ip, ss」などのコマンドを使用してください。
– 今後は、iproute2パッケージの方が標準になる予定です。
# yum -y install net-tools
net-tools iproute2
ifconfig ip addr, ip link
route ip route
netstat ss
netstat -i ip -s link
arp ip neighbor
主なコマンドの対応表
(参考)「RHEL7/CentOS7でipコマンドをマスター」http://d.hatena.ne.jp/enakai00/20140712/1405139841
8
RHEL7/CentOS7 NetworkManager徹底入門
デフォルトでの環境構成例
 RHEL7インストーラーのGUIでネットワークを設定すると次のような構成になり
ます。
– デバイスと同じ名前の「接続」が定義されて、該当デバイスに紐付けられます。「接
続」の名前は、一般には、デバイス名と無関係なので注意してください。
# nmcli d
デバイス タイプ 状態 接続
eth2 ethernet 接続済み eth2
ens6 ethernet 切断済み --
ens7 ethernet 切断済み --
lo loopback 管理無し --
# nmcli c
名前 UUID タイプ デバイス
eth2 bc302e8f-f5f3-478d-bf87-e77d3288dac7 802-3-ethernet eth2
「デバイス」の確認(「d」は「device」の略)
「接続」の確認(「c」は「connection」の略)
「デバイス」が紐付けられた「接続」
eth2
ens6
ens7
virtio NIC
rtl8139
Linux KVMの仮想マシンに
「Realtek」と「virtio」の
仮想NICをアサインした場合の例
9
RHEL7/CentOS7 NetworkManager徹底入門
設定内容の確認方法 (1)
 NetworkManagerで定義した「接続」の設定内容は、下記の設定ファイルに保存
されます。
– /etc/sysconfig/network-scripts/ifcfg-<接続名>
• インストーラーが作成する設定ファイルでは「” ”」でクォートされていますが、これは必須では
ありません。
– 設定ファイルを編集した場合は、次のコマンドで変更を反映します。
• 実際の設定変更は、設定ファイルの編集ではなく、後述のnmcliコマンドの使用が推奨です。
# nmcli c reload <接続名>
# nmcli c down <接続名>; nmcli c up <接続名>
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
...(中略)...
NAME="eth2"
UUID="bc302e8f-f5f3-478d-bf87-e77d3288dac7"
ONBOOT="yes"
HWADDR="52:54:00:84:56:D9"
IPADDR0="192.168.122.102"
PREFIX0="24"
GATEWAY0="192.168.122.1"
DNS1="192.168.122.1"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
10
RHEL7/CentOS7 NetworkManager徹底入門
設定内容の確認方法 (2)
 特定デバイスの設定内容は、次のコマンドで確認します。
– これは、該当デバイスに紐付けられた「接続」を通して設定された内容になります。
 「接続」の設定内容を直接に確認する際は、次のコマンドを使用します。
# nmcli c show eth2
connection.id: eth2
connection.uuid: bc302e8f-f5f3-478d-bf87-e77d3288dac7
...(中略)...
ipv4.method: manual
ipv4.dns: 192.168.122.1
ipv4.dns-search:
ipv4.addresses: { ip = 192.168.122.102/24, gw = 192.168.122.1 }
...(以下省略)...
# nmcli d show eth2
GENERAL.デバイス: eth2
GENERAL.タイプ: ethernet
GENERAL.HWADDR: 52:54:00:84:56:D9
GENERAL.MTU: 1500
GENERAL.状態: 100 (接続済み)
GENERAL.接続: eth0
GENERAL.CON パス: /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.キャリア: オン
IP4.アドレス[1]: ip = 192.168.122.102/24, gw = 192.168.122.1
IP4.DNS[1]: 192.168.122.1
IP6.アドレス[1]: ip = fe80::5054:ff:fe84:56d9/64, gw = ::
「デバイス名」
「接続名」
11
RHEL7/CentOS7 NetworkManager徹底入門
(参考)nmtuiコマンド
 nmtuiコマンドを使用すると、テキストベースのUIで対話的に設定変更が可能で
す。
– テスト環境などで、簡易的に設定変更を行う際は便利ですが、設定手順をコマンドとし
て記録/再現することができませんので、本番環境では使用しない方がよいでしょう。
nmcliによる設定
13
RHEL7/CentOS7 NetworkManager徹底入門
新規接続の追加
 次は、デバイス「ens6」に紐付けられた接続「ens6-con」を作成して、IPアドレ
スの設定を行う例です。
– デバイス名と接続名が独立していることに注意してください。
– 「nmcli c mod」では、次のように複数の項目をまとめて設定可能です。
• nmcli c mod <接続名> <設定項目> <設定内容> <設定項目> <設定内容> ...
– 設定可能な項目は、現在の設定内容をすべて出力すると分かります。
# nmcli c add type eth ifname ens6 con-name ens6-con
# nmcli c mod ens6-con ipv4.method manual ipv4.addresses "192.168.1.11/24" ipv4.gateway "192.168.1.1"
# nmcli c down ens6-con; nmcli c up ens6-con
「デバイス名」 「接続名」
「設定変更を反映」
# nmcli c show ens6-con
connection.id: ens6-con
connection.uuid: d9388c4e-31af-4ba9-bfda-c58e74316b14
connection.interface-name: ens6
...(中略)...
ipv4.method: manual
ipv4.dns:
ipv4.dns-search:
ipv4.addresses: { ip = 192.168.100.11/24, gw = 0.0.0.0 }
ipv4.routes:
...(以下省略)...
「IP/Mask」 「Gateway」
14
RHEL7/CentOS7 NetworkManager徹底入門
既存接続の変更
 既存の接続を設定変更する際は、先に説明した「nmcli c mod」を使用します。
– 次は、IPアドレスの設定をDHCPに変更する例です。
– 「nmcli c edit」は対話的に変更するオプションですが、次の「describe」コマンドで設
定項目の説明が表示できます。
# nmcli c mod ens6-con ipv4.method auto ipv4.addresses "" ipv4.gateway ""
# nmcli c down ens6-con; nmcli c up ens6-con
# nmcli c edit ens6-con
...
nmcli> describe ipv4.addresses
=== [addresses] ===
[NM プロパティの詳細]
Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the
first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the
IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that
subnet. For the 'auto' method, given IP addresses are appended to those returned by automatic
configuration. Addresses cannot be used with the 'shared', 'link-local', or 'disabled' methods as
addressing is either automatic or disabled with these methods.
[nmcli 固有の詳細]
次のような形式で IPv4 アドレスの一覧を入力してください。
ip[/prefix] [gateway], ip[/prefix] [gateway],...
プレフィックスがないものはプレフィックス 32 とみなします。
例: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24
nmcli> quit
15
RHEL7/CentOS7 NetworkManager徹底入門
接続の削除
 既存の接続を削除する際は、「nmcli c delete」を使用します。
– 次は、先に作成した「ens6-con」を削除する例です。
 nmcliの使い方は、次のオンラインドキュメントも参考になります。
– # man nmcli
• nmcliコマンドの全般的な説明
– # man nmcli-examples
• Bonding, Teaming, Bridgeなどの構成例が記載されています
# nmcli c
名前 UUID タイプ デバイス
eth2 bc302e8f-f5f3-478d-bf87-e77d3288dac7 802-3-ethernet eth2
ens6-con d9388c4e-31af-4ba9-bfda-c58e74316b14 802-3-ethernet ens6
# nmcli c delete ens6-con
# nmcli c
名前 UUID タイプ デバイス
eth2 bc302e8f-f5f3-478d-bf87-e77d3288dac7 802-3-ethernet eth2
16
RHEL7/CentOS7 NetworkManager徹底入門
ホストネームの設定について
 nmcliコマンドでホストネームを設定することもできます。
– 次はホストネームを「rhel7」に変更する例です。
 RHEL7では、ホストネームの管理はsystemdが行っており、本来は、hostnamectl
コマンドで設定します。
– ncmliは、hostnamectlコマンドに相当するAPIでsystemdを呼び出して、ホストネームを
変更しています。
– 次はhostnamectlコマンドでホストネームを変更する例です。
# hostnamectl set-hostname rhel7
# hostnamectl
Static hostname: rhel7
Icon name: computer
Chassis: n/a
Machine ID: d16c14e0d938a994f66447949c8f070e
Boot ID: 84e3caad343e436eb0ad6663e64f92ab
Virtualization: kvm
Operating System: Employee SKU
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.0:GA:server
Kernel: Linux 3.10.0-123.13.2.el7.x86_64
Architecture: x86_64
# nmcli g hostname rhel7
# nmcli g hostname
rhel7
仮想ブリッジ/VLANデバイスの作成
18
RHEL7/CentOS7 NetworkManager徹底入門
仮想ブリッジの作成手順 (1)
 次は、仮想ブリッジ「br0」を作成して、物理NIC「ens6」を接続する手順です。
– 確認用にbrctlコマンドを提供する「bridge-utils」を導入しておきます。
– 仮想ブリッジ「br0」とその接続「bridge-br0」を作成します。
• 「con-name」オプションを省略すると、接続名は「bridge-<デバイス名>」になります。
– 仮想ブリッジにIPアドレスなどの設定を追加します。
– 仮想ブリッジに物理NIC「ens6」を接続するための接続「bridge-slave-ens6」を追加し
ます。
• 「con-name」オプションを省略すると、接続名は「bridge-slave-<デバイス名>」になります。
# nmcli c add type bridge ifname br0 con-name bridge-br0
# yum -y install bridge-utils
# nmcli c mod bridge-br0 bridge.stp no
# nmcli c mod bridge-br0 ipv4.method manual ipv4.addresses "192.168.1.11/24" ipv4.gateway "192.168.1.1"
# nmcli c mod bridge-br0 ipv4.dns 8.8.8.8 ipv4.dns-search redhat.com
# nmcli c add type bridge-slave ifname ens6 con-name bridge-slave-ens6 master bridge-br0
19
RHEL7/CentOS7 NetworkManager徹底入門
仮想ブリッジの作成手順 (2)
– それぞれの「接続」をdown/upして、設定変更を反映します。
– 設定結果を確認します。
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.525400eb919c no ens6
# ip addr show br0
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 52:54:00:eb:91:9c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/24 brd 192.168.1.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:feeb:919c/64 scope link
valid_lft forever preferred_lft forever
# nmcli c down bridge-slave-ens6
# nmcli c down bridge-br0
# nmcli c up bridge-br0
# nmcli c up bridge-slave-ens6
eth2
ens7
br0 192.168.1.11
ens6
20
RHEL7/CentOS7 NetworkManager徹底入門
VLANデバイスの作成手順 (1)
 次は、物理NIC「ens7」にVLAN IDが10と11のVLANデバイスを接続する例です。
– VLANデバイス「vlan10」と、それを物理デバイス「ens7」にVLAN ID「10」で接続す
るための接続「vlan-vlan10」を作成します。
• 「con-name」オプションを省略すると、接続名は「bridge-<デバイス名>」になります。
– VLANデバイス「vlan10」にIPアドレスの設定を追加します。
– 同様にVLANデバイス「vlan11」を作成して、IPアドレスを設定します。
– それぞれの「接続」をdown/upして、設定変更を反映します。
# nmcli c add type vlan ifname vlan10 con-name vlan-vlan10 dev ens7 id 10
# nmcli c mod vlan-vlan10 ipv4.method manual ipv4.addresses "192.168.10.101/24"
eth2
ens6
vlan10 192.168.10.101
192.168.11.101
# nmcli c add type vlan ifname vlan11 con-name vlan-vlan11 dev ens7 id 11
# nmcli c mod vlan-vlan11 ipv4.method manual ipv4.addresses "192.168.11.101/24"
vlan11
ens7
# nmcli c down vlan-vlan10; nmcli c up vlan-vlan10
# nmcli c down vlan-vlan11; nmcli c up vlan-vlan11
21
RHEL7/CentOS7 NetworkManager徹底入門
VLANデバイスの作成手順 (2)
– 設定結果を確認します。
# cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
vlan10 | 10 | ens7
vlan11 | 11 | ens7
# ip addr show vlan10
17: vlan10@ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 52:54:00:aa:a4:66 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.101/24 brd 192.168.10.255 scope global vlan10
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:feaa:a466/64 scope link
valid_lft forever preferred_lft forever
# ip addr show vlan11
18: vlan11@ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 52:54:00:aa:a4:66 brd ff:ff:ff:ff:ff:ff
inet 192.168.11.101/24 brd 192.168.11.255 scope global vlan11
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:feaa:a466/64 scope link
valid_lft forever preferred_lft forever
Teamデバイスの作成
23
RHEL7/CentOS7 NetworkManager徹底入門
Teamデバイスとは?
 RHEL7では、物理NICの冗長化について、Bondingドライバーに加えて、Teamド
ライバーが使用できます。
– BondingドライバーとTeamドライバーの比較は次の資料が参考になります。
• If You Like Bonding, You Will Love Teaming
http://rhelblog.redhat.com/2014/06/23/team-driver/
 Teamドライバーの機能は、基本的にはBondingドライバーと同じですが、実装上
で次のような違いがあります。
– Bondingドライバーはすべての機能がカーネルモジュールとして実装されており、機能拡
張が困難。また、設定変更にはモジュールの再読み込みが必要。
– Teamドライバーは、カーネルモジュールとユーザーランドで機能を分離したデザインに
なっており、機能拡張や管理ツールの実装が容易。
 ここでは、nmcliコマンドを用いて、TeamドライバーによるNIC冗長化を設定する
手順を紹介します。
24
RHEL7/CentOS7 NetworkManager徹底入門
Teamデバイスの作成 (1)
 次は、物理デバイス「ens6」「ens7」をまとめたTeamデバイス「team0」を作成
する手順です。
– Teamデバイス「team0」とその接続「team-team0」を作成した上で、IPアドレスを設
定しておきます。
• 「con-name」オプションを省略すると、接続名は「team-<デバイス名>」になります。
– 物理NIC「ens6」と「ens7」をTeamデバイスのスレーブとして追加する接続「team-
slave-ens6」と「team-slave-ens7」を作成します。
• 「con-name」オプションを省略すると、接続名は「team-slave-<デバイス名>」になります。
– Teamingの構成は、デフォルトではラウンドロビン方式になります。デフォルトの構成で
かまわない場合は、それぞれの接続をdown/upしてTeamデバイスを有効化します。
# nmcli c add type team-slave ifname ens6 con-name team-slave-ens6 master team-team0
# nmcli c add type team-slave ifname ens7 con-name team-slave-ens7 master team-team0
# nmcli c add type team ifname team0 con-name team-team0
# nmcli c mod team-team0 ipv4.method manual ipv4.addresses "192.168.1.101/24"
# nmcli c down team-team0
# nmcli c down team-slave-ens6
# nmcli c down team-slave-ens7
# nmcli c up team-slave-ens6
# nmcli c up team-slave-ens7
# nmcli c up team-team0
25
RHEL7/CentOS7 NetworkManager徹底入門
Teamデバイスの作成 (2)
 Teamデバイスの稼動状態を確認します。
– 接続の状態は次のようになります。
– Teamデバイスの稼動状態は、「teamdctl」コマンドで確認します。
# teamdctl team0 state
setup:
runner: roundrobin
ports:
ens7
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
ens6
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
# nmcli c
名前 UUID タイプ デバイス
team-slave-ens7 0114a0a7-e3f0-43aa-9ba8-b716ca9d55f9 802-3-ethernet ens7
eth2 bc302e8f-f5f3-478d-bf87-e77d3288dac7 802-3-ethernet eth2
team-slave-ens6 00d62380-6f5a-4d53-887d-3509d65ec400 802-3-ethernet ens6
Team-team0 869751cf-d123-4fa1-88a6-ce7d86474e5a team team0
26
RHEL7/CentOS7 NetworkManager徹底入門
Teamデバイスの構成変更 (1)
 Teamデバイスの構成は、JSONファイルに記載して、それを読み込みます。
– 下記のディレクトリーにサンプルの設定ファイルが用意されています。
– ロードバランス方式の他に、NICの死活監視方法(ethtoolによるリンク監視、ARPリク
エストの応答確認など)が設定可能です。
# ls /usr/share/doc/teamd-1.9/example_configs/
activebackup_arp_ping_1.conf activebackup_multi_lw_1.conf loadbalance_2.conf
activebackup_arp_ping_2.conf activebackup_nsna_ping_1.conf loadbalance_3.conf
activebackup_ethtool_1.conf broadcast.conf random.conf
activebackup_ethtool_2.conf lacp_1.conf roundrobin.conf
activebackup_ethtool_3.conf loadbalance_1.conf roundrobin_2.conf
27
RHEL7/CentOS7 NetworkManager徹底入門
Teamデバイスの構成変更 (2)
 次は、TeamデバイスをActive-Bakcup(自動切り戻し無し)に設定する例です。
# cat myconfig.conf
{
"device": "team0",
"runner": {"name": "activebackup"},
"link_watch": {"name": "ethtool"},
"ports": {
"ens6": {
"prio": -10,
"sticky": true
},
"ens7": {
"prio": 100
}
}
}
# nmcli c mod team-team0 team.config myconfig.conf
# nmcli c down team-team0
# nmcli c down team-slave-ens6
# nmcli c down team-slave-ens7
# nmcli c up team-slave-ens6
# nmcli c up team-slave-ens7
# nmcli c up team-team0
# teamdctl team01 state
setup:
runner: activebackup
ports:
ens6
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
ens7
link watches:
link summary: up
instance[link_watch_0]:
name: ethtool
link: up
runner:
active port: ens7
自動切り戻し無し
eth2
ens6
ens7
team0
192.168.1.101
Active
Backup
参考資料
29
RHEL7/CentOS7 NetworkManager徹底入門
参考資料
 RHEL7/CentOS7の新規コマンド総まとめ!
– http://www.school.ctc-g.co.jp/columns/nakai/nakai47.html 
 RHEL7/CentOS7を満喫するための情報まとめ
– http://d.hatena.ne.jp/enakai00/20141202/1417492840
 RHEL7/CentOS7のnmcliコマンドでTeamデバイス/Bonding/VLAN/ブリッジを組み合わせる
方法
– http://d.hatena.ne.jp/enakai00/20150118/1421587442
中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
RHEL7/CentOS7でLinux最新技術を
学びましょう!

More Related Content

RHEL7/CentOS7 NetworkManager徹底入門

  • 2. 2 RHEL7/CentOS7 NetworkManager徹底入門 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 好評発売中!
  • 3. 3 RHEL7/CentOS7 NetworkManager徹底入門 Contents  NetworkManagerの概要  nmcliによる設定  仮想ブリッジ/VLANデバイスの作成  Teamデバイスの作成  参考資料
  • 5. 5 RHEL7/CentOS7 NetworkManager徹底入門 NetworkManagerとは?  NetworkManagerは、RHEL7のネットワークを動的に設定するサービスです。 – ネットワークデバイスが動的に追加・削除される環境に対応することができます。  RHEL7ではデフォルトのネットワーク管理機能となっており、動的変更が不要な場合で も利用が必須です。  設定内容を表す「接続(Connection)」とネットワークデバイスを表す「(デバ イス)Device」を別々に定義して、それらを紐付けるという処理を行います。 – 新しい「デバイス(Device)」が追加された際に、既存の「接続(Connection)」に自 動で紐付けることで動的変更に対応します。管理者が明示的に紐付けを指定することも できます。 NAME="Ethernet connection 1" UUID="bc302e8f-f5f3-478d-bf87-e77d3288dac7" TYPE="Ethernet" BOOTPROTO="static" IPADDR0="192.168.122.10" ... NAME="Wi-Fi connection 1" UUID=6fda7095-1685-468f-a138-608f53eb6048 TYPE=Wireless BOOTPROTO=dhcp ESSID="mynet" ... eth0 接続(Connection) 適用 デバイス (Device)
  • 6. 6 RHEL7/CentOS7 NetworkManager徹底入門 NICのネーミングルールについて  RHEL7では、NICのネーミングルールに「Predictable Network Interface Names」が採用されています。 – 典型的には、「ens6」「enp0s25」「wlp2s0」などのデバイス名になります(*) 。  デバイスの物理ロケーションに応じて、固定的なデバイス名を割り当てます。 – 後半の「s6」の部分は、BIOSから取得した論理番号で、PCIスロット番号などに基いて、 BIOSが独自に提供します。BIOSが論理番号を提供しない場合は、カーネルが認識したPCI バス番号とスロット番号に基いて、「p<Bus>s<Slot>」のルールになります。 – ロケーション情報を取得できないデバイスは、古典的な「ethX」になります。Linux KVMのvirtio NICなどが該当します。 ens6 en:イーサネット wl:ワイヤレス o:オンボード s:PCI Express デバイス番号(PCIスロット番号などに対応) (*) DELL製のサーバーでは、また異なるネーミングルール(biosdevname)になります。  (参考)「RHEL7のNICのネーミングルール」http://d.hatena.ne.jp/enakai00/20140728/1406504163
  • 7. 7 RHEL7/CentOS7 NetworkManager徹底入門 net-toolsとiproute2について  RHEL7を最小構成でインストールした環境では、「ifconfig, route, netstat, arp」などのネットワーク関連コマンドが入っていません。 – これらのコマンドは、「net-tools」パッケージを追加することで利用可能になります。  「net-tools」パッケージを導入しない環境では、「iproute2」パッケージに含ま れる「ip, ss」などのコマンドを使用してください。 – 今後は、iproute2パッケージの方が標準になる予定です。 # yum -y install net-tools net-tools iproute2 ifconfig ip addr, ip link route ip route netstat ss netstat -i ip -s link arp ip neighbor 主なコマンドの対応表 (参考)「RHEL7/CentOS7でipコマンドをマスター」http://d.hatena.ne.jp/enakai00/20140712/1405139841
  • 8. 8 RHEL7/CentOS7 NetworkManager徹底入門 デフォルトでの環境構成例  RHEL7インストーラーのGUIでネットワークを設定すると次のような構成になり ます。 – デバイスと同じ名前の「接続」が定義されて、該当デバイスに紐付けられます。「接 続」の名前は、一般には、デバイス名と無関係なので注意してください。 # nmcli d デバイス タイプ 状態 接続 eth2 ethernet 接続済み eth2 ens6 ethernet 切断済み -- ens7 ethernet 切断済み -- lo loopback 管理無し -- # nmcli c 名前 UUID タイプ デバイス eth2 bc302e8f-f5f3-478d-bf87-e77d3288dac7 802-3-ethernet eth2 「デバイス」の確認(「d」は「device」の略) 「接続」の確認(「c」は「connection」の略) 「デバイス」が紐付けられた「接続」 eth2 ens6 ens7 virtio NIC rtl8139 Linux KVMの仮想マシンに 「Realtek」と「virtio」の 仮想NICをアサインした場合の例
  • 9. 9 RHEL7/CentOS7 NetworkManager徹底入門 設定内容の確認方法 (1)  NetworkManagerで定義した「接続」の設定内容は、下記の設定ファイルに保存 されます。 – /etc/sysconfig/network-scripts/ifcfg-<接続名> • インストーラーが作成する設定ファイルでは「” ”」でクォートされていますが、これは必須では ありません。 – 設定ファイルを編集した場合は、次のコマンドで変更を反映します。 • 実際の設定変更は、設定ファイルの編集ではなく、後述のnmcliコマンドの使用が推奨です。 # nmcli c reload <接続名> # nmcli c down <接続名>; nmcli c up <接続名> # cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" ...(中略)... NAME="eth2" UUID="bc302e8f-f5f3-478d-bf87-e77d3288dac7" ONBOOT="yes" HWADDR="52:54:00:84:56:D9" IPADDR0="192.168.122.102" PREFIX0="24" GATEWAY0="192.168.122.1" DNS1="192.168.122.1" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes"
  • 10. 10 RHEL7/CentOS7 NetworkManager徹底入門 設定内容の確認方法 (2)  特定デバイスの設定内容は、次のコマンドで確認します。 – これは、該当デバイスに紐付けられた「接続」を通して設定された内容になります。  「接続」の設定内容を直接に確認する際は、次のコマンドを使用します。 # nmcli c show eth2 connection.id: eth2 connection.uuid: bc302e8f-f5f3-478d-bf87-e77d3288dac7 ...(中略)... ipv4.method: manual ipv4.dns: 192.168.122.1 ipv4.dns-search: ipv4.addresses: { ip = 192.168.122.102/24, gw = 192.168.122.1 } ...(以下省略)... # nmcli d show eth2 GENERAL.デバイス: eth2 GENERAL.タイプ: ethernet GENERAL.HWADDR: 52:54:00:84:56:D9 GENERAL.MTU: 1500 GENERAL.状態: 100 (接続済み) GENERAL.接続: eth0 GENERAL.CON パス: /org/freedesktop/NetworkManager/ActiveConnection/1 WIRED-PROPERTIES.キャリア: オン IP4.アドレス[1]: ip = 192.168.122.102/24, gw = 192.168.122.1 IP4.DNS[1]: 192.168.122.1 IP6.アドレス[1]: ip = fe80::5054:ff:fe84:56d9/64, gw = :: 「デバイス名」 「接続名」
  • 11. 11 RHEL7/CentOS7 NetworkManager徹底入門 (参考)nmtuiコマンド  nmtuiコマンドを使用すると、テキストベースのUIで対話的に設定変更が可能で す。 – テスト環境などで、簡易的に設定変更を行う際は便利ですが、設定手順をコマンドとし て記録/再現することができませんので、本番環境では使用しない方がよいでしょう。
  • 13. 13 RHEL7/CentOS7 NetworkManager徹底入門 新規接続の追加  次は、デバイス「ens6」に紐付けられた接続「ens6-con」を作成して、IPアドレ スの設定を行う例です。 – デバイス名と接続名が独立していることに注意してください。 – 「nmcli c mod」では、次のように複数の項目をまとめて設定可能です。 • nmcli c mod <接続名> <設定項目> <設定内容> <設定項目> <設定内容> ... – 設定可能な項目は、現在の設定内容をすべて出力すると分かります。 # nmcli c add type eth ifname ens6 con-name ens6-con # nmcli c mod ens6-con ipv4.method manual ipv4.addresses "192.168.1.11/24" ipv4.gateway "192.168.1.1" # nmcli c down ens6-con; nmcli c up ens6-con 「デバイス名」 「接続名」 「設定変更を反映」 # nmcli c show ens6-con connection.id: ens6-con connection.uuid: d9388c4e-31af-4ba9-bfda-c58e74316b14 connection.interface-name: ens6 ...(中略)... ipv4.method: manual ipv4.dns: ipv4.dns-search: ipv4.addresses: { ip = 192.168.100.11/24, gw = 0.0.0.0 } ipv4.routes: ...(以下省略)... 「IP/Mask」 「Gateway」
  • 14. 14 RHEL7/CentOS7 NetworkManager徹底入門 既存接続の変更  既存の接続を設定変更する際は、先に説明した「nmcli c mod」を使用します。 – 次は、IPアドレスの設定をDHCPに変更する例です。 – 「nmcli c edit」は対話的に変更するオプションですが、次の「describe」コマンドで設 定項目の説明が表示できます。 # nmcli c mod ens6-con ipv4.method auto ipv4.addresses "" ipv4.gateway "" # nmcli c down ens6-con; nmcli c up ens6-con # nmcli c edit ens6-con ... nmcli> describe ipv4.addresses === [addresses] === [NM プロパティの詳細] Array of IPv4 address structures. Each IPv4 address structure is composed of 3 32-bit values; the first being the IPv4 address (network byte order), the second the prefix (1 - 32), and last the IPv4 gateway (network byte order). The gateway may be left as 0 if no gateway exists for that subnet. For the 'auto' method, given IP addresses are appended to those returned by automatic configuration. Addresses cannot be used with the 'shared', 'link-local', or 'disabled' methods as addressing is either automatic or disabled with these methods. [nmcli 固有の詳細] 次のような形式で IPv4 アドレスの一覧を入力してください。 ip[/prefix] [gateway], ip[/prefix] [gateway],... プレフィックスがないものはプレフィックス 32 とみなします。 例: 192.168.1.5/24 192.168.1.1, 10.0.0.11/24 nmcli> quit
  • 15. 15 RHEL7/CentOS7 NetworkManager徹底入門 接続の削除  既存の接続を削除する際は、「nmcli c delete」を使用します。 – 次は、先に作成した「ens6-con」を削除する例です。  nmcliの使い方は、次のオンラインドキュメントも参考になります。 – # man nmcli • nmcliコマンドの全般的な説明 – # man nmcli-examples • Bonding, Teaming, Bridgeなどの構成例が記載されています # nmcli c 名前 UUID タイプ デバイス eth2 bc302e8f-f5f3-478d-bf87-e77d3288dac7 802-3-ethernet eth2 ens6-con d9388c4e-31af-4ba9-bfda-c58e74316b14 802-3-ethernet ens6 # nmcli c delete ens6-con # nmcli c 名前 UUID タイプ デバイス eth2 bc302e8f-f5f3-478d-bf87-e77d3288dac7 802-3-ethernet eth2
  • 16. 16 RHEL7/CentOS7 NetworkManager徹底入門 ホストネームの設定について  nmcliコマンドでホストネームを設定することもできます。 – 次はホストネームを「rhel7」に変更する例です。  RHEL7では、ホストネームの管理はsystemdが行っており、本来は、hostnamectl コマンドで設定します。 – ncmliは、hostnamectlコマンドに相当するAPIでsystemdを呼び出して、ホストネームを 変更しています。 – 次はhostnamectlコマンドでホストネームを変更する例です。 # hostnamectl set-hostname rhel7 # hostnamectl Static hostname: rhel7 Icon name: computer Chassis: n/a Machine ID: d16c14e0d938a994f66447949c8f070e Boot ID: 84e3caad343e436eb0ad6663e64f92ab Virtualization: kvm Operating System: Employee SKU CPE OS Name: cpe:/o:redhat:enterprise_linux:7.0:GA:server Kernel: Linux 3.10.0-123.13.2.el7.x86_64 Architecture: x86_64 # nmcli g hostname rhel7 # nmcli g hostname rhel7
  • 18. 18 RHEL7/CentOS7 NetworkManager徹底入門 仮想ブリッジの作成手順 (1)  次は、仮想ブリッジ「br0」を作成して、物理NIC「ens6」を接続する手順です。 – 確認用にbrctlコマンドを提供する「bridge-utils」を導入しておきます。 – 仮想ブリッジ「br0」とその接続「bridge-br0」を作成します。 • 「con-name」オプションを省略すると、接続名は「bridge-<デバイス名>」になります。 – 仮想ブリッジにIPアドレスなどの設定を追加します。 – 仮想ブリッジに物理NIC「ens6」を接続するための接続「bridge-slave-ens6」を追加し ます。 • 「con-name」オプションを省略すると、接続名は「bridge-slave-<デバイス名>」になります。 # nmcli c add type bridge ifname br0 con-name bridge-br0 # yum -y install bridge-utils # nmcli c mod bridge-br0 bridge.stp no # nmcli c mod bridge-br0 ipv4.method manual ipv4.addresses "192.168.1.11/24" ipv4.gateway "192.168.1.1" # nmcli c mod bridge-br0 ipv4.dns 8.8.8.8 ipv4.dns-search redhat.com # nmcli c add type bridge-slave ifname ens6 con-name bridge-slave-ens6 master bridge-br0
  • 19. 19 RHEL7/CentOS7 NetworkManager徹底入門 仮想ブリッジの作成手順 (2) – それぞれの「接続」をdown/upして、設定変更を反映します。 – 設定結果を確認します。 # brctl show bridge name bridge id STP enabled interfaces br0 8000.525400eb919c no ens6 # ip addr show br0 6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 52:54:00:eb:91:9c brd ff:ff:ff:ff:ff:ff inet 192.168.1.11/24 brd 192.168.1.255 scope global br0 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:feeb:919c/64 scope link valid_lft forever preferred_lft forever # nmcli c down bridge-slave-ens6 # nmcli c down bridge-br0 # nmcli c up bridge-br0 # nmcli c up bridge-slave-ens6 eth2 ens7 br0 192.168.1.11 ens6
  • 20. 20 RHEL7/CentOS7 NetworkManager徹底入門 VLANデバイスの作成手順 (1)  次は、物理NIC「ens7」にVLAN IDが10と11のVLANデバイスを接続する例です。 – VLANデバイス「vlan10」と、それを物理デバイス「ens7」にVLAN ID「10」で接続す るための接続「vlan-vlan10」を作成します。 • 「con-name」オプションを省略すると、接続名は「bridge-<デバイス名>」になります。 – VLANデバイス「vlan10」にIPアドレスの設定を追加します。 – 同様にVLANデバイス「vlan11」を作成して、IPアドレスを設定します。 – それぞれの「接続」をdown/upして、設定変更を反映します。 # nmcli c add type vlan ifname vlan10 con-name vlan-vlan10 dev ens7 id 10 # nmcli c mod vlan-vlan10 ipv4.method manual ipv4.addresses "192.168.10.101/24" eth2 ens6 vlan10 192.168.10.101 192.168.11.101 # nmcli c add type vlan ifname vlan11 con-name vlan-vlan11 dev ens7 id 11 # nmcli c mod vlan-vlan11 ipv4.method manual ipv4.addresses "192.168.11.101/24" vlan11 ens7 # nmcli c down vlan-vlan10; nmcli c up vlan-vlan10 # nmcli c down vlan-vlan11; nmcli c up vlan-vlan11
  • 21. 21 RHEL7/CentOS7 NetworkManager徹底入門 VLANデバイスの作成手順 (2) – 設定結果を確認します。 # cat /proc/net/vlan/config VLAN Dev name | VLAN ID Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD vlan10 | 10 | ens7 vlan11 | 11 | ens7 # ip addr show vlan10 17: vlan10@ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 52:54:00:aa:a4:66 brd ff:ff:ff:ff:ff:ff inet 192.168.10.101/24 brd 192.168.10.255 scope global vlan10 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:feaa:a466/64 scope link valid_lft forever preferred_lft forever # ip addr show vlan11 18: vlan11@ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 52:54:00:aa:a4:66 brd ff:ff:ff:ff:ff:ff inet 192.168.11.101/24 brd 192.168.11.255 scope global vlan11 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:feaa:a466/64 scope link valid_lft forever preferred_lft forever
  • 23. 23 RHEL7/CentOS7 NetworkManager徹底入門 Teamデバイスとは?  RHEL7では、物理NICの冗長化について、Bondingドライバーに加えて、Teamド ライバーが使用できます。 – BondingドライバーとTeamドライバーの比較は次の資料が参考になります。 • If You Like Bonding, You Will Love Teaming http://rhelblog.redhat.com/2014/06/23/team-driver/  Teamドライバーの機能は、基本的にはBondingドライバーと同じですが、実装上 で次のような違いがあります。 – Bondingドライバーはすべての機能がカーネルモジュールとして実装されており、機能拡 張が困難。また、設定変更にはモジュールの再読み込みが必要。 – Teamドライバーは、カーネルモジュールとユーザーランドで機能を分離したデザインに なっており、機能拡張や管理ツールの実装が容易。  ここでは、nmcliコマンドを用いて、TeamドライバーによるNIC冗長化を設定する 手順を紹介します。
  • 24. 24 RHEL7/CentOS7 NetworkManager徹底入門 Teamデバイスの作成 (1)  次は、物理デバイス「ens6」「ens7」をまとめたTeamデバイス「team0」を作成 する手順です。 – Teamデバイス「team0」とその接続「team-team0」を作成した上で、IPアドレスを設 定しておきます。 • 「con-name」オプションを省略すると、接続名は「team-<デバイス名>」になります。 – 物理NIC「ens6」と「ens7」をTeamデバイスのスレーブとして追加する接続「team- slave-ens6」と「team-slave-ens7」を作成します。 • 「con-name」オプションを省略すると、接続名は「team-slave-<デバイス名>」になります。 – Teamingの構成は、デフォルトではラウンドロビン方式になります。デフォルトの構成で かまわない場合は、それぞれの接続をdown/upしてTeamデバイスを有効化します。 # nmcli c add type team-slave ifname ens6 con-name team-slave-ens6 master team-team0 # nmcli c add type team-slave ifname ens7 con-name team-slave-ens7 master team-team0 # nmcli c add type team ifname team0 con-name team-team0 # nmcli c mod team-team0 ipv4.method manual ipv4.addresses "192.168.1.101/24" # nmcli c down team-team0 # nmcli c down team-slave-ens6 # nmcli c down team-slave-ens7 # nmcli c up team-slave-ens6 # nmcli c up team-slave-ens7 # nmcli c up team-team0
  • 25. 25 RHEL7/CentOS7 NetworkManager徹底入門 Teamデバイスの作成 (2)  Teamデバイスの稼動状態を確認します。 – 接続の状態は次のようになります。 – Teamデバイスの稼動状態は、「teamdctl」コマンドで確認します。 # teamdctl team0 state setup: runner: roundrobin ports: ens7 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up ens6 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up # nmcli c 名前 UUID タイプ デバイス team-slave-ens7 0114a0a7-e3f0-43aa-9ba8-b716ca9d55f9 802-3-ethernet ens7 eth2 bc302e8f-f5f3-478d-bf87-e77d3288dac7 802-3-ethernet eth2 team-slave-ens6 00d62380-6f5a-4d53-887d-3509d65ec400 802-3-ethernet ens6 Team-team0 869751cf-d123-4fa1-88a6-ce7d86474e5a team team0
  • 26. 26 RHEL7/CentOS7 NetworkManager徹底入門 Teamデバイスの構成変更 (1)  Teamデバイスの構成は、JSONファイルに記載して、それを読み込みます。 – 下記のディレクトリーにサンプルの設定ファイルが用意されています。 – ロードバランス方式の他に、NICの死活監視方法(ethtoolによるリンク監視、ARPリク エストの応答確認など)が設定可能です。 # ls /usr/share/doc/teamd-1.9/example_configs/ activebackup_arp_ping_1.conf activebackup_multi_lw_1.conf loadbalance_2.conf activebackup_arp_ping_2.conf activebackup_nsna_ping_1.conf loadbalance_3.conf activebackup_ethtool_1.conf broadcast.conf random.conf activebackup_ethtool_2.conf lacp_1.conf roundrobin.conf activebackup_ethtool_3.conf loadbalance_1.conf roundrobin_2.conf
  • 27. 27 RHEL7/CentOS7 NetworkManager徹底入門 Teamデバイスの構成変更 (2)  次は、TeamデバイスをActive-Bakcup(自動切り戻し無し)に設定する例です。 # cat myconfig.conf { "device": "team0", "runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}, "ports": { "ens6": { "prio": -10, "sticky": true }, "ens7": { "prio": 100 } } } # nmcli c mod team-team0 team.config myconfig.conf # nmcli c down team-team0 # nmcli c down team-slave-ens6 # nmcli c down team-slave-ens7 # nmcli c up team-slave-ens6 # nmcli c up team-slave-ens7 # nmcli c up team-team0 # teamdctl team01 state setup: runner: activebackup ports: ens6 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up ens7 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up runner: active port: ens7 自動切り戻し無し eth2 ens6 ens7 team0 192.168.1.101 Active Backup
  • 29. 29 RHEL7/CentOS7 NetworkManager徹底入門 参考資料  RHEL7/CentOS7の新規コマンド総まとめ! – http://www.school.ctc-g.co.jp/columns/nakai/nakai47.html   RHEL7/CentOS7を満喫するための情報まとめ – http://d.hatena.ne.jp/enakai00/20141202/1417492840  RHEL7/CentOS7のnmcliコマンドでTeamデバイス/Bonding/VLAN/ブリッジを組み合わせる 方法 – http://d.hatena.ne.jp/enakai00/20150118/1421587442