Chap-19. 各種ディストリのネットワーク設定(IP address や resolver)

2021-07刷新

 UNIX系OSで、IPアドレスやリゾルバーの管理って、管理の中でも中枢に近い重要項目です。
以前、このチャプタはディストリごとに書いていました。が、むしろ「管理形態(管理手法)の違い」ごとに書いたほうが良いかなあ・・・なんて思い至りました。なので、書き直します。
これ以前に書いていたことは、チャプター末に示す旧ファイルにあります。今となってはあまり参考にならないと思いますが・・・
こういう「適当に思いついたら書き直す」発想は趣味的にやっているウェブサイトならでは、です、笑。
Sec-1.管理形態(管理手法)の分類
Sec-2.ものすごく古いやり方
Sec-3.Script 等による管理の、最近のやり方
Sec-4.NetworkManager による管理
Sec-5.Wicd による管理
Sec-6.connman による管理
Sec-7.その他

 なお、UNIXマシンっぽく管理するイメージとは、すなわち有線・無線とも IP address、netmask、gateway、nameserver、searchlist を管理するイメージです。
外部にノート PC を持ち出して wifi 利用するイメージ(Windowsっぽい使い方)では書いていません。その場合には、DHCP 利用で、なおかつ searchlist は管理しないと思います。




Sec-1.管理形態(管理手法)の分類 

 まず、ネットワーク管理の形態を適当に分類した表を示します。

net-mana

一行目は、実際にディストリで使われているやり方ではありません。あくまで参考。

以下のセクションで順に説明していきます。







Sec-2.ものすごく古いやり方 

 昔・・・30年くらい前、IP アドレスを決め、ルーティングを決めるのに、コマンドでやってました。
当時は、ifconfig と route コマンドでした。今は ip コマンドです。

# /usr/bin/ip  link  set  enpXs0  up
# /usr/bin/ip  addr  add  192.168.x.y/24  dev  enpXs0
# /usr/bin/ip  route  add  default  via  192.168.n.m  dev  enpXs0

x、y、n、m、X は適当に自分のサイトのヤツ
こんな感じに打ち込めば、インターフェイスの設定が出来ます。なので、/etc/rc.local の中でこれをやります。
なお、このやり方の場合、/etc/resolv.conf はエディターで書きます。普通に書くだけ。

 補足:昔のやり方、ifconfig だと速度を指定していたような気がします。確か media 100Base とか。
で、ip コマンドで速度指定しなくて良いのか、ちょっと気になりました。$ man ip | grep media とか $ man ip | grep Media とかやっても、何も出てきません。速度指定する方法は無いのだろうか?
直接的に速度を計測して確かめてみました。

$ speedtest-cli --list | grep Japan
 6766) JAIST(ino-lab) (Nomi, Japan) [132.41 km]
 6087) Allied Telesis Capital Corporation (Fussa-shi, Japan) [137.30 km]
 8407) Allied Telesis Capital Corporation (Sagamihara, Japan) [150.26 km]
24333) Rakuten Mobile , Inc (Tokyo, Japan) [167.63 km]

・・・・・一杯出てくる・・・・

一番上で実行

$ speedtest-cli --server 6766
Retrieving speedtest.net configuration...
Testing from NTT (60.41.220.62)...
Retrieving speedtest.net server list...
Retrieving information for the selected server...
Hosted by JAIST(ino-lab) (Nomi) [132.41 km]: 28.624 ms
Testing download speed................................................................................
Download: 272.49 Mbit/s
Testing upload speed......................................................................................................
Upload: 273.36 Mbit/s

こんな感じになったので、Gigaでちゃんと設定されているようです。ホッ・・・
GUI のツールで計測して早いときで 290Mbps くらいなのでマアマア良いと思います(笑)。


 今更、こんなやり方使うことは無いと思います。でも一度やっておくとネットワーク管理のごく基本を初歩から理解できると思います。
それに、なんともならなくなったとき、手動でこのコマンドを打ち込めばネットワーク設定が出来ます。いざというとき、役に立つ・・・かもしれません、笑。
なお、こんなやり方では Wifi への対応は難しいと思います。




Sec-3.Script 等による管理の、最近のやり方 

 このやり方で思い浮かぶのは

他にもあるかもしれませんが、私が思いつくのは、概ねこんなところです。順にいきます。


**** Debian + CUI インストール ****
 ブートアップ時に /etc/network/interfaces ファイルを見て、それでOSがネットワーク設定しています。
例えば、DHCP でインストールすると、以下のような具合です。

auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enpXXs0
iface enpXXs0 inet dhcp

これを以下のように書き換えてリブートすると静的 IP アドレスに変わります。注:XXはインターフェイス固有の番号

auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enpXXs0
iface enpXXs0 inet static
      address 192.168.x.y
      netmask 255.255.255.0
      gateway 192.168.z.w
(注:XX x  y  z  w は適当においた)

簡単です。
Debian のこのやり方の場合、リゾルバーの設定(/etc/resolv.conf)はエディタで編集・管理します。
想像ですが、おそらくOSがネットワーク設定をやる際、最終的には Sec2.のように ip コマンドを使っていると思われます。確認はしてませんが、笑。

なお、少し前の MXLinux、antiX もこのやり方でした。上記以外に dns-nameserver というキーワードと、dns-search というキーワードが使えました。前者はネームサーバの指定、後者はリゾルバーにサーチリストを与えるやりかた、、、でした。
過去形で書くのは、今は両者ともこのファイルを使っていないからです。それは別途、そのディストリのチャプタで説明。



**** Ubuntu + CUI インストール ****
 Ubuntu を CUI (サーバモード)でインストールすると、ネットワーク関係は /etc/netplan/ というディレクトリに収納されたファイルで管理します。つまり、ブートアップ時にこのディレクトリ内のファイルを見て、システムがネット関係の設定をやっています。
ディレクトリの中を見ると初期設定ファイルがあったりします。

 自分が設定するファイル名称は /etc/netplan/99-hoge.yaml などとするのが良いらしいです。
このディレクトリ、たくさんの設定ファイルが入るかもしれない。でも、番号順にシステム設定情報を上書きしていくらしい。なので初期設定のものはいじらないで、99などとして自分の設定を書くこと・・・だそうです。ネット検索したら、そう書いてありました、笑。
それで、自分の設定が反映されるようになります。
22.04 を固定IPアドレスにしてインストールした例です。変更するときはこれをベースにいじれば良いと思います。

例:

network:
  ethernets:
    enp*s0:
      addresses:
      - 192.168.0.x/24
      gateway4: 192.168.0.y
      nameservers:
        addresses:
        - 192.168.0.z
        search:
        - quinos.net
  version: 2
(適当に*とかx, y, z とかしてます)


私はUbuntuサーバを実運用したことがありませんので、これくらいにしておきます。詳しく知りたい方はネット検索してください。



**** Slackware ****
 まず、Slackware のスクリプトがわかる図を下に貼ります。Slack7.xか12.xか、いつの時代のか忘れましたが、10年以上前に作った自作メモを画像化したものです。今はちょっと違うかもしれないけど・・・汗

slack-scrpt

ようするに rc.M の中で rc.inet1 を実行していて、その rc.inet1 の中で rc.inet1.conf を読んでいて、その rc.inet1.conf の中にIPアドレスとか gateway 等が書かれているってことです。なので、そのファイルを編集すれば IP address, netmask, gateway が管理出来ます。
(図では rc.inet2 の中で読んでいるように見えますが、作図下手です。読んでるのは rc.inet1 です)
/etc/resolv.conf は、確か、、、エディタで編集していたと記憶しています。
こういうもんだ、と分かれば管理はごく簡単です。(と、最近使っていないくせに書いています、汗)


以上、いま風のスクリプト利用の管理の仕方を3パターン書きました。いずれも wifi への対応は難しいと思います。多分、無理






Sec-4.NetworkManager による管理 

 ようやく、スクリプト利用ではなくいま風のツールを使った管理形態です(笑)。ここらへんからは Wifi にも対応出来ます。
よほど腕の良い人はSec2.とかSec3.とかでも Wifi 対応できるかもしれませんが、私は無理!

 NetworkManager について、気がついた点を列記しておきます。

こんなところだと思います。GUI での設定例は省略。見ればすぐわかります。



CUI で nmcli を使う例を以下に示しておきます。サンプルです。

# nmcli connection edit

(上記のように入力すると、下の質問が来るので、ethernet または 802-3-ethernet と入力する)

接続タイプを入力してください: ethernet  (<<ーー入力したところ)

(?を入力するとコマンド一覧が出る)

nmcli> ?  (<<ーー入力したところ)
------------------------------------------------------------------------------
---[ メインメニュー ]---
goto   [<setting> | <prop>]        :: 設定またはプロパティーに移動する
remove  <setting>[.<prop>] | <prop>    :: 設定を削除する、またはプロパティー値をリセットする
set    [<setting>.<prop> <value>]    :: プロパティー値を設定する
describe [<setting>.<prop>]         :: プロパティーの説明を表示する
print   [all | <setting>[.<prop>]]      :: 接続を出力する
verify  [all | fix]              :: 接続を検証する
save   [persistent|temporary]       :: 接続を保存する
activate [<ifname>] [/<ap>|<nsp>]      :: 接続をアクティベートする
back                    :: ひとつ上のレベルに移動する (戻る)
help/?  [<command>]           :: このヘルプを表示する
nmcli  <conf-option> <value>       :: nmcli 設定
quit                    :: nmcli を終了する
------------------------------------------------------------------------------
nmcli> print ipv4  (<<ーー ipv4の状態を出力する。ここを編集する)
['ipv4' 設定値]
ipv4.method:                            auto
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       ""
ipv4.dns-priority:                      0
ipv4.addresses:                         --
ipv4.gateway:                           --
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.ignore-auto-routes:                いいえ
ipv4.ignore-auto-dns:                   いいえ
ipv4.dhcp-client-id:                    --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                はい
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.never-default:                     いいえ
ipv4.may-fail:                          はい
ipv4.dad-timeout:                       -1 (default)

