UbuntuでのIPアドレス、DNSサーバ等の設定方法について記載します。
Table of Contents
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"で静的にネットワークを設定する
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"を選択します。
"Ethernet"のコネクション"Wired connection 1"を選択します。
コネクションが存在ない場合は"Add"で"Ethernet"を選択して作成します。 "Profile name"を入力し、"Device"にネットワークインターフェース名か MACアドレスを入力します。
"IPv4 CONFIGURATION"の右を選択して"<Manual>"に変更します。その "<Manual>"の右にある"<Show>"を選択します。
"Addresses"にこのマシンのIPアドレスとサブネットを、"Gateway"にゲートウェイのIPアドレスを、"DNS servers"にDNSサーバのIPアドレスを、 "search domains"に/etc/resolv.confのsearchのドメイン名を設定します。
画面下部の"<OK>"を選択します。
画面下部の"<Back>"を選択します。
画面下部の"<Quit>"を選択します。
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向けにネットワークを設定する
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"を選択します。
"Ethernet"のコネクション"Wired connection 1"を選択します。
コネクションが存在ない場合は"Add"で"Ethernet"を選択して作成します。 "Profile name"を入力し、"Device"にネットワークインターフェース名か MACアドレスを入力します。
"IPv4 CONFIGURATION"の右を選択して"<Automatic>"に変更します。 "Addresses"、"Gateway"、"DNS servers"、"Search domains"にて全て "<Remove>"を選択します。
画面下部の"<OK>"を選択します。
画面下部の"<Back>"を選択します。
画面下部の"<Quit>"を選択します。
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