🗂

コマンドラインで Ubuntu を固定 IP アドレスにする方法 (なるべく丁寧に解説)

2021/03/03に公開

はじめに

Raspberry Pi で遊んでいると IP アドレスを固定したい場面が多々発生します。今回はコマンドラインのみで Ubuntu の IP アドレスを固定する方法について紹介します。

環境

Ubuntu 20.10

設定ファイルを追加

/etc/netplan/99_config.yaml というファイルを新規作成し、その中に以下の内容を書き込みます。

/etc/netplan/99_config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    <NETWORK_INTERFACE_NAME>:
      addresses:
        - <STATIC_IP_ADDR_WITH_NETMASK>
      gateway4: <DEFAULT_GATEWAY>
      nameservers:
          addresses: [<DNS, DNS, ...>]

<> で囲まれている部分はそれぞれ以下の環境に置き換えます。

変数 説明
<NETWORK_INTERFACE_NAME> ネットワークインターフェース名 eth0
<STATIC_IP_ADDR_WITH_NETMASK> 固定 IP アドレスとネットマスク 192.168.3.2/24
<DEFAULT_GATEWAY> デフォルトゲートウェイ 192.168.3.1
<DNS, DNS, ...> DNS サーバ (複数ある場合はカンマ区切り) 8.8.8.8, 8.8.4.4

ネットワークインターフェース名

ネットワークインターフェース名は以下のコマンドで調べられます。

$ ip a | grep -E '192\.168\.[0-9]*\.[0-9]*|172\.(1[6-9]|2[0-9]|3[0-1])\.[0-9]*\.[0-9]*|10\.[0-9]*\.[0-9]*\.[0-9]*' -B 10

長い grep は IPv4 のプライベートアドレスとなりうる値を正規表現で全部指定しています。

すると、以下のように表示されます。

... (無視して OK)
...
...
...
...
...
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.14/24 brd 192.168.3.255 scope global dynamic eth0

grep が引っかかった部分 (上記の例だと 192.168.3.14192.168.3.255) に該当するインターフェース名 (上記の例だと eth0 の部分) を <NETWORK_INTERFACE_NAME> に書きます。

固定 IP アドレスとネットマスク

これは Ubuntu デバイスに指定したい固定 IP アドレスとネットマスクをそのまま指定します。ただし、すでに存在している LAN 内の IP アドレスと被ると厄介なので、事前に被っていないことを調べる必要があります。

Mac だと arp-scan コマンドで確認できます。

Macでの操作
$ brew install arp-scan
Macでの操作
$ sudo arp-scan -l --interface <NETWORK_INTERFACE_NAME>

<NETWORK_INTERFACE_NAME> は Ubuntu のときと同じように調べます。ただし Mac には ip コマンドは存在しないので代わりに ifconfig を使います。

Macでの操作
$ ifconfig | grep -E '192\.168\.[0-9]*\.[0-9]*|172\.(1[6-9]|2[0-9]|3[0-1])\.[0-9]*\.[0-9]*|10\.[0-9]*\.[0-9]*\.[0-9]*' -B 10

複数出てきた場合はどちらを使っても大丈夫です。

arp-scan コマンドの結果に出てこなかった IP アドレスを Ubuntu に指定します。

次にネットマスクですが、まず LAN 内のネットマスクを調べます。Mac なら「システム環境設定」>「ネットワーク」の「サブネットマスク」と書かれている部分がそれに該当します。

スクリーンショット 2020-12-24 17.33.46のコピー3.png

上記のスクリーンショットでは 255.255.255.0 と書かれています。これを 2 進数表記にすると以下のようになります。

11111111 11111111 11111111 00000000

上位 24 ビットが 1 なので、/24 と指定します。つまり IP アドレスと合わせると 192.168.3.2/24 のような表記になります。(192.168.3.2 は例です。他と被らない IP アドレスを指定します)

他の例として、たとえば 255.255.0.0 だった場合は、2 進数表記すると

11111111 11111111 00000000 00000000

となるので、/16 を指定すれば OK です。

デフォルトゲートウェイ

その名の通りデフォルトゲートウェイを指定します。

Mac だと「システム環境設定」>「ネットワーク」の「ルーター」と書かれている部分がデフォルトゲートウェイです。これを同じ値を Ubuntu でも設定すれば OK です。

スクリーンショット 2020-12-24 17.33.46のコピー.png

DNS サーバ

DNS サーバの IP アドレスをカンマ区切りで複数指定できます。

よくわからない場合はとりあえず 8.8.8.8, 8.8.4.4 を指定しておけば OK です。これは Google Public DNS で、誰でも利用可能です。

完成例

完成例はこんな感じです。

/etc/netplan/99_config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 192.168.3.2/24
      gateway4: 192.168.3.1
      nameservers:
          addresses: [8.8.8.8, 8.8.4.4]

上記の例では 192.168.3.2 で固定しています。

適用

上記のファイルを保存したら、以下のコマンドを実行します。

$ sudo netplan apply

これで固定 IP アドレスになったはずです。確認してみましょう。

$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.2/24 brd 192.168.3.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.3.14/24 brd 192.168.3.255 scope global secondary dynamic eth0
       valid_lft 83119sec preferred_lft 83119sec

ちゃんと 192.168.3.2 が設定されていることが確認できました。

補足

固定 IP アドレス (上記の例では 192.168.3.2) のすぐ下の行に valid_lft forever preferred_lft forever と書かれているので固定になっていることがわかります。forever が固定である証です。

固定ではない場合、192.168.3.14 のすぐ下の行のように valid_lft 83119sec preferred_lft 83119sec と有効期限が表示されています。こちらは有効期限が切れたり DHCP サーバがリセットされたりすると変わるため、固定ではありません。

なお、固定 IP アドレスを指定しても上記の例のように 192.168.3.14 (固定じゃないほうの IP アドレス) が残っています。ただちに古い IP アドレスが削除されるわけではないようです。

また、今回はコマンドラインで操作しましたが、もし Ubuntu Desktop をお使いで、GUI でも固定 IP アドレスになるように設定していた場合は、コマンドラインの設定 (今回の記事での設定) が優先されます。とはいっても紛らわしいので GUI とコマンドラインの両方で別々の設定をするのはおすすめしません。

参考サイト

GitHubで編集を提案

Discussion