なうびるどいんぐ

脳みそ常時-3dB

[Ubuntu]ローカルIPアドレスを固定にする(18.04/16.04)

      2019/05/29    HimaJyun

無駄にサーバを置きまくっては自己満足するのが楽しみ、それは誰でも同じかな?@HimaJyunです。

私がUbuntuでサーバ構築をする際に戸惑ったのが「ローカルIPを固定する」事でした。

ググってもみても上位に出るのがGUI(デスクトップ)でのやり方や、DNSがなんとかでー……

とにかく、私が困ると言う事はみなさんも困ると言う事でしょうし、後の方のために記事にしようと思います。

スポンサーリンク

最初に

まず最初に、検証に利用しているバージョンは「Ubuntu Server」の「16.04」「18.04」です。

それから、「ローカルIP」がどういうものかを理解している必要があります。(ローカルIPとグローバルIPの違いが分からない程度の能力の方はよ~く調べ直してからじゃないともれなく躓くよ)

各種設定を確認

IPアドレスを固定にするには「アドレス」、「ネットマスク」、「ゲートウェイ」、「DNSネームサーバ」の4つが必要です。

このうち、「アドレス」はある程度自由に決められますが、他の項目はまずほぼ固定なので予め確認してメモでも取っておきましょう。

自分のネットワークでのこれらの値が分かっている方は「IPアドレスを固定する」の項目まで飛ばしてください。

アドレスとネットマスク

ifconfigコマンドを実行すれば良いです。(ifconfigのない環境ではip address showでも可)

コマンドを実行すると以下の様に表示されると思います。(言語設定によっては日本語で表示されるかも知れません)

eth0      Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:cafe:3d58/64 Scope:Link
          inet6 addr: 2001:db8:1::beef/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2209125 errors:0 dropped:2 overruns:0 frame:0
          TX packets:2510226 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:178445580 (178.4 MB)  TX bytes:520143707 (520.1 MB)
          Interrupt:17 Memory:fcfe0000-fd000000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2703577 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2703577 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:1388849322 (1.3 GB)  TX bytes:1388849322 (1.3 GB)

この中の「inet addr」がローカルIP、「Mask」がネットマスクです。

言語設定が日本語の場合は「inetアドレス」と「マスク」になります。

この場合はアドレスが「192.168.1.2」で、ネットマスクが「255.255.255.0」です。

IPv6アドレスが必要な場合は「inet6 addr」の(Scope:Globalになっている)アドレスと、プレフィックス(/64の部分)も必要。

メモを取っておきましょう。

ゲートウェイ

route -nコマンドを実行すれば良いです。(もしくはip route show)

以下の様に表示されます。

test@Server:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 enp0s3
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 enp0s3

この中の「Gateway(日本語だと「ゲートウェイ」)」がゲートウェイです。

デフォルトゲートウェイ(Destinationが0.0.0.0でFlagsにGが付いている行)がそれ。

この場合だと「192.168.1.1」ですね、メモを取っておきましょう。

IPv6が必要な場合はroute -n -6で確認しましょう。(もしくはip -6 route show)

GatewayがNext Hopになっただけで、見方は同じです。

Kernel IPv6 routing table
Destination           Next Hop    Flag Met Ref Use If
::1/128               ::          U    256 1     0 lo
2001:db8:1::/64       ::          U    100 1     0 enp0s3
fe80::/64             ::          U    256 1     0 enp0s3
::/0                  fe80::cafe  UG   100 4     4 enp0s3
::1/128               ::          Un   0   6     5 lo
2001:db8:1::beef/128  ::          Un   0   3     4 enp0s3
fe80::beef/128        ::          Un   0   3    19 enp0s3
ff00::/8              ::          U    256 5   112 enp0s3
::/0                  ::          !n   -1  1     1 lo

Destinationが::/0でFlagにGが含まれる行のNext Hop、この場合は「fe80::cafe」です。

DNSネームサーバー

従来までは「/etc/resolv.conf」を見れば調べられたのですが、18.04からsystemd-resolveを使うようになったので調べ方が変わりました。

sudo systemd-resolve --statusを実行して「DNS Servers:」と記載されている行が指定されているDNSです。

早い話がsudo systemd-resolve --status | grep "DNS Servers"をすればいい

DNSネームサーバ(16.04)

16.04より前のバージョンではcat /etc/resolv.confするだけで調べられます。

コマンドを実行すると以下の様に表示されます。

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.1.1

読んで字の如く「nameserver」がネームサーバですね。

IPアドレスを固定する(18.04)

Ubuntu 18.04から設定が大幅に変わりました。

また、インストール時にも設定出来るようになったので両方の方法を書いておこうと思います。

CIDR表記について

18.04からサブネットマスクの指定に255.255.255.0みたいな指定ではなく、CIDR表記(/24みたいなの)を使うようになりました。

