前回はネットワーク設定を行う為の nmcli
コマンドについて説明しました。
しかし、それだけでは実際に何をどう設定するのか分かりづらいと思うので、今回は新しく有線LANのconnectionを追加してみたいと思います。
この記事で行うこと
1. connectionの作成
まず最初に新規のconnectionを追加します。
[root@localhost ~]# nmcli connection add type ethernet con-name test_ethernet
con-name test_ethernet
:con-name
はそのconnectionの名称を指定する物です。今回はtest_ethernet
と指定しています。指定しない場合は自動的に適当な名前が振られます。
前回の記事で説明したとおり、有線LAN接続の場合は type
を ethernet
と指定します。
この時点で引数を追加すればIPアドレスなど色々な指定が出来るのですが、今回は必要な項目である type
と必須ではないものの con-name
のみ指定して、他の項目は後ほど modify
コマンドで変更したいと思います。
2. connectionの確認
まず、作成したconnectionが存在するかを確認します。
[root@localhost ~]# nmcli connection show
NAME UUID TYPE DEVICE
test_ethernet 2f167aae-7bf7-44bb-9079-0a1801fceb0f ethernet --
ちゃんと作成されたことを確認したので、今度は作成したconnectionの詳細を確認してみます。
[root@localhost ~]# nmcli connection show test_ethernet
connection.id: test_ethernet
connection.uuid: 2f167aae-7bf7-44bb-9079-0a1801fceb0f
connection.stable-id: --
connection.type: 802-3-ethernet
connection.interface-name: --
connection.autoconnect: はい
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)
connection.multi-connect: 0 (default)
connection.auth-retries: -1
connection.timestamp: 0
connection.read-only: いいえ
connection.permissions: --
connection.zone: --
connection.master: --
connection.slave-type: --
connection.autoconnect-slaves: -1 (default)
connection.secondaries: --
connection.gateway-ping-timeout: 0
connection.metered: 不明
connection.lldp: default
connection.mdns: -1 (default)
connection.llmnr: -1 (default)
connection.wait-device-timeout: -1
802-3-ethernet.port: --
802-3-ethernet.speed: 0
802-3-ethernet.duplex: --
802-3-ethernet.auto-negotiate: いいえ
802-3-ethernet.mac-address: --
802-3-ethernet.cloned-mac-address: --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist: --
802-3-ethernet.mtu: 自動
802-3-ethernet.s390-subchannels: --
802-3-ethernet.s390-nettype: --
802-3-ethernet.s390-options: --
802-3-ethernet.wake-on-lan: default
802-3-ethernet.wake-on-lan-password: --
ipv4.method: auto
ipv4.dns: --
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.addresses: --
ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
ipv4.routing-rules: --
ipv4.ignore-auto-routes: いいえ
ipv4.ignore-auto-dns: いいえ
ipv4.dhcp-client-id: --
ipv4.dhcp-iaid: --
ipv4.dhcp-timeout: 0 (default)
ipv4.dhcp-send-hostname: はい
ipv4.dhcp-hostname: --
ipv4.dhcp-fqdn: --
ipv4.dhcp-hostname-flags: 0x0 (none)
ipv4.never-default: いいえ
ipv4.may-fail: はい
ipv4.dad-timeout: -1 (default)
ipv4.dhcp-vendor-class-identifier: --
ipv6.method: auto
ipv6.dns: --
ipv6.dns-search: --
ipv6.dns-options: --
ipv6.dns-priority: 0
ipv6.addresses: --
ipv6.gateway: --
ipv6.routes: --
ipv6.route-metric: -1
ipv6.route-table: 0 (unspec)
ipv6.routing-rules: --
ipv6.ignore-auto-routes: いいえ
ipv6.ignore-auto-dns: いいえ
ipv6.never-default: いいえ
ipv6.may-fail: はい
ipv6.ip6-privacy: -1 (unknown)
ipv6.addr-gen-mode: stable-privacy
ipv6.ra-timeout: 0 (default)
ipv6.dhcp-duid: --
ipv6.dhcp-iaid: --
ipv6.dhcp-timeout: 0 (default)
ipv6.dhcp-send-hostname: はい
ipv6.dhcp-hostname: --
ipv6.dhcp-hostname-flags: 0x0 (none)
ipv6.token: --
proxy.method: none
proxy.browser-only: いいえ
proxy.pac-url: --
proxy.pac-script: --
以下によく使いそうな設定を解説します。
connection.autoconnect
: 自動的に接続を行うかの設定です。これがいいえ
の場合、サーバ再起動時などに自動的に接続されません。ipv4.method
: IPv4の接続設定方法です。 この項目をmanual
にすることで手動設定が出来ます。またIPv4を使わずにIPv6のみ使いたい場合はこの項目をdisable
にします。普通に使う分にはauto
のままで大丈夫かと思います。ipv4.dns
: IPv4で使うDNSサーバを指定します。ちなみに、ここでDNSサーバを指定しても後述するipv4.ignore-auto-dns
がいいえ
の場合、指定したDNSサーバはセカンダリかそれ以下の優先順となり、機能しないので注意してください。ipv4.addresses
: IPv4で使用したいプライベートIPアドレスを指定します。ここで指定したアドレスが既に別のPCに割り振られていたり割り振り範囲外の場合は、IPアドレスが割り振られず繋がらなくなってしまうので、注意してください。指定しない場合は自動で割り振られます。ipv4.ignore-auto-dns
: この項目がはい
の場合、ルータから通知されるDNSを無視します。ipv4.dns
の指定がない場合、どのDNSにも繋がらず名前解決(URLを使った接続)が出来なくなってしまうので注意してください。
上記の ipv4.
で始まる項目は ipv6.
でも同じような項目があります。
ipv6.addresses
:ipv4.addresses
と似ていますが、IPv6はその性質上プライベートIPアドレスという物が存在しないので、全世界で一意のIPアドレスとなります。大体は前半分(4つ目のコロンまで)が与えられたIPアドレス(変更不可)で、後半分は自由に設定できるものとなります。詳しくは「IPv6アドレス」などで検索してみてください。ipv6.ip6-privacy
: IPv6ネットワークのIPアドレスはそのネットワークデバイスのMACアドレスに基づいた物となります。しかし、それではネットワークデバイスのMACアドレスが他の人に知られてしまいます。さらに、MACアドレスからはそのデバイスの製造元などの情報を得ることが出来ます。このためランダムなIPアドレスを使うようにするかという設定です。ただ、サーバとして使うならipv6.addresses
を指定するか、そもそもIPv6を使わない設定にすることがほとんどなので、実はどうでも良かったり……。一応0
は無効(MACアドレスを元にしたIPアドレスを使う)。1
は有効(しかし、MACアドレスを元にしたIPアドレスを優先して使う)。2
はランダムなIPアドレスを使う。となります。(ランダムとはいえ一度作ったら基本的にはそのIPアドレスを使い続けます)
なお、実際にconnectionでネットワークに繋がっている場合は、追加で大文字で表される項目が表示されると思います。( IP4.ADDRESS[1]
など)
前回も記述したとおり、それらの項目は設定値ではなく、実際にdevice側で使われている値となります。
もし、設定値と違う場合は設定を変更した後で再読込がされてないか、別の設定が干渉している場合があります。
3. connection設定の変更
設定の変更は前回記述したとおり、 modify
コマンドを使います。
modify
の後に、設定変更したいconnectionの名前を入れて、以降に設定したい項目名とその設定値を半角スペースで区切って、入れていきます。
設定の項目名は先ほど確認したとおりとなります。
[root@localhost ~]# nmcli connection modify test_ethernet ipv4.dns 127.0.0.1 ipv4.addresses 192.168.0.2/24 ipv4.ignore-auto-dns yes ipv6.method disabled
上記の設定例では、 test_ethernet
の設定項目を以下のように変更しています。
ipv4.dns
を127.0.0.1
に。これは自分自身を指すIPアドレスです。UnboundなどDNSサーバが起動しているサーバの場合にで設定します。他に使いたいDNSサーバがある場合はそのIPアドレスを指定します。ipv4.addresses
を192.168.0.2/24
に。この設定値はルータでアドレスの範囲がどうなっているか、DHCPで割り振られるIPアドレスがどれか、などによって設定できる値が変わってきます。末尾の/24
はサブネットマスクです。これもルータの設定によって値が変わります。ipv4.ignore-auto-dns
をyes
に。これはipv4.dns
で指定しているDNSサーバを利用するため、ルータから通知されるDNSサーバを無視する設定となります。ipv6.method
をdisabled
に。IPv6ネットワークを使いたくない場合の設定です。最近はIPv6も普及して来ていますし、使っていった方が良いとは思いますが。
4. ネットワークへの接続
先にどのようなdeviceがあるか確認してみます。
[root@localhost ~]# nmcli device status
DEVICE TYPE STATE CONNECTION
enp3s0 ethernet 切断済み --
lo loopback 管理無し --
有線LANのdeviceはenp3s0という名前で存在しているようです。
では、このdeviceに先ほど作成したconnectionで接続をしてみます。
[root@localhost ~]# nmcli connection up test_ethernet ifname enp3s0
ifname
: InterFace NAME の略です。今まで散々deviceと言ってきたものは一般的に Network Interface と呼ばれるものです。ネットワークとサーバのインターフェースという訳です。この引数に続いて接続したいdeviceの名称を入力します。
なお、 ifname
の指定がない場合は自動的に選ばれたdeviceに接続されます。(前回接続していた、とかそういう感じで選ばれます)
ちなみにネットワークの設定を変更したときに、それを反映したい場合はネットワークを切断してから再接続します。
[root@localhost ~]# nmcli connection down test_ethernet
[root@localhost ~]# nmcli connection up test_ethernet
しかしSSHで接続している場合はネットワークを切断した時点でSSHも切断されてしまいます。
そういう場合はSSH接続に使っているネットワークの connection.autoconnect
が はい
( yes
)になっていることを確認した上で、NetworkManager自体を再起動することでSSH接続を完全に切断せずに設定を適用できます。
[root@localhost ~]# systemctl restart NetworkManager
しかしNetworkManagerの再起動が何かしらの要因で失敗すると当然SSH接続も切れてしまうので過信は禁物です。
サーバ近くにあるけどちょっと行くの面倒だしワンチャン上手くいけば良いなぐらいの気持ちでやってください。
まとめ
これでネットワークの設定を行うことが出来るようになりました。
あとは nmcli connection show
で表示される項目を調べていけば、大抵のネットワーク設定は行えるはずです。
文中に何度も書いていますが、ネットワークの設定変更はともすればSSH接続を途切れさせてしまう可能性があります。
物理的にサーバにアクセス出来ないような状態で触る際には細心の注意を払うようにしてください。(というかサーバの近くにいるときにやるようにしてください)