えんでぃの技術ブログ

えんでぃの技術ブログ

ネットワークエンジニアの視点で、IT系のお役立ち情報を提供する技術ブログです。

nmcliコマンドによるLinuxネットワーク設定手順

f:id:stopendy:20180908141506p:plain:w400

本記事で紹介すること

本記事では、nmcliによるネットワーク設定変更コマンドを紹介します。
ネットワーク構成図、実行コマンド例、オプション説明の順にひたすらユースケースを紹介していきます。

nmcliとは何か、基本的なコマンド体系の説明については下記記事にまとめてあります。
まだの方は、先にこちらをお読みください。

endy-tech.hatenablog.jp

記事が長いので、目次からジャンプして目的の設定例を確認する読み方がオススメです。

共通のオプション

nmcli で Connection を設定する際、必須となるオプションをここで先に紹介します。
以降の例では、以下の4オプションがどの例でも必ず登場します。

  • type
    • Connection の種別を指定する (物理インターフェースなら通信規格名、論理インターフェースならプロトコル名)
    • ethernetwifiwimax、vlan、bond、vpn、vxlan、dummy、他多数 を指定可能
      • ethernet: 最も基本的な構成。TagやTunnel、Teamingなどの設定を持たない、普通のインターフェースを作る
      • vlan: Dot1Q Tagging を利用したいときに利用する
    • 詳しくは、nmcli connection add help コマンドで確認できる
  • ifname
    • Connectionを紐づける対象の Device名を指定する
  • con-name
    • Connection名を指定する
    • 任意の文字列を指定可能
      • 半角スペースなどは \ でエスケープが必要
      • 2バイト文字は文字化けする
      • Device名と揃えるのが基本的に無難
  • autoconnect
    • yes/no のいずれかを指定
    • デフォルトはno
    • yesの場合、OS起動時やConnection作成時に自動的にifname で指定したDeviceに紐づけられる
    • noの場合、手動でnmcli connection up Connection名 を実行しない限り、Deviceに紐づけされない

以下の設定は任意ではありませんが、よく出てくるのでついでに紹介しておきます。

  • ipv6.method
    • IPv6 のアドレス設定方法を指定する
    • auto、dhcp、ignore、link-local、manual、shared を指定可能
    • デフォルトはauto
    • IPv6を使わない環境では、とりあえずignore にしておく

IPアドレスの設定

構成図

以下のようにL3スイッチとLinuxサーバが直結された構成を例にします。

f:id:stopendy:20180726203434p:plain

nmcliコマンド例

nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv6.method ignore

#### 今回紹介したいコマンド ####
nmcli connection modify enp0s3 ipv4.method manual ipv4.addresses 10.0.0.2/24

# 設定反映
nmcli connection up enp0s3

#### 補足 ####
# 以下のように1行で済ませることも可能
# nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv4.method manual ipv4.addresses 10.0.0.2/24 ipv6.method ignore

(補足1) セカンダリIPアドレスの設定

1つのConnectionに2つのIPアドレスを設定することも可能です。

# セカンダリIPアドレスの追加
nmcli connection modify +ipv4.addresses 10.0.0.102/24

# セカンダリIPアドレスの削除
nmcli connection modify -ipv4.addresses 10.0.0.102/24

# 設定反映
nmcli connection up enp0s3

(補足2) IPアドレスの削除

nmcli connection modify -ipv4.addresses 10.0.0.2/24 ipv4.method auto

# 設定反映
nmcli connection up enp0s3

nmcliコマンドオプション

  • ipv4.method
    • IPv4 のアドレス設定方法を指定する
    • auto、disabled、link-local、manual、shared を指定可能
      • auto: デフォルト値。DHCPからアドレス取得する際の設定
      • disabled: IPv4を利用しない
      • manual: IPv4アドレスを手動設定する。この設定は、ipv4.addressesとセットで使う
  • ipv4.addresses

疎通確認

Linuxからスイッチに対してpingが通ることを確認できました。

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=255 time=0.852 ms
# 64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=7.71 ms
# 64 bytes from 10.0.0.1: icmp_seq=3 ttl=255 time=1.25 ms
# ^C
# --- 10.0.0.1 ping statistics ---
# 3 packets transmitted, 3 received, 0% packet loss, time 2025ms
# rtt min/avg/max/mdev = 0.852/3.272/7.712/3.143 ms

