systemdを使用してstunnelを起動する

systemdを使用してstunnelを起動する

私のVPSには、SSHをカプセル化するためのstunnelを持つDebian 11システムがあります(理由は尋ねないでください)。

設定ファイルがあります/etc/stunnel/proxy-ssh.conf

[proxy-ssh]
cert = /etc/ssl/private/le-vps1.merlin-vrn.tk-key+fullchain.pem
accept = 1443
connect = 22

手動で起動すると、次のように起動します。

# ss -lnpt | grep -c 1443
0
# stunnel /etc/stunnel/proxy-ssh.conf
# ss -lnpt | grep 1443
LISTEN 0      128                 0.0.0.0:1443       0.0.0.0:*    users:(("stunnel",pid=10121,fd=10))

syslog次のコンテンツが含まれています。

Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: stunnel 5.56 on x86_64-pc-linux-gnu platform
Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: Compiled with OpenSSL 1.1.1k  25 Mar 2021
Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: Running  with OpenSSL 1.1.1w  11 Sep 2023
Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: Threading:PTHREAD Sockets:POLL,IPv6,SYSTEMD TLS:ENGINE,FIPS,OCSP,PSK,SNI Auth:LIBWRAP
Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: Reading configuration from file /etc/stunnel/proxy-ssh.conf
Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: UTF-8 byte order mark not detected
Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: FIPS mode disabled
Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: Configuration successful
Oct 11 09:12:02 vps1 stunnel: LOG5[ui]: Binding service [proxy-ssh] to :::1443: Address already in use (98)
Oct 11 09:12:24 vps1 stunnel: LOG5[0]: Service [proxy-ssh] accepted connection from xx.xx.xxx.xx:51104
Oct 11 09:12:24 vps1 stunnel: LOG5[0]: s_connect: connected ::1:22
Oct 11 09:12:24 vps1 stunnel: LOG5[0]: Service [proxy-ssh] connected remote server from ::1:59156
Oct 11 09:12:25 vps1 systemd[1]: Started Session 73843673 of user yyyy.

したがって、動作します(接続が許可されていることがわかります)。ポート1443でリッスンしているBinding service [proxy-ssh] to :::1443: Address already in use (98)エントリssがないことを明確に示していますが、動作を妨げないというメッセージが表示される理由がわかりません。


Debian は systemd テンプレートユニットを提供します[email protected][email protected]設定ファイルを使用してstunnelを実行するサービスを有効にして起動する必要があるproxy-ssh.confため、手動でstunnelを終了してサービスを実行しました。

# systemctl status [email protected][email protected] - TLS tunnel for network daemons - per-config-file service
     Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
     Active: inactive (dead) since Wed 2023-10-11 09:26:36 +04; 4min 55s ago
       Docs: man:stunnel4(8)
    Process: 10314 ExecStart=/usr/bin/stunnel4 /etc/stunnel/proxy-ssh.conf (code=exited, status=0/SUCCESS)
   Main PID: 10314 (code=exited, status=0/SUCCESS)
root@vps1:/var/log# ss -lnpt | grep -c 1443
0
root@vps1:/var/log# systemctl start [email protected]
root@vps1:/var/log# ss -lnpt | grep -c 1443
0

syslog以下の内容があります。

Oct 11 09:32:03 vps1 systemd[1]: Started TLS tunnel for network daemons - per-config-file service.
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: stunnel 5.56 on x86_64-pc-linux-gnu platform
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: Compiled with OpenSSL 1.1.1k  25 Mar 2021
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: Running  with OpenSSL 1.1.1w  11 Sep 2023
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: Threading:PTHREAD Sockets:POLL,IPv6,SYSTEMD TLS:ENGINE,FIPS,OCSP,PSK,SNI Auth:LIBWRAP
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: Reading configuration from file /etc/stunnel/proxy-ssh.conf
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: UTF-8 byte order mark not detected
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: FIPS mode disabled
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: Configuration successful
Oct 11 09:32:03 vps1 stunnel: LOG5[ui]: Binding service [proxy-ssh] to :::1443: Address already in use (98)
Oct 11 09:33:33 vps1 systemd[1]: [email protected]: State 'stop-sigterm' timed out. Killing.
Oct 11 09:33:33 vps1 systemd[1]: [email protected]: Failed with result 'timeout'.

「通常の初期化シーケンス」の後、失敗が宣言されるまで1.5分遅れていることに注意してください。遅れている間、サービスはいくつかの週を経て移行中でしたが、偶然にこの状態を発見しましたActive: deactivating (stop-sigterm) since Wed 2023-10-11 09:32:03 +04; 43s ago。最後に失敗状態に入ります。

[email protected] - TLS tunnel for network daemons - per-config-file service
     Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
     Active: failed (Result: timeout) since Wed 2023-10-11 09:33:33 +04; 5min ago
       Docs: man:stunnel4(8)
    Process: 10546 ExecStart=/usr/bin/stunnel4 /etc/stunnel/proxy-ssh.conf (code=exited, status=0/SUCCESS)
   Main PID: 10546 (code=exited, status=0/SUCCESS)

サービスファイルには素晴らしいものはありません。起動時に使用したのと同じコマンドです。

問題は何であり、どのように解決しますか?

答え1

これで、フォアグラウンドで実行するようにstunnelを設定する必要があることがわかりました。

foreground = yes

[proxy-ssh]
cert = /etc/ssl/private/le-vps1.merlin-vrn.tk-key+fullchain.pem
accept = 1443
connect = 22

その後、サービスはすぐに開始され、期待どおりに機能します。

関連情報