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

관련 정보