(参考) スイッチ側の設定手順

参考情報として、対向側のスイッチの設定も載せておきます。

下記リンクをクリックすると、スイッチの設定が表示されます。

デフォルトゲートウェイの設定

構成図

f:id:stopendy:20180726210526p:plain

nmcliコマンド例

nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv6.method ignore ipv4.method manual ipv4.addresses 10.0.0.2/24

#### 今回紹介したいコマンド ####
nmcli connection modify enp0s3 ipv4.gateway 10.0.0.1

# 設定反映
nmcli connection up enp0s3

(補足1) デフォルトゲートウェイの削除

# nmcli connection modify enp0s3 -ipv4.gateway 10.0.0.1 では削除できない
nmcli connection modify enp0s3 ipv4.gateway 0.0.0.0

# 設定反映
nmcli connection up enp0s3

nmcliコマンドオプション

(参考) スイッチ側の設定手順

参考情報として、対向側のスイッチの設定も載せておきます。
下記リンクをクリックすると、スイッチの設定が表示されます。

DNSサーバの登録 (DNSクライアント設定)

次にDNSサーバの設定を行います。
今回は環境をインターネットに接続し、GoogleDNSサーバ (8.8.8.8と8.8.4.4) を利用する構成としました。

構成図

デフォルトゲートウェイの例と同じ構成です。

f:id:stopendy:20180726210526p:plain

nmcliコマンド例

nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv6.method ignore ipv4.method manual ipv4.addresses 10.0.0.2/24 ipv4.gateway 10.0.0.1

#### 今回紹介したいコマンド ####
nmcli connection modify enp0s3 ipv4.dns 8.8.8.8
nmcli connection modify enp0s3 +ipv4.dns 8.8.4.4

# 以下のように1行でも表現可能
# この書き方はDNS削除や、セカンダリIPアドレス追加などには使えないので微妙
# nmcli connection modify enp0s3 ipv4.dns 8.8.8.8, 8.8.4.4

##### 設定反映 #####
nmcli connection up enp0s3

(補足1) DNSサーバの削除

nmcli connection modify enp0s3 -ipv4.dns 8.8.8.8 -ipv4.dns 8.8.4.4

##### 設定反映 #####
nmcli connection up enp0s3

nmcliコマンドオプション

疎通確認

今回はdigコマンドで確認しました。
ANSWER SECTIONにIPアドレスが表示されていれば、DNSの設定は成功です。

stopendy@linuxgui001:~$ dig google.com

; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52585
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.          IN  A

;; ANSWER SECTION:
google.com.       299 IN  A   216.58.197.174

;; Query time: 51 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Jul 26 21:23:00 JST 2018
;; MSG SIZE  rcvd: 55

stopendy@linuxgui001:~$ 

(参考) スイッチ側の設定手順

デフォルトゲートウェイの設定と同じなので割愛します。

ルーティングの設定

構成図

f:id:stopendy:20180929195101p:plain

nmcliコマンド例

nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv6.method ignore ipv4.method manual ipv4.addresses 10.0.0.2/24

#### 今回紹介したいコマンド ####
nmcli connection modify enp0s3 ipv4.routes "192.168.0.0/24 10.0.0.1"

# 設定反映
nmcli connection up enp0s3

(補足1) ルーティング設定の追加 (2行目以降)

2つ目以降の経路を追加するときは + をつけます。
+をつけないと設定が上書きされ、192.168.0.0/24宛の経路が消えてしまいます。

+の付け忘れが怖い方は、常に+を付けてしまうのも手です。
1つ目のルーティング追加時に+をつけても問題はありません。

nmcli connection modify enp0s3 +ipv4.routes "192.168.1.0/24 10.0.0.1"

# 設定反映
nmcli connection up enp0s3

(補足2) ルーティング設定の削除

nmcli connection modify enp0s3 -ipv4.routes "192.168.0.0/24 10.0.0.1"
nmcli connection modify enp0s3 -ipv4.routes "192.168.1.0/24 10.0.0.1"

