純規の暇人趣味ブログ

首を突っ込んで足を洗う

[Ubuntu]ローカルIPアドレスを固定にする

      2018/04/07    HimaJyun

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

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

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

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

スポンサーリンク

最初に

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

まさか今この記事をご覧の方でこれより古いバージョンをお使いの方は居ないと思われます。

また、みなさんが「ローカルIP」が何かをご存知である事を祈っています。(ローカルIPとグローバルIPの違いが分からない程度の能力ではサーバ構築は早過ぎます)

各種設定を確認

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

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

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

アドレスとネットマスク

「ifconfig」コマンドを実行すれば良いです。

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

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」です。

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

ゲートウェイ

「route -n」コマンドを実行すれば良いです。

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

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 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

この中の「Gateway(日本語だと「ゲートウェイ」)」がゲートウェイです。
この場合だと「192.168.1.1」ですね、メモを取っておきましょう。

DNSネームサーバ

DNSネームサーバは「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」がネームサーバですね。メモを(ry

IPアドレスを固定する

さて、先程の項目で必要な設定の確認が出来ました。

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

「エディタでファイルを開く」と言う事の意味が分からない方(流石にそんな奴居ないと思いたい)はとりあえず以下のコマンドを

sudo nano /etc/network/interfaces

コマンドを実行すると「[sudo] password for [ユーザ名]」と表示されると思うので、表示されているユーザ名のパスワードを入れて下さい。

ちなみに、パスワードは一切表示されませんが、そう言う仕様です、きちんと入っているので気にせずどうぞ。

先に説明しておきますが、nano(上のコマンドで利用する場合)ではCtrl+Oが保存、Ctrl+Xが終了です。

for 16.04

何故かこの記事が人気を博しているみたいなので、16.04に対応した方法も書いておきましょう。

16.04から、多くの場合「eth0」だったものが「enpNsN」になります。(Nはマシンによって異なる番号)

例えば、今、私の手元にある仮想環境では「enp0s3」になっています。

以下の14.04での手法で「eth0」となっている所を自分のサーバにあった「enp~」に読み替えて下さい。

ローカルIP固定

14.04ではほぼ大抵多くの場合で「eth0」となっているでしょう。(16.04ではenp~なので読み替えて下さい。)

# 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 eth0
iface eth0 inet dhcp

# This is an autoconfigured IPv6 interface
iface eth0 inet6 auto

「iface eth0 inet dhcp」を「iface eth0 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 eth0
iface eth0 inet static
	address [設定したいIPアドレス]
	netmask [ネットマスク]
	gateway [ゲートウェイ]
	dns-nameservers [ネームサーバ]

# This is an autoconfigured IPv6 interface
iface eth0 inet6 auto

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

その他項目は先程メモを取った値を設定しましょう。

# 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 eth0
iface eth0 inet static
	address 192.168.1.2
	netmask 255.255.255.0
	gateway 192.168.1.1
	dns-nameservers 192.168.1.1

# This is an autoconfigured IPv6 interface
iface eth0 inet6 auto

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

IPv6

この項目はちょっと難しいかも……(私自身しっかり理解出来てない)。なので、IPv6が必要なければ設定しなくて構いません。

IPv6の場合は一つのインターフェース(NIC)に複数のIPアドレスを設定します。

事前に確認しておきたいのはプロバイダから割り当てられるIPアドレスです。

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 

範囲(Scope)がグローバル(Global)で2から始まってる奴なら恐らくそうです、この場合は2001:db8...って奴

それと、ネットマスク(/64、の64の部分)をメモって、「/etc/network/interfaces」を開きます。

恐らく最後の方に「inet6 auto」となっている部分があるので、そこに以下のように編集

#iface enp0s3 inet6 auto
# 以下の行を追記
iface enp0s3 inet6 static
	address 2001:db8:1::abcd
	netmask 64

「iface enp0s3 inet6 auto」の部分はあってもなくても構わないみたいです。たら、あるとstaticで指定したIPv6アドレスがあるのに更に自動設定で別のIPv6アドレスが増えるみたいなので、基本的になくても良さそうかと

ただ、これはグローバルIPなので、それとは別にユニークローカルアドレス(ULA、IPv4でいう192.168...みたいなの)が必要なら、以下のように設定します。

#iface enp0s3 inet6 auto
iface enp0s3 inet6 static
	address 2001:db8:1::abcd
	netmask 64
# 以下の行を追記
iface enp0s3 inet6 static
	address fd00:192:168:1::2
	netmask 64

「fd00:192:168:1::」の部分は厳密には計算方法があるのですが、ここで書き切れるような簡単な物ではないので「ipv6 ula generator」とかって調べて出てきたツールでも使ってください。

ちなみに他のデバイスとダブってなければ良いので、「fd00:192:168:1::」でも問題なく動きます。

なので「fd00:192:168:1::1」「fd00:192:168:1::2」みたいに、IPv4アドレスと同じように設定して動かしちゃっても恐らく問題はない(厳しい人からは怒られるかも知れないけど)

再起動

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

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」を実行する事で設定が変更されているのが分かると思われます。

 - サーバー ,