[Ubuntu]ローカルIPアドレスを固定にする(18.04/16.04)
2019/05/29
無駄にサーバを置きまくっては自己満足するのが楽しみ、それは誰でも同じかな?@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/24
、192.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 dhcp
をiface 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
を実行する事で設定が変更されているのが分かると思われます。