(下で、入力しているところ。最後に save する)

nmcli> set  ipv4.method  manual
nmcli> set  ipv4.addresses  192.168.x.y/24
nmcli> set  ipv4.gateway  192.168.z.w
nmcli> set  ipv4.dns  192.168.0.A
nmcli> set  ipv4.dns-search  quinos.net
nmcli> save

こうしてセーブすれば作業完了。
この後は、# systemctl restart NetworkManager もしくは # reboot
これで、IPaddress、netmask、gateway、/etc/resolv.conf の中の nameserver、search(サーチリスト)が管理されます。




Sec-5.Wicd による管理 

 Debian 10.xで、LXDE を単体(他の DE を入れずに)インストールすると、Wicd がインストールされていました。これは Debian 11 になって変わりました。今(Debian 11 + LXDE)は connman がインストールされていて、それでネットワーク管理します。
また、2019頃の SUSE は Wicd での管理がデフォルトでした。今は NetworkManager での管理がデフォルトになっています。
こんな具合で、Wicd をデフォルトで使うディストリはほぼ消滅ぎみですが・・・
Devuan 3.1.1 Xfce をインストールしたら、Debian 10.x LXDE と同じやり方でした。wicdがインストールしてあり、当初は interfaces、resolv.conf を使ってネットワーク管理するやり方でした。
なので、少しふれてみます。

Devuan 3.1.1 で見てみます。/etc/wicd/ ディレクトリの中は以下の具合。

$ ls -l
合計 24
-rw-r--r-- 1 root root 931 7月 29 09:46 dhclient.conf.template
-rw-r--r-- 1 root root 931 1月 26 2016 dhclient.conf.template.default
drwxr-xr-x 3 root root 4096 7月 29 09:31 encryption
-rw------- 1 root root 485 7月 29 13:47 manager-settings.conf
drwxr-xr-x 6 root root 4096 7月 29 09:31 scripts
-rw------- 1 root root 378 7月 29 13:49 wired-settings.conf
-rw------- 1 root root  0 7月 29 13:47 wireless-settings.conf

また、wired の当初設定は以下の具合です。無効化してあるのが分かります。

# cat wired-setting.conf
[wired-default]
afterscript = None
use_static_dns = False
dhcphostname = HOGEHOGE
postdisconnectscript = None
dns3 = None
ip = None
search_domain = None
encryption_enabled = False
dns1 = None
dns_domain = None
broadcast = None
default = 1
netmask = None
dns2 = None
beforescript = None
profilename = wired-default
predisconnectscript = None
gateway = None
use_global_dns = False



 ここで Devuan 3.1.1 の場合、interfaces ファイルの中で lo 以外をコメントアウトしてから wicd の管理用 GUI ツールをクリックします。下の図、右の方にあるヤツが wicd 管理用 GUI ツールです。

devuan-00

このように管理画面が出ます。プロパティをクリックすると右の具合。IPaddress 等やリゾルバー関係が管理できるのがわかります。

devuan-01 devuan-02

wicd の場合は、どうやらデーモンをリブートしたり、システムをリブートしたりする必要がなさそうです。単に ok をクリックすると、直ちに値がシステムに反映されます。
動きは安定した感じで、けっこう扱いやすそうです。
お試しは有線LANでやりましたが、ディレクトリの中にはWifi用の設定ファイルもあるので、当然 wifi も管理対象です。


ここで示したものが wicd を使う全てののディストリ(他にあるかどうか、知りませんが・・・)で通用するかどうかは、分かりません。あくまで Devuan の場合ってことです。
Sec-6.に示す connman と違ってリゾルバーも普通に管理できるのは良いと思います。




Sec-6.connman による管理 

 Debian 10.x に LXQT を単体インストールすると connman でネットワーク管理するやり方でした。また Debian 11 では LXDE 又は LXQT の単体インストールが connman での管理です。(メジャーな Xfce や GNOME 等は NetworkManager 利用)
