7 votos

Los servidores no enlazar a direcciones en el arranque

Estoy en contacto con un conocido problema en RHEL 7 por los servicios que especificar una dirección para enlazar a no se inicia correctamente. He encontrado una serie de informes similares, muchos de ellos dicen que han solucionado con las actualizaciones a systemd, pero todavía se enfrentan a este problema. Esto afecta a todos los servicios en mi caja (sshd, sshd, vsftpd, nginx) que no sólo se unen a 0.0.0.0.

He encontrado todo tipo de supuestas soluciones, pero ninguna de ellas funciona para mí constantemente. Tomando sshd como un ejemplo, la configuración se parece a esto:

Port 22
ListenAddress 192.168.242.225
...

Aquí es lo que he intentado, solo y en combinaciones:

De https://bugzilla.redhat.com/show_bug.cgi?id=1352214#c4 (también he intentado sys-subsystem-net-devices-eth1.device en lugar de network-online.target pero sospecho que esto no esperar para abordar a suceder.)

mkdir /etc/systemd/system/sshd.service.d
tee /etc/systemd/system/sshd.service.d/wait.conf << 'EOF'
[Unit]
After=network-online.target
EOF

De https://bugzilla.redhat.com/show_bug.cgi?id=1352214#c11

mkdir /etc/systemd/system/sshd.service.d
tee /etc/systemd/system/sshd.service.d/wait.conf << 'EOF'
[Unit]
Wants=network-online.target
After=network-online.target
EOF

De https://bugzilla.redhat.com/show_bug.cgi?id=1438749#c0

systemctl add-wants multi-user.target network.target

Desde algún lugar

mkdir /etc/systemd/system/sshd.service.requires
ln -s /usr/lib/systemd/system/network-online.target /etc/systemd/system/sshd.service.requires/

No importa lo que yo trato, yo por lo general terminan con "error: enlazar el puerto 22 en 192.168.242.125 error: No se puede asignar la dirección solicitada". A veces, todo se inicia perfectamente, que supongo que es a un problema de temporización.

Ejecución de Scientific Linux (RHEL) 7.5 y administrador de red está activado, todas las direcciones IP estáticas. Si hay otros detalles que podrían ayudar, por favor hágamelo saber. Aquí está la salida de journalctl después de un error en el inicio, con After=network-online.target en el sshd de la unidad de archivo. Pertinentes cosas comienzan a abajo, alrededor de la línea de 1700. Esperando que alguien se ha encontrado con este problema y resuelto con éxito!

5voto

Michael Hampton Puntos 88271

Puede ser mejor para no configurar los servicios del sistema para escuchar en determinadas direcciones IP, y para controlar el acceso a ellos a través del firewall de host si es necesario.

Si usted realmente necesita para ser capaz de unirse a direcciones IP específicas antes de que se han configurado en una interfaz de red, puede evitar el problema de temporización mediante el establecimiento de la sysctl net.ipv4.ip_nonlocal_bind para IPv4 y el sysctl net.ipv6.ip_nonlocal_bind para IPv6. Los servicios pueden, a continuación, enlazar las direcciones IP no se configuran en cualquier interfaz de red, pero que no será accesible hasta que las direcciones IP se configuran en una interfaz.

3voto

Si usted está utilizando el gestor de red, a continuación, en orden de network-online.target a funcionar como se esperaba, necesita habilitar el servicio NetworkManager-wait-online.service, que es el que realmente se espera de la red para estar en línea para que satisfacen destino.

El network-online.target necesita estar "enganchado" a su administrador de red (ya que NetworkManager no es la única alternativa, también hay systemd-networkd que puede ser usado para administrar la red.)

Para network-online.target trabajar con el gestor de red, usted necesita tener un enlace simbólico bajo /etc/systemd/system/network-online.target.wants/ que apunta a /usr/lib/systemd/system/NetworkManager-wait-online.service.

Que en realidad se puede crear mediante la habilitación de ese servicio:

$ sudo systemctl enable NetworkManager-wait-online.service
Created symlink from /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service to /usr/lib/systemd/system/NetworkManager-wait-online.service.

Una vez en el lugar, en las dependencias de network-online.target deben comenzar a trabajar, esperando hasta que NetworkManager se realiza la crianza de todas las interfaces que se supone que debe traer para arriba en el arranque.

Para ayudar a diagnosticar cualquier problema con la instalación, es posible que desee buscar en la salida de systemctl status network-online.target y systemctl status NetworkManager-wait-online.service como bueno, ya que podría tener más pistas sobre lo que está pasando. (En particular, las marcas de tiempo podría ser útil, si los demonios que dependen network-online.target están empezando antes de NetworkManager-wait-online.service está terminado, entonces usted podría tener un problema con su configuración).


Una de las soluciones que figuran, me gustaría recomendar este:

# mkdir /etc/systemd/system/sshd.service.d
# tee /etc/systemd/system/sshd.service.d/wait.conf << 'EOF'
[Unit]
Wants=network-online.target
After=network-online.target
EOF

Desde network-online.target es el que realmente quiere (para garantizar que todas las IPs, etc.) y incluyendo Wants= asegura de que su inicio será solicitada.

De los otros métodos, éste no funcionará: systemctl add-wants multi-user.target network.target, ya que es no crear dependencias entre los propios servicios (demonio SSH, etc.) y la red está completamente arriba. Simplemente diciendo que quiere que la red sea...

Y el de la /etc/systemd/system/sshd.service.requires/ directorio de falta de la After= de dependencia (que creo que es esencial, y no implica por sólo tener un .requires/ .) Si usted piensa Requires= es mejor que Wants= (que es más fuerte, las causas de falla de la unidad si la dependencia se produce un error), entonces te recomiendo usando sólo que en /etc/systemd/system/sshd.service.d/wait.conf en su lugar, el archivo override es sin duda una manera más flexible para administrar esta configuración.

La adición de una dependencia en sys-subsystem-net-devices-eth1.device tampoco ayuda, ya que sólo indica que el dispositivo existe (desde el punto de vista de la udev), que no dice nada sobre que es y todavía no se ha configurado. Así que no es una opción.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: