CentOS6とCentOS7によるローカル間接続とnmcliコマンドについてまとめ


CentOS6とCentOS7によるローカル間接続とnmcliコマンドについてまとめ

仕様環境

PCのOS:windows10
vmwareの仮想空間にCentOS7、CentOS6をそれぞれインストールし、Teratermでサーバにアクセスし作業をしました。

はじめに

前提として、サーバの構築時の初期設定はある程度出来ているものとします。
CentOS6ではipアドレス10.0.0.2、CentOS7ではipアドレス10.0.0.1の接続を作り、ローカル環境でお互いに接続できるよう設定していきます。
わかりやすいようにhostnameをCentOS6ではcentos6、CentOS7ではcentos7に設定しておきます。
CentOS6と7ではほぼ同じ内容の設定をするのですが、CentOS6と7では仕様が大幅に違うためまるで別の作業をしているかのようでした。理解できていないまま作業をすすめたので、設定する上で何回も行き詰まりました。出来なかったことも削らず、新たに理解したことも説明込みでまとめてあり、めちゃめちゃ長くなりますので、興味のある方だけお付き合いください。

初期設定共通部分

まず共通部分を画像で説明します。VMwareの仮想マシンの名前を右クリックし設定をクリックすると手前のウィンドウが開きます。
追加→ハードウェアの種類からネットワークアダプタを選択、次へ→完了
の順に設定をします。
画像のようにネットワークアダプタ2が作成されたら、右側のネットワーク接続の部分をカスタムにチェックを入れてVMnet10にします。10じゃなくても同じ数字ならどれでもOKです。

CentOS6側の設定

NICの追加と有効化

/etc/sysconfig/network-scripts/にifcfg-eth1を追加、編集します。
CentOS6では/etc/sysconfig/network-scripts/にあるifcfg-○○○というファイルを直接編集して、設定する必要があります。

lsコマンドでディレクトリの中身を見てみると、ifcfg-eth1は既にあったので、編集するだけでした。どのような形式で書かれているか知るためにcatコマンドでifcfg-eth0の中身を確認してみました。

[hikaru@localhost ~]$ cd /etc/sysconfig/network-scripts/ #ディレクトリに移動
[hikaru@localhost network-scripts]$ ls #ファイルあるか確認、ifcfg-eth1ありました!
ifcfg-eth0   ifdown-ippp    ifdown-tunnel  ifup-ipv6    ifup-sit
ifcfg-eth1   ifdown-ipv6    ifup           ifup-isdn    ifup-tunnel
ifcfg-lo     ifdown-isdn    ifup-aliases   ifup-plip    ifup-wireless
ifdown       ifdown-post    ifup-bnep      ifup-plusb   init.ipv6-global
ifdown-bnep  ifdown-ppp     ifup-eth       ifup-post    net.hotplug
ifdown-eth   ifdown-routes  ifup-ib        ifup-ppp     network-functions
ifdown-ib    ifdown-sit     ifup-ippp      ifup-routes  network-functions-ipv6
[hikaru@localhost network-scripts]$ cat ifcfg-eth0 #ifcfg-eth0の中身を確認
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="00:0C:29:CA:3B:D6"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="380f454b-2272-43dd-a2d2-d99d7520f693"

中身を確認したところ、参考サイト
https://i1.fusioncom.jp/ja/technical/doc/help/instance/nic/linux
での編集する内容とかなり違う項目があり、コピーして貼り付けて大丈夫なのかわかりませんでしたが、参考サイトからファイルの中身をコピーし、IPADDR=のところだけviコマンドで10.0.0.2に編集しました。

[hikaru@localhost network-scripts]$ vi ifcfg-eth1

DEVICE="eth1"
IPADDR="10.0.0.2"
NETMASK="255.255.255.0"
NETWORK="192.168.252.0"
BROADCAST="192.168.11.255"
BOOTPROTO="none"
ONBOOT="yes"

設定を反映させるためにはnetworkの再起動が必要なので、再起動します。

[root@localhost ~]# /etc/init.d/network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down interface eth1:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:
Determining IP information for eth0... done.
                                                           [  OK  ]
Bringing up interface eth1:  Determining if ip address 10.0.0.2 is already in use for device eth1...
                                                           [  OK  ]

設定がちゃんと反映されているか確認します。

[hikaru@localhost ~]$ su -
Password:
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:CA:3B:D6
          inet addr:192.168.252.129  Bcast:192.168.252.255  Mask:255.255.255.0
        ・・・中略・・・
          RX bytes:14891 (14.5 KiB)  TX bytes:13426 (13.1 KiB)
