bokumin

bokumin's net

デーモン不要の超軽量ネットワーク接続法

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コマンドでネットワークを管理する方法は、システムの透明性と制御性を高め、「必要最小限」の原則に忠実なものになっています。

 

特にサーバー環境や組み込みシステムでは、余計なプロセスを排除することでセキュリティリスクの低減、リソース効率の向上、そしてシステム全体の安定性向上につながります。つまりシンプルは最高で最強ということです。

 

最終的には、各自の環境やニーズに合わせて最適な方法を選択することが重要ですが、裏で何が起きているのかわからないブラックボックス的なシステムよりも、シンプルで透明性の高い方法を選ぶことで、真の意味でコンピュータを「自分のもの」として扱うことができると思っています。

 

おわり