デーモン不要の超軽量ネットワーク接続法
No Daemon Required! Ultra-lightweight Network Connection Method
はじめに
NetworkManagerやWickedといったようなネットワーク管理ツールを現在まで使っていましたが、この度IPコマンドのみで直接ネットワークに接続するという方法に変えました。サーバー環境で、リソースを切り詰めている方の参考になれば幸いです。
直接ネットワークを接続する利点
直接ネットワークに接続する方法には複数の利点があります。まず、追加のデーモンプロセスを実行しないため、メモリとCPU使用量を大幅(?)に削減することができます。また、起動時にサービスの初期化を待つ必要がなく、ネットワーク設定が即座に適用されるため、システムの起動時間が短縮されるということです。設定がOSのネットワークスタックに直接適用されて中間層による複雑さや予期せぬ動作を排除できる点も大きな利点です。さらに、追加のデーモンやサービスに依存せず最小限のツールセットのみで動作するので、依存関係を最小限に抑えることができます。自動調整による意図しない構成変更が発生しないため、予測可能な動作を実現できるのも重要なメリットの一つです。
このようなシンプルな構造化は、特にリソースが限られたサーバー環境において非常に効果的で、自宅サーバーや組み込みシステムには最適だと思います。
設定方法
実際に作成したスクリプトなどを含めて紹介します。OpenSUSE Tumbleweedはsystemdを採用しているのでsystemdユニットで行います。systemVなどでは設定が変わりますが、そちらでも簡単にinitスクリプトを作成可能です。
まず、現在動いているネットワーク管理ツールをすべて停止させます。
sudo systemctl stop wicked
sudo systemctl disable wicked
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
次に、/usr/local/binにIP接続を行うためのスクリプトを作成していきます。
$ cat /usr/local/bin/setup-network.sh
#!/bin/bash
# IPとネットマスクを設定
ip addr add 192.168.3.10/24 dev eno1
# 有効化
ip link set dev eno1 up
# デフォルトゲートウェイの設定
ip route add default via 192.168.3.1
# ネームサーバの設定
echo "nameserver 8.8.8.8" > /etc/resolv.conf
ifconfigやrouteコマンドで作成したい場合は以下のように作成します。
$ cat /usr/local/bin/setup-network.sh
#!/bin/bash
# IPとネットマスクを設定し、インターフェースを有効化
ifconfig eno1 192.168.3.10 netmask 255.255.255.0 up
# デフォルトゲートウェイの設定
route add default gw 192.168.3.1
# ネームサーバの設定
echo "nameserver 8.8.8.8" > /etc/resolv.conf
systemdにコマンドを一度だけ実行するサービス(oneshot)を作成していきます。
$ cat /etc/systemd/system/manual-network.service
[Unit]
Description=Manual Network Configuration
After=network-pre.target
Before=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/setup-network.sh
RemainAfterExit=yes
User=root
[Install]
WantedBy=network.target
作成したサービスを有効化します。
$ sudo systemctl enable manual-network.service
$ sudo systemctl start manual-network.service
作成したサービスユニットが問題なく実行されたか確認してください
$ sudo systemctl status manual-network.service
● manual-network.service - Manual Network Configuration
Loaded: loaded (/etc/systemd/system/manual-network.service; enabled; preset: disabled)
Active: active (exited) since Sun 2025-05-04 03:38:24 JST; 10h ago
Invocation: 272ca0a8300b46fc965f72285f472aa0
Process: 1550 ExecStart=/usr/local/bin/setup-network.sh (code=exited, status=0/SUCCESS)
Main PID: 1550 (code=exited, status=0/SUCCESS)
CPU: 67ms
May 04 03:38:24 hogehoge systemd[1]: Starting Manual Network Configuration...
May 04 03:38:24 hogehoge systemd[1]: Finished Manual Network Configuration.
実際にネットに繋がっているか確認して、問題がなければ完成です。
$ ip a sh dev eno1
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether f4:6d:04:3b:82:55 brd ff:ff:ff:ff:ff:ff
altname enp0s25
altname enxf46d043b8255
inet 192.168.3.10/24 scope global eno1
valid_lft forever preferred_lft forever
inet6 fe80::f66d:4ff:fe3b:8255/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
$ ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=9.90 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=9.74 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=10.2 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 9.735/9.935/10.173/0.180 ms
終わりに
近年のシステム環境では、ユーザーの利便性を高めるために多くの自動化機能や抽象化レイヤーが導入されています。しかし、こういった「便利さ」の裏では、数多くのデーモンプロセスが常に動作し、リソースを消費し続けています。個人的に、自分のシステムで何が動いているのか完全に把握し、制御できる状態を好みます。
NetworkManagerやWickedのようなネットワーク管理ツールは確かにかなり便利ですが、その便利さと引き換えに、バックグラウンドでは複雑なプロセスが動き続け、時には予期せぬ動作を引き起こすこともあります。今回紹介した直接IPコマンドでネットワークを管理する方法は、システムの透明性と制御性を高め、「必要最小限」の原則に忠実なものになっています。
特にサーバー環境や組み込みシステムでは、余計なプロセスを排除することでセキュリティリスクの低減、リソース効率の向上、そしてシステム全体の安定性向上につながります。つまりシンプルは最高で最強ということです。
最終的には、各自の環境やニーズに合わせて最適な方法を選択することが重要ですが、裏で何が起きているのかわからないブラックボックス的なシステムよりも、シンプルで透明性の高い方法を選ぶことで、真の意味でコンピュータを「自分のもの」として扱うことができると思っています。
おわり