eth1      Link encap:Ethernet  HWaddr 00:0C:29:CA:3B:E0
          inet addr:10.0.0.2  Bcast:192.168.11.255  Mask:255.255.255.0
       ・・・中略・・・  #↑ipaddressの設定は無事出来ていたようです
          RX bytes:0 (0.0 b)  TX bytes:828 (828.0 b)
lo        Link encap:Local Loopback
        ・・・中略・・・
          RX bytes:0 (0.0 b)  TX bytes:0 (0

pingコマンドを用いて接続が出来ているか確認します。
ずっと続くのでCtrl+Cで抜けましょう。

[root@localhost ~]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.023 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.043 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.045 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.047 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=0.046 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=0.046 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=0.045 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=0.046 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=0.046 ms
^C
--- 10.0.0.2 ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8025ms
rtt min/avg/max/mdev = 0.023/0.043/0.047/0.007 ms

接続の確認がとれました。CentOS6側の設定は終了です。

このあとからはCentOS7の設定も終わらせたあとの作業になります。

pingでCentOS7で設定したIPアドレス10.0.0.1への接続を確認します。

[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
From 10.0.0.2 icmp_seq=2 Destination Host Unreachable
From 10.0.0.2 icmp_seq=3 Destination Host Unreachable
From 10.0.0.2 icmp_seq=4 Destination Host Unreachable
From 10.0.0.2 icmp_seq=6 Destination Host Unreachable
From 10.0.0.2 icmp_seq=7 Destination Host Unreachable
From 10.0.0.2 icmp_seq=8 Destination Host Unreachable
^C
--- 10.0.0.1 ping statistics ---
10 packets transmitted, 0 received, +6 errors, 100% packet loss, time 9153ms
pipe 3

接続は出来ていませんでした。
原因はどうやら、iptablesの切り忘れだったようなので、iptablesを停止します。

[root@localhost ~]# /etc/rc.d/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]

もう一度pingコマンド実行します。

[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.211 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.342 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.343 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.349 ms
64 bytes from 10.0.0.1: icmp_seq=5 ttl=64 time=0.396 ms
64 bytes from 10.0.0.1: icmp_seq=6 ttl=64 time=0.365 ms
^C
--- 10.0.0.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5202ms
rtt min/avg/max/mdev = 0.211/0.334/0.396/0.060 ms

接続が無事確認できました。

CentOS6側から7のサーバにSSH接続をします。

[root@localhost ~]# ssh 10.0.0.1
The authenticity of host '10.0.0.1 (10.0.0.1)' can't be established.
RSA key fingerprint is 23:8f:a7:c1:51:42:d8:34:a0:5c:a0:7b:55:cf:98:9d.
Are you sure you want to continue connecting (yes/no)? yes #yesと答えます
Warning: Permanently added '10.0.0.1' (RSA) to the list of known hosts.
[email protected]'s password:    #CentOS7側のパスワードを入力してください。
Last login: Mon Nov  7 18:15:41 2016
#↓↓7のホスト名に変わりローカル間接続が出来ました
[root@centos7 ~]# exit #exitで接続を終了できます
logout
Connection to 10.0.0.1 closed.
[root@localhost ~]#

CentOS6とCentOS7におけるネットワーク管理の変更点

CentOS7におけるネットワーク管理は、NetworkManagerによって行います。CentOS6系では、設定ファイルを直接編集する方法が一般的でしたが、CentOS7ではNetworkManagerを使った管理が推奨されています。CentOS6のNetworkManagerは、全てのネットワーク機能を制御出来なかったため、
/etc/sysconfig/network-scripts/ifcfg-ethxファイルなどを直接編集し、
サービスの起動や停止を行うことが一般的でした。CentOSではNetworkManagerが大幅に強化され、設定ファイルを直接編集することなく、コマンドラインやGUIツールで設定する方法になりました。
またNICの命名規則についても大きく変更があります。例えばifcfg-ethxなどといったものは命名規則に沿っていないので、ifcfg-eno16777736等のようになります。
en...イーサネット
o...オンボード
こちらは命名規則のほんの一例に過ぎません。文字の組み合わせに意味が出来たと覚えておいて、見慣れない物が出てきたら随時調べれば良いでしょう。

nmcli(NetworkMnagerCommandLineInterface)コマンドについて

CentOS7で使うネットワークの設定を行う基本コマンドです。
conecion:接続の設定
device:デバイス管理
general:ホスト名設定、ロギング、権限操作、状態の表示
networking:コネクティビティのチェック、有効化、無効化の管理
radio:ワイヤレスネットワークの設定の有効化、無効化の管理

これらのコマンドのオプションは長いものもあるが、一文字で省略できたりとなかなか使い勝手がよかったです。

コマンド使用例

⚠注・コマンド使用例用にコピーを後からしたために、下の使用例では設定は終わっています。
[hikaru@localhost ~]$ nmcli connection
名前 UUID タイプ デバイス
virbr0 5b067913-070e-43cd-8d88-c3604926ebcc bridge virbr0
プロファイル 1 fdf85fb7-3cfc-403c-985e-5709a9324b76 802-3-ethernet eno16777736
eno33554976 f750ca6e-c786-4dcc-8250-2aa0a410a1d7 802-3-ethernet eno33554976
virbr0-nic 32116312-8513-4009-93e5-320e064fc902 802-3-ethernet virbr0-nic
[hikaru@localhost ~]$ nmcli device
デバイス タイプ 状態 接続
virbr0 bridge 接続済み virbr0
eno16777736 ethernet 接続済み プロファイル 1
eno33554976 ethernet 接続済み eno33554976
virbr0-nic ethernet 接続済み virbr0-nic
lo loopback 管理無し --
[hikaru@localhost ~]$ nmcli device show eno33554976 #showだけだと、全接続確認できる
GENERAL.デバイス: eno33554976
GENERAL.タイプ: ethernet
GENERAL.ハードウェアアドレス: 00:0C:29:8A:5E:48
GENERAL.MTU: 1500
GENERAL.状態: 100 (接続済み)
GENERAL.接続: eno33554976
GENERAL.CON パス: /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.キャリア: オン
IP4.アドレス[1]: 10.0.0.1/24 
IP4.ゲートウェイ:
IP6.アドレス[1]: fe80::20c:29ff:fe8a:5e48/64
IP6.ゲートウェイ:

実は直接編集することでの設定もCentOS7もまだ出来ますがサポートがいつ終了してしまうかわからないのであくまで緊急時の回避手段となりそうです。オプション等覚えることは多いですが、一度覚えてコマンドでの設定に慣れるとこちらの方が速く作業が出来るので、オススメです。しかし何らかの理由で、コマンドが使えない場合は、直接編集で切り抜けましょう。

CentOS7側の設定

接続の追加、削除

接続の削除をnmcliコマンドで行います。

[root@localhost ~]# nmcli connection delete eno33554976
Connection 'eno33554976' (f750ca6e-c786-4dcc-8250-2aa0a410a1d7) successfully deleted.

接続の追加をnmcliコマンドで行います。

connectionに「add type」を付与します。この例有線イーサネットなのでethernetを付与します。ifnameはインターフェース名con-nameはコネクションからとって接続名です。root権限がないユーザだと失敗します。先に言っておきますがこのあと設定に失敗します。

[hikaru@localhost ~]$ nmcli connection add type ethernet ifname eno1 con-name en
o1
Error: Failed to add 'eno1' connection: Insufficient privileges.
[hikaru@localhost ~]$ su -
パスワード:
最終ログイン: 2016/11/11 (金) 12:31:52 JST日時 pts/0
[root@localhost ~]# nmcli connection add type ethernet ifname eno1 con-name en
o1接続 'en' (c20abf0e-f68b-4e3b-933a-45c4a55f1519) が正常に追加されました。

正常に追加されました。と、表示しておいてなんですが、確認するとeno1などというものはありません

[root@localhost ~]# nmcli device
デバイス     タイプ    状態      接続
virbr0       bridge    接続済み  virbr0
eno16777736  ethernet  接続済み  プロファイル 1
virbr0-nic   ethernet  接続済み  virbr0-nic
eno33554976  ethernet  切断済み  --
lo           loopback  管理無し  --

eno33554976という名前で新たに追加、確認すると、、、

[root@localhost ~]# nmcli connection add type ethernet ifname eno33554976 con-name eno33554976
接続 'eno33554976' (9b9358df-2fa3-4b86-86e9-49d70cd9de8d) が正常に追加されました。
[root@localhost ~]# nmcli device
デバイス     タイプ    状態                       接続
virbr0       bridge    接続済み                   virbr0
eno16777736  ethernet  接続済み                   プロファイル 1
virbr0-nic   ethernet  接続済み                   virbr0-nic
eno33554976  ethernet  接続中(IP 設定を取得中)  eno33554976
lo           loopback  管理無し                   --

成功!ここでも名前の自由度はないようですね。

IPアドレスの設定

[root@localhost ~]# nmcli connection modify eno33554976 ipv4.method manualipv4.addresses "10.0.0.1/24"


[root@localhost ~]# nmcli con mod eno33554976 connection.autoconnect "yes"
[root@localhost ~]# nmcli con mod eno33554976 ipv4.address "10.0.0.1/24"
[root@localhost ~]# nmcli con mod eno33554976 ipv4.method "manual"
[root@localhost ~]# nmcli con show eno33554976
connection.id:                          eno33554976
connection.uuid:                        9b9358df-2fa3-4b86-86e9-49d70cd9de8d
connection.interface-name:              eno33554976
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
--中略--
ipv4.method:                            manual
ipv4.dns:
ipv4.dns-search:
ipv4.addresses:                         10.0.0.1/24
ipv4.gateway:                           --
--後略

再起動しないと設定が反映されないので再起動をしようとすると、、
再起動のコマンドでエラーを確認

[root@localhost ~]# nmcli connection down eno33554976 && nmcli connection up eno33554976
Error: 'eno33554976' is not an active connection.
Error: no active connection provided.

状態の確認をすると、そもそも切断されていました。

[root@localhost ~]# nmcli device
デバイス     タイプ    状態      接続
virbr0       bridge    接続済み  virbr0
eno16777736  ethernet  接続済み  プロファイル 1
virbr0-nic   ethernet  接続済み  virbr0-nic
eno33554976  ethernet  切断済み  --
lo           loopback  管理無し  --

次は起動だけをして、確認してみます。

[root@localhost ~]# nmcli connection up eno33554976
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkMan
ager/ActiveConnection/17)
[root@localhost ~]# nmcli device
デバイス     タイプ    状態      接続
virbr0       bridge    接続済み  virbr0
eno16777736  ethernet  接続済み  プロファイル 1
eno33554976  ethernet  接続済み  eno33554976
virbr0-nic   ethernet  接続済み  virbr0-nic
lo           loopback  管理無し  --
[root@localhost ~]# nmcli device show eno33554976
GENERAL.デバイス:                       eno33554976
GENERAL.タイプ:                         ethernet
GENERAL.ハードウェアアドレス:           00:0C:29:8A:5E:48
GENERAL.MTU:                            1500
GENERAL.状態:                           100 (接続済み)
GENERAL.接続:                           eno33554976
GENERAL.CON パス:                       /org/freedesktop/NetworkManager/ActiveConnection/17
WIRED-PROPERTIES.キャリア:              オン
IP4.アドレス[1]:                        10.0.0.1/24
IP4.ゲートウェイ:
IP6.アドレス[1]:                        fe80::20c:29ff:fe8a:5e48/64
IP6.ゲートウェイ:

無事IPアドレスの設定も含め出来ていました。

pingコマンドで接続を確認します。

ずっと続くのでCtrl+Cで抜けましょう。

[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.062 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.068 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.068 ms
^C
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.049/0.061/0.068/0.012 ms

ここでCentOS7の設定は終了です。

このあとからはCentOS6の設定も終わらせたあとの作業になります。

pingコマンドでCentOS7側から6側(10.0.0.2)への接続を確認します。

[root@localhost ~]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.489 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.405 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.397 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.364 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=0.424 ms
^C
--- 10.0.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 0.364/0.415/0.489/0.048 ms

接続が無事確認できました。

CentOS7からCentOS6側へSSH接続をします。

[root@localhost ~]# ssh 10.0.0.2
[email protected]'s password: #CentOS6側のパスワードを入力してください。
Last login: Tue Nov  8 03:21:52 2016 from 10.0.0.1
[root@centos6 ~]# exit #exitで出れます。
logout
Connection to 10.0.0.2 closed.
[root@localhost ~]#

こんなに失敗だらけの記事を読んで頂きありがとうございました。
大変読みずらいとはおもいますが、
1、自分で失敗を見返せるように
2,もしかしたら同じところで行き詰まってる人がいるのでは
と思い載せさせてもらっています。

参考サイト
https://i1.fusioncom.jp/ja/technical/doc/help/instance/nic/linux
http://www.server-memo.net/centos-settings/network/nmtui.html
参考文献
IT技術者の現場ノウハウCentOS7実践ガイド