# 設定反映
nmcli connection up enp0s3

nmcliコマンドオプション

  • ipv4.routes
    • ルーティングの追加を行う
    • 形式: ipv4.routes "IPアドレス/プレフィックス [ネクストホップ] [メトリック]"
      • 例1: +ipv4.routes "192.168.0.0/24 10.0.0.1"
      • 例2: +ipv4.routes "192.168.0.0/24 10.0.0.100 2"
    • 削除時は-を付ける
      • 例1: -ipv4.routes "192.168.0.0/24 10.0.0.1"
      • 例2: -ipv4.routes "192.168.0.0/24 10.0.0.100 2"

(参考) スイッチ側の設定手順

デフォルトゲートウェイの設定と同じなので割愛します。

Dot1Qトランクポートの設定

VLAN Taggingのポートを設定する方法を説明します。

構成図

f:id:stopendy:20180726213225p:plain

nmcliコマンド例

#### 今回紹介したいコマンド ####
# 物理インターフェースに対応するコネクションを作成する
# IPアドレスはアサインしない → ipv4.method disabled
nmcli connection add type ethernet ifname enp0s3 con-name enp0s3 autoconnect yes ipv4.method disabled ipv6.method ignore

# Tag VLAN用のサブインターフェースを作成する
nmcli connection add type vlan ifname enp0s3.100 con-name enp0s3.100 autoconnect yes id 100 dev enp0s3 ipv4.method manual ipv4.address 10.0.0.2/24 ipv4.gateway 10.0.0.1 ipv6.method ignore

# 設定反映
nmcli connection up enp0s3
nmcli connection up enp0s3.100

nmcliコマンドオプション

Dot1Q Taggingインターフェースの作成は、以下の2工程に分かれています。

  • 物理インターフェース用のコネクションの設定
  • サブインターフェース用のコネクションの設定

まず、物理インターフェース用のコネクション設定について説明します。
特に新しいオプションは使いません。
ipv4.method disabled により、IPv4アドレスをアサインしない構成にするだけでOKです。

次にDot1Q用途のサブインターフェース (CiscoでいうSVI) ですが、以下のようにオプションを設定します。

  • type
    • 今回はvlanを指定する
    • (物理インターフェースを設定するときは、ethernetだった)
  • ifname
    • Device名を指定する (nmcli device で表示される文字列を指定する)
    • 物理インターフェースの場合、すでに存在するDevice名を指定する必要があった
    • サブインターフェースの場合、恐らくどんな文字列を指定しても問題ない (VLAN100など)
    • 今回は [デバイス名.VLAN-ID] という命名規則で設定した
    • 例: ifname enp0s3.100
  • con-name
    • Connection名を指定する (nmcli connection で表示される文字列を指定する)
    • ifname と同様、どんな文字列でも指定可能 (2バイト文字や空白は避けたい)
    • 細かい情報だが、con-name と ifname はどちらかのみ指定すれば、もう一方は自動補完される
    • 例: con-name enp0s3.100
  • dev
    • Dot1Q サブインターフェースが紐づく Device名を指定する
    • 任意文字列ではない。正確に指定する必要がある
    • 例: dev enp0s3
  • id
    • Dot1Q サブインターフェースが Tagging に利用する VLAN ID を指定する
    • 例: id 100

疎通確認

Linuxからスイッチに対するpingが通ることを確認しました。

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=255 time=0.927 ms
# 64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=10.7 ms
# ^C
# --- 10.0.0.1 ping statistics ---
# 2 packets transmitted, 2 received, 0% packet loss, time 1032ms
# rtt min/avg/max/mdev = 0.927/5.857/10.788/4.931 ms

(参考) スイッチ側の設定手順

参考情報として、対向側のスイッチの設定も載せておきます。
下記リンクをクリックすると、スイッチの設定が表示されます。

最後に

以上、nmcliによるネットワーク設定方法を紹介しました。

他にも追加してほしい設定例などありましたら、コメント欄にてリクエストお願いします。

おすすめ記事

メモリ64GBの小型PCを10万円で購入し、Linuxをインストールしました。
Windowsによって得られたノウハウを日々まとめていますので、よろしければ是非読んでみてください。

endy-tech.hatenablog.jp