ほぼ大抵多くの場合255.255.255.0でしょうから、そうだと仮定して説明すると、192.168.x.yに/24を引っ付けたのがCIDR表記です。(例: 192.168.1.0/24192.168.0.0/24)

サブネットマスクが255.255.255.0じゃない人はネット上にある計算ツールみたいなのでも使って確かめて下さい。

後から設定する

/etc/network/interfacesはなくなりました。18.04からは/etc/netplan/50-cloud-init.yamlになります。

yamlなので恐らくインデントにタブ文字は使えないと思います。スペースでインデントしましょう。

以下の例のように設定します。

network:
    ethernets:
        <デバイス>:
            addresses:
            - <IPアドレス>
            gateway4: <デフォルトゲートウェイ>
            gateway6: <v6のデフォルトゲートウェイ>
            dhcp4: false
            dhcp6: false
            accept-ra: false
            nameservers:
                addresses:
                - <DNSネームサーバー>
    version: 2

例えば、以下のような感じに。

network:
    ethernets:
        enp0s3:
            addresses:
            - 192.168.1.2/24
            gateway4: 192.168.1.1
            gateway6: fe80::cafe
            dhcp4: false
            dhcp6: false
            accept-ra: false
            nameservers:
                addresses:
                - 192.168.1.1
    version: 2

IPv6アドレスを複数設定したい時はaddressesに追加する。(自動で設定されるIPv6を無効にすることは出来ない?)

enp0s3:
    addresses:
    - 192.168.1.2
    - 2001:db8:1::abcd/64
    - fd00:192:168:1::2/64

設定を反映させるにはsudo netplan applyです、16.04時代のような再起動は不要。

インストール時に設定する

インストール時に設定する場合は事前にネットマスクなどを調べておいてください。(事前に調べられない人は後から設定する方をどうぞ)

こんな感じで、インストール時にNICを指定(矢印キーで選んでEnter)する事で「え?なんなん?IPとか設定したいん?」みたいな画面が出てきます。

「Use a static IPv(4|6) configuration」を選択すると設定画面が出てきます。

Subnetにサブネットマスク(CIDR表記)、Addressに設定したいアドレス、Gatewayにデフォルトゲートウェイ、Name serversにDNSネームサーバーを指定します。

設定が出来たらSaveやDoneを選んで保存します。

IPアドレスを固定する(16.04)

こちらは従来までの/etc/network/interfacesを使う方法

ちなみに14.04でもenp~がeth0なだけで同じ

ローカルIP固定

好きなエディタで/etc/network/interfacesを開きましょう。

デフォルトだと以下のようになっているはずです。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp0s3
iface enp0s3 inet dhcp

# This is an autoconfigured IPv6 interface
iface enp0s3 inet6 auto

iface enp0s3 inet dhcpiface enp0s3 inet staticに書き換えて下さい。

書き換えたらその下の行にいくつかの項目を追加します。

以下のように変更して下さい。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto enp0s3
iface enp0s3 inet static
	address [設定したいIPアドレス]
	netmask [ネットマスク]
	gateway [ゲートウェイ]
	dns-nameservers [ネームサーバ]

# This is an autoconfigured IPv6 interface
iface enp0s3 inet6 auto

今回の例では、IPアドレスとして「192.168.1.2」を設定したいので以下のようにします。

# The primary network interface
auto enp0s3
iface enp0s3 inet static
	address 192.168.1.2
	netmask 255.255.255.0
	gateway 192.168.1.1
	dns-nameservers 192.168.1.1

IPv6の設定が必要な場合はiface enp0s3 inet6 autoの下に以下のように追記します。

# IPv6が必要な場合
iface enp0s3 inet6 auto
iface enp0s3 inet6 static
	address 2001:db8:1::abcd
	netmask 64
# ULAが必要な場合
#iface enp0s3 inet6 static
#	address fd00:192:168:1::2
#	netmask 64

inet6 autoの行はあってもなくても構いません、あれば自動設定のIPv6アドレスが付きますし、なければ付きません。

変更が出来たら保存(Ctrl+O)してファイルを閉じます。(Ctrl+X)

再起動

ネットワークを再起動すると反映されます、単に再起動するだけではなく、いくつか手順が必要です。

sudo ip addr flush dev eth0
sudo systemctl restart networking

更にdhcpからstaticに変更した場合は以下の手順も必要なようです。

sudo kill `cat /run/dhclient.eth0.pid`
sudo rm /run/dhclient.eth0.pid

ただ、それで正しいのかは確認していないので、可能であればsudo rebootでサーバ諸共再起動した方が良いと思います。

再起動後に再びifconfigを実行する事で設定が変更されているのが分かると思われます。

 - サーバー ,