メモリー消費の少ない DE で使われているので、NetworkManager よりも省メモリ(少メモリ)な GUI ツールと想像されます。
名前が connman なので connection manager かと思いましたが、 $ man connman すると Network management daemon とかって書いてあるので、それが名称らしいです。似たような名前が多いのでまぎらわしいです。
例によって特徴を列記します。



以下で Debian の LXDE と LXQT を例に、ごくごくごく、簡単に説明します。ほんのチョイ問題ありです。



LXDE の場合
左下のメニュー、設定、Connman Settings と進む。下の画面となる。

deb11-lxde-sccho01

ここで歯車(設定ボタン)を押すと、下の画面

deb11-lxde-sccho02

ここから IPv4 をチェックして値を入れれば、IPaddress、netmask、gateway が管理できそうに見えます。
また、Nameservers、Domainsをチェックして値を入れれば、それぞれ /etc/resolv.conf の中のネームサーバとサーチリストが管理できそうに見えます。
が、管理できるのは IPv4 の方だけでリゾルバーがなんともなりません。値を変えても /etc/resolv.conf に反映されません。
connman をリスタートしても、システム・リブートしても駄目。
 やむなく、エディタで /etc/resolv.conf を編集してリブートすると、何故か当初インストールした時のものに書き直されてしまいます。
ようするにリゾルバーの設定については、当初インストール直後にOSが設定した状態から変更することが不可能です。
ここでは問題を上げるだけにして、対策は末尾に書きます。





LXQT の場合
 左下のメニュー、インターネット、Connman UI Setup と進む。下の画面になる。

deb11-lxqt-scsho01

右下の Configration を押す。すると下の画面。

deb11-lxqt-scsho02

 LXDEと同様です。IPv4関係(IPaddress、netmask、gateway)は変更できますが、リゾルバーの挙動を管理出来ません。無理。対策は下記。


注:私のやり方が下手なのか、あるいはインストールに失敗しているだけかもしれません。おかしい原因は不明です。






対策1.Sec-3. のやり方に移行(DHCP、Static IPadress どちらでも)
 対策としては単純にやります。connman を止めて、上記 Sec-3. の管理に移行します。それならエディターがあれば思いどおりに管理出来ます。簡単です。
以下のように connman を止めるだけです。

# systemctl disable connman
# systemctl stop connman  

これでSec-3.の管理に移行出来ます。Sec-3.に書いたとおり、Debian なら /etc/network/interfaces、/etc/resolv.conf の2つのファイルで管理します。
これは、有線 LAN の場合に限定したやり方と思います。



対策2.Sec-4. のやり方に移行(DHCP、Static IPaddress どちらでも)
 connman を止めて、/etc/network/interfaces ファイルで lo 以外のところをコメントアウトして、その後 NetworkMamager 関係のパッケージを入れ、動かすだけです。

# systemctl disable connman
# systemctl stop connman  

# apt install network-manager network-manager-gnome

(既に /etc/network/interfaces フィアルは編集ずみとします)

もしもうまく NetworkManager が動いていないようなら、システムリブートします。
これで、NetworkManagerによる安定した管理に移行できます。
これは、有線 LAN でも Wifi でもいけるやり方です。



対策3.connman であくまで行く場合(DHCP、Static IPaddress どちらでも)
 ようするにリゾルバーが制御出来ないだけなので、無理やり/etc/resolv.conf を自分が思っているように書き換えます。
やり方は簡単です。/etc/rc.local の最後に以下のように書くだけ。/etc/resolv.conf.my は自分がこうしたいと思っているものを書いておくファイルです。
(/etc/rc.local の動かし方は Debian のところ、Chap-13. Sec-3.に書いています)
なお、あくまで connman で行く場合も、/etc/network/interfaces の中のローカルループバック以外(lo 以外)はコメントアウトしておきます。

#### end of rc.local ###
sleep 10
cp /etc/resolv.conf.my /etc/resolv.conf
####

要するに、システムがブートアップ時にいろいろ初期設定をやります。それが一段落して終わった頃を見計らって、システムに気づかれないようにコッソリ書き直すってやり方です。姑息(笑)ですが、うまくいきます。

 リゾルバーを制御出来ないのが、私のマシンだけの固有の問題なのか、常におかしいのかわからないので、もしもおかしかったら上記を参考にしてください。おかしくなければこのSec-6. は無視してください。




Sec-7.その他 

 ネット検索すると、他に netctl、Wifi Radar などという管理デーモンがあるようです。これついては、具体的な使用例を知りません。なので書けません。



以前のチャプタを下記に示します。そもそも整理整頓がうまく出来ていなくて、くちゃくちゃ。見づらいと思います。
自分の認識としては、書き直した今回のもののほうがマシだと思います。

https://www.quinos.net/topicj/topicj.01.html