TCPポート53、LinuxMint Victoriaでリッスンする奇妙な初期化プロセス

TCPポート53、LinuxMint Victoriaでリッスンする奇妙な初期化プロセス

実行すると、netstat -nptl次のような奇妙な結果が表示されます。

tcp        0      0 127.0.2.1:53            0.0.0.0:*               LISTEN      1/init

これはdnscrypt-proxyDoH サービスの基本構成です。

ps uww 1
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.0 166580 11936 ?        Ss   12:15   0:01 /sbin/init splash

なぜPID 1が今では意味がないのか疑問に思います。

ベストアンサー1

Linuxではより多くの情報を提供するため、usingをnetstatusingに置き換える必要があります。ssこの場合、以下を提供します。みんなソケットを共有するプロセスは、netstat最初のプロセスと同時に停止します。commname( systemd) の代わりにcmdname() を提供するなど、微妙な違いもありますinit。これはDebian 12ですが、すべてのsystemdベースのLinuxシステムは似ています。

# netstat -tnlp | awk 'NR <=2 || /127.0.2.1:/'
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.2.1:53            0.0.0.0:*               LISTEN      1/init              
# ss -nptl src 127.0.2.1
State   Recv-Q  Send-Q   Local Address:Port     Peer Address:Port  Process  
LISTEN  0       4096         127.0.2.1:53            0.0.0.0:*      users:(("dnscrypt-proxy",pid=6245,fd=8),("systemd",pid=1,fd=49))

どちらも同じソケットをsystemd共有していることがわかります。dnscrypt-proxy

なぜ?だからdnscrypt-proxy走っているけどシステム~のソケット 活性化: 同様のメカニズムイントラネットしかし、デーモンが実際に実行される前にソケットのリスニングを許可し(構成されている場合)、デーモンが最初の呼び出しで開始されるように準備するように改善されました。いつシステム サービス構成関連していますシステム ソケットの構成(ここでは十分な依存関係がありますRequires=dnscrypt-proxy.socket)これは、ソケットアクティベーションを使用していることを意味します。

# systemctl status dnscrypt-proxy.socket 
* dnscrypt-proxy.socket - dnscrypt-proxy listening socket
     Loaded: loaded (/lib/systemd/system/dnscrypt-proxy.socket; enabled; preset: enabled)
     Active: active (running) since Tue 2024-01-09 18:16:11 UTC; 23min ago
   Triggers: * dnscrypt-proxy.service
       Docs: https://github.com/DNSCrypt/dnscrypt-proxy/wiki
     Listen: 127.0.2.1:53 (Stream)
             127.0.2.1:53 (Datagram)
      Tasks: 0 (limit: 18402)
     Memory: 12.0K
        CPU: 1ms
     CGroup: /system.slice/dnscrypt-proxy.socket

[...]
# systemctl status dnscrypt-proxy.service
* dnscrypt-proxy.service - DNSCrypt client proxy
     Loaded: loaded (/lib/systemd/system/dnscrypt-proxy.service; enabled; preset: enabled)
     Active: active (running) since Tue 2024-01-09 18:38:54 UTC; 1min 20s ago
TriggeredBy: * dnscrypt-proxy.socket
       Docs: https://github.com/DNSCrypt/dnscrypt-proxy/wiki
   Main PID: 6245 (dnscrypt-proxy)
      Tasks: 12 (limit: 18402)
     Memory: 10.6M
        CPU: 60ms
     CGroup: /system.slice/dnscrypt-proxy.service
             `-6245 /usr/sbin/dnscrypt-proxy -config /etc/dnscrypt-proxy/dnscrypt-proxy.toml

[...]

ソケットの生成は、そのセクションに関連付けられたセクションを通してsystemd直接処理され、リスニングソケットは継承されます(このメソッドを知る必要があります)。.socket.servicednscrypt-proxy

このアプローチにはいくつかの利点があります。少なくとも次の2つ(他のものソケット 活性化リンク):

  • デーモンは、起動時にも特権ポートを開く権限で実行する必要はありません。
  • デーモンは、一定期間活動がなければ停止してシステムリソースを解放できます。システム新しいクエリが受信されると、接続を拒否せずに再開されます。

おすすめ記事