Ubuntu 18.04: ネットワークを設定する

UbuntuでのIPアドレス、DNSサーバ等の設定方法について記載します。

1 Ubuntuのネットワーク設定

インストールした状態だとNetworkManagerがDHCP向けネットワークを設定しています。

/etc/network/interfacesのようなNetworkManagerが導入される以前の方法を提供しつつ、NetworkManagerとsystemd-resolvedでネットワークを設定しています。

NetworkManagerの置き換えになるであろうsystemd-networkdもインストールされていますが、デフォルトだとsystemd-networkd.serviceは無効になっています。

しばらくはNetworkManagerが残り、nmcliとnmtuiを使うことができるでしょう(NetworkManagerが置き換わるとしても、systemd-networkd側でバックエンドとしてsystemd-networkdを使うnmcliとnmtuiを用意すれば良いだけですが)。

現状は16.10から追加されたsystemd-resolvedと上手くつきあっていく必要があります。

1.1 nameserver 127.0.0.53について

systemd-resolvedは/etc/resolv.confにnameserver 127.0.0.53を追加し、 127.0.0.53でリクエストを受け付け、DNSサーバに問い合わせます。

$ cat /etc/resolv.conf
<snip>
nameserver 127.0.0.53
search hiroom2.com

systemd-resolvedが使用しているDNSサーバはsystemd-resolve –statusで確認できます。

$ systemd-resolve --status
<snip>
Link 2 (ens3)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.11.2
          DNS Domain: hiroom2.com

systemd-resolvedはDNSサーバに対してラウンドロビンで問い合わせを実行します。nameserverの順番は固定されません。

これは議論されている機能です。

冗長性を持たせる為に複数のDNSサーバを指定している場合は全く問題ありません。むしろ問い合わせの段階で負荷分散されるので有用な機能です。

ただし、ローカルネットワークのホスト名を解決するDNSサーバを用意している場合は、ひとつのnameserverを用いるようにして、DNSサーバ側でインターネット向けの名前解決を再帰問い合わせで実行する必要があります。とりあえずはDHCPサーバとDNSサーバ側で完結すれば良いでしょう。

2 静的にネットワークを設定する

静的にIPアドレスを設定します。

2.1 "Settings"で静的にネットワークを設定する

"Settings"を開き、"Network"の"Wired"を編集します。

"IPv4 Method"を"Manual"に変更します。

"Address"にはこのマシンのIPアドレスを、"Netmask"にはサブネットを、 "Gateway"にはゲートウェイのIPアドレスを、"DNS"にはDNSサーバのIPアドレスを設定します。

"Apply"をクリックした後にマシンを再起動します。

0001_Settings-static.png

2.2 /etc/network/interfacesで静的にネットワークを設定する

/etc/network/interfacesで静的にネットワークを設定します。

NetworkManagerもsystemd-resolvedもdns-serverとdns-nameserversを使わないようなので、systemd-resolvedのために/etc/system/resolved.confを変更します。

#!/bin/sh

INTERFACE=ens3
cat <<EOF | sudo tee /etc/network/interfaces
auto lo
iface lo inet loopback
auto ${INTERFACE}
iface ${INTERFACE} inet static
      address 192.168.11.250
      netmask 255.255.255.0
      network 192.168.11.0
      broadcast 192.168.11.255
      gateway 192.168.11.1
      dns-server hiroom2.com
      dns-nameservers 192.168.11.2
EOF

# systemd-resolved does not get dns-nameservers and dns-search in
# /etc/network/interfaces.
sudo sed -i /etc/systemd/resolved.conf \
     -e 's/^#DNS=/DNS=192.168.11.2/g' \
     -e 's/^#Domains=/Domains=hiroom2.com/g'

sudo reboot

2.3 nmtuiで静的にネットワークを設定する

nmcliで静的にネットワークを設定します。

$ sudo nmtui

nmtuiが起動します。 Ctrl + p、Ctrl + n、TAB等でも移動できますが、矢印キーでの移動が簡単でしょう。選択するにはENTERキーを押します。

