wg0
wireguardというネットワークがあるとしましょう10.0.0.1/24
。起動時にsystemdを使用して起動します。
# systemctl enable wg-quick@wg0
10.0.0.1
sshdは.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