ListenAddressがWireguard VPN IPに設定されている場合、SSHは起動しません。

ListenAddressがWireguard VPN IPに設定されている場合、SSHは起動しません。

wg0wireguardというネットワークがあるとしましょう10.0.0.1/24。起動時にsystemdを使用して起動します。

# systemctl enable wg-quick@wg0

10.0.0.1sshdは.netではなくwireguardアドレスでのみリッスンしたいと思います0.0.0.0。だから私は次のようにListenAddress設定しました/etc/ssh/sshd_config

ListenAddress  10.0.0.1
#ListenAddress  ::
AddressFamily  inet

ノート:ここではIPv6ではなくIPv4のみを使用するため、アドレス系列を設定しました。設定しないと、sshは::IPv6を受信し続けます。

設定を保存してsshdを再起動すると、正常に動作します。しかし、サーバーを再起動した後もsystemdでsshを有効にしても、まだ起動できませんでした。システムログ出力は理由を伝えます。

sshd[xxx]: error: Bind to port 22 on 10.0.0.1 failed: Cannot assign requested address.

明らかに、Wireguardインターフェイスが準備される前にsshdが起動しようとし、失敗する競合状態があります。

確実な解決策は、編集して/etc/systemd/system/sshd.service依存wg-quick@wg0関係として追加することです。しかしAfter=、、、Wants=またはの組み合わせではRequires=問題は解決されません。wg-quick@wg0ネットワークインタフェースが実際にまだ準備されていないにもかかわらず、完了していると報告しているようです。

答え1

sys-devices-virtual-net-XXX.device依存関係としてリストされている場合、Systemdはインターフェイスが準備されるのを待ちます。したがって、sshdがwg0インターフェイスを待つようにするには、次の[Unit]セクションに次の行を追加します/etc/systemd/system/sshd.service

After=network.target [email protected]
Requires=sys-devices-virtual-net-wg0.device

これは、Wireguard アドレスを受信するすべてのサービスで機能します。 SSH では、After=auditd.serviceの項目がAfter=スペースで区切られたり、After=複数行にあったりする必要があります。

最後に、デーモンを再ロードしてサービスを再起動します。

# systemctl daemon-reload
# systemctl restart sshd

関連情報