"Edit a connection"を選択します。

0002_nmtui-static-NetworkManagerTUI.png

"Ethernet"のコネクション"Wired connection 1"を選択します。

0003_nmtui-static-EditAConnection.png

コネクションが存在ない場合は"Add"で"Ethernet"を選択して作成します。 "Profile name"を入力し、"Device"にネットワークインターフェース名か MACアドレスを入力します。

0004_nmtui-static-AddAConnection.png

0005_nmtui-static-InputNameAndInterface.png

"IPv4 CONFIGURATION"の右を選択して"<Manual>"に変更します。その "<Manual>"の右にある"<Show>"を選択します。

0006_nmtui-static-IPv4Manual.png

"Addresses"にこのマシンのIPアドレスとサブネットを、"Gateway"にゲートウェイのIPアドレスを、"DNS servers"にDNSサーバのIPアドレスを、 "search domains"に/etc/resolv.confのsearchのドメイン名を設定します。

0007_nmtui-static-IPv4Network.png

画面下部の"<OK>"を選択します。

0008_nmtui-static-EditConnectionOK.png

画面下部の"<Back>"を選択します。

0009_nmtui-static-Back.png

画面下部の"<Quit>"を選択します。

0010_nmtui-static-Quit.png

2.4 nmcliで静的にネットワークを設定する

nmcliで静的にネットワークを設定します。スクリプトで自動化する場合はnmtuiではなくこちらを使います。

インストール直後だと"Wired connection 1"が作成されています。

$ nmcli -t -f NAME con
Wired connection 1

コネクションが存在しない場合はnmcli connection addで追加します。

#!/bin/sh

INTERFACE=ens3
CONNECTION_NAME=$(nmcli -t -f NAME connection)
if [ -z "${CONNECTION_NAME}" ]; then
  CONNECTION_NAME='Wired connection 1'
  sudo nmcli connection add con-name "${CONNECTION_NAME}" \
       type ethernet \
       ifname ${INTERFACE}
fi

nmcli connection modifyで静的にネットワークを設定します。

#!/bin/sh

sudo nmcli connection modify "Wired connection 1" \
     ipv4.method manual \
     ipv4.address "192.168.11.250/24" \
     ipv4.gateway "192.168.11.1" \
     ipv4.dns "192.168.11.2" \
     ipv4.dns-search "hiroom2.com"
sudo reboot

2.5 systemd-networkdで静的にネットワークを設定する

systemd-networkdで静的にネットワークを設定します。

#!/bin/sh

INTERFACE=ens3

cat <<EOF | sudo tee /etc/systemd/network/${INTERFACE}.network
[Match]
Name=${INTERFACE}

[Network]
DHCP=no
Address=192.168.11.250/24
Gateway=192.168.11.1
DNS=192.168.11.2
Domain=hiroom2.com
EOF

sudo systemctl disable network-manager
sudo systemctl enable systemd-networkd
sudo reboot

3 DHCP向けにネットワークを設定する

DHCP向けにネットワークを設定します。

3.1 "Settings"でDHCP向けにネットワークを設定する

"Settings"を開き、"Network"の"Wired"を編集します。

"IPv4 Method"を"Automatic (DHCP)"に変更します。 "DNS"を空にします。

0011_Settings-dhcp.png

3.2 /etc/network/interfacesでDHCP向けにネットワークを設定する(非推奨)

/etc/network/interfacesでDHCP向けにネットワークを設定します。この方法だと配布されたホスト名とDNSサーバが反映されません。

#!/bin/sh

INTERFACE=ens3
cat <<EOF | sudo tee /etc/network/interfaces
auto lo
iface lo inet loopback
auto ${INTERFACE}
iface ${INTERFACE} inet dhcp
EOF

3.3 nmtuiでDHCP向けにネットワークを設定する

nmcliでDHCP向けにネットワークを設定します。

$ sudo nmtui

nmtuiが起動します。 Ctrl + p、Ctrl + n、TAB等でも移動できますが、矢印キーでの移動が簡単でしょう。選択するにはENTERキーを押します。

"Edit a connection"を選択します。

0012_nmtui-dhcp-NetworkManagerTUI.png

"Ethernet"のコネクション"Wired connection 1"を選択します。

0013_nmtui-dhcp-EditAConnection.png

コネクションが存在ない場合は"Add"で"Ethernet"を選択して作成します。 "Profile name"を入力し、"Device"にネットワークインターフェース名か MACアドレスを入力します。

0014_nmtui-dhcp-AddAConnection.png

0015_nmtui-dhcp-InputNameAndInterface.png

"IPv4 CONFIGURATION"の右を選択して"<Automatic>"に変更します。 "Addresses"、"Gateway"、"DNS servers"、"Search domains"にて全て "<Remove>"を選択します。

0016_nmtui-dhcp-IPv4Automatic.png

画面下部の"<OK>"を選択します。

0017_nmtui-dhcp-EditConnectionOK.png

画面下部の"<Back>"を選択します。

0018_nmtui-dhcp-Back.png

画面下部の"<Quit>"を選択します。

0019_nmtui-dhcp-Quit.png

3.4 nmcliでDHCP向けにネットワークを設定する

nmcliでDHCP向けにネットワークを設定します。スクリプトで自動化する場合はnmtuiではなくこちらを使います。

インストール直後だと"Wired connection 1"が作成されています。

$ nmcli -t -f NAME con
Wired connection 1

コネクションが存在しない場合はnmcli connection addで追加します。

#!/bin/sh

INTERFACE=ens3
CONNECTION_NAME=$(nmcli -t -f NAME connection)
if [ -z "${CONNECTION_NAME}" ]; then
  CONNECTION_NAME='Wired connection 1'
  sudo nmcli connection add con-name "${CONNECTION_NAME}" \
       type ethernet \
       ifname ${INTERFACE}
fi

nmcli connection modifyで静的にネットワークを設定します。

#!/bin/sh

sudo nmcli connection modify "Wired connection 1" \
     ipv4.method auto
sudo reboot

3.5 systemd-networkdでDHCP向けにネットワークを設定する

systemd-networkdでDHCP向けにネットワークを設定します。

#!/bin/sh

INTERFACE=ens3

cat <<EOF | sudo tee /etc/systemd/network/${INTERFACE}.network
[Match]
Name=${INTERFACE}

[Network]
DHCP=yes
EOF

sudo systemctl disable network-manager
sudo systemctl enable systemd-networkd
sudo reboot

3.6 DHCPから配布されたDNSサーバを使わずに静的にDNSサーバを設定する

DHCPサーバから配布されたDNSサーバの192.168.11.2を使わず、DNSサーバを 8.8.8.8に変更します。 /etc/network/interfacesでDHCP向けにネットワークを設定していた場合はこの手順を使用できません。

$ systemd-resolve --status ens3
Link 2 (ens3)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.11.2
          DNS Domain: hiroom2.com

"Settings"の"Network"でDNSサーバを設定しても、以下のようにDHCPサーバから配布されたDNSサーバと"Settings"の"Network"で追加したDNSサーバの2 つになってしまいます。

$ systemd-resolve --status ens3
Link 2 (ens3)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.11.2
                      8.8.8.8
          DNS Domain: hiroom2.com

nmcliでDHCPサーバから配布されたDNSサーバを反映させないようにします。

#!/bin/sh

sudo nmcli con mod 'Wired connection 1' \
     ipv4.ignore-auto-dns yes \
     ipv4.dns "8.8.8.8" \
     ipv4.dns-search "hiroom2.com"
sudo reboot

以下のようにDNSサーバが8.8.8.8のみに変更されました。

$ systemd-resolve --status ens3
Link 2 (ens3)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 8.8.8.8
          DNS Domain: hiroom2.com