데비안은 정전 후 유선 이더넷 연결이 끊어졌습니다

데비안은 정전 후 유선 이더넷 연결이 끊어졌습니다

나는 헤드리스 데비안 홈 서버를 가지고 있습니다(Jessie, 8.9). 가끔 정전이 발생하는 경우가 있습니다. 문제는 전원이 다시 들어올 때 라우터가 데비안 서버만큼 빨리 부팅되지 않는다는 것입니다. 라우터는 부팅하는 데 1분 이상 걸리지만 서버는 약 10초 만에 부팅됩니다.

인터페이스 초기화에서 링크가 없음(라우터 부팅이 완료되지 않았으며 아직 연결을 허용하지 않음)이 감지된 후 내 서버가 새 이더넷 링크 요청을 시작하지 않습니다. 데비안에서 고정 IP 설정을 사용하고 있습니다.

나중에 다시 확인하거나 라우터가 부팅을 마치고 연결을 수락할 때까지 초기화를 지연하도록 인터페이스를 구성하려면 어떻게 해야 합니까?

답변1

Debian 서버에 고정 IP를 설정하는 대신 라우터의 DHCP 서버를 통해 고정 IP를 설정할 수 있습니다.

일부 라우터에는 더 많은 옵션이 있고 일부는 적습니다. 그러나 일반적으로 하나 이상의 동적 IP 풀과 최소한 몇 개의 고정 IP를 갖도록 라우터 DHCP 서버를 설정하는 것이 가능합니다. 이렇게 하면 클라이언트 대신 DHCP 서버에서 고정 IP가 할당됩니다.

내 홈 네트워크에서는 백업 넷북에서 실행되는 isc dhcp 서버를 설정하고 라우터의 다소 제한된 dhcp 서버를 껐습니다. 누군가가 인터넷을 사용할 때마다 홈 서버가 항상 실행되고 있다면 해당 서버에서 LAN DHCP를 실행할 수 있습니다.

이렇게 하고 ISC DHCP(권장)를 사용하기로 결정한 경우 다음과 같이 /etc/dhcpd.conf를 통해 고정 IP 호스트를 쉽게 설정할 수 있습니다.

subnet 192.168.6.0 netmask 255.255.255.0 {
        pool {range 192.168.6.129 192.168.6.190; }
}

host workstation {
        hardware ethernet f4:8d:14:5c:4b:6a;
        fixed-address 192.168.6.60;
}

0.129~0.190의 적절한 크기의 동적 풀과 0.60의 고정 IP를 제공합니다.

아니면... 라우터에서 비슷한 작업을 수행할 수도 있습니다.

답변2

정적 임대를 사용하는 DHCP는 좋은 옵션입니다(저도 사용합니다).

그러나 나에게 또 다른 일이 일어났습니다.

Debian Jessie는 Upstart를 사용합니다.

  • Upstart를 사용하면 물리적 연결이 열려 있는 동안 net init을 수행할 수 있습니다.

또는... 스크립트를 작성하는 경우:

  • 핑 라우터 - 성공하면 종료
  • ping에 실패하면 ifdown 및 ifup을 수행합니다.
  • 로그인되어 있는지 확인해 보세요(그렇다면 ifdown이 실행되지 않습니다).
  • 이 스크립트를 상당히 정기적으로 실행하십시오(cron에서는 2분 또는 10분마다).

답변3

주기적으로 라우터에 ping을 보내는 스크립트를 작성했습니다. ping이 실패하면 짧은 지연 시간을 ifdown두고 ifup인터페이스 복원을 시도합니다.

인터페이스가 다운된 경우 라우터에 대한 ping이 작동하지 않으며, ifup이전에 인터페이스가 제대로 다운되지 않은 경우에도 라우터에 대한 ping이 작동하지 않습니다 ifdown.

이 스크립트는 다음을 기반으로 합니다.이것질문에 대한 최고의 답변입니다.

#!/bin/bash

timeout=30
pingip='192.168.1.1'
iface="eth0"
LOG_FILE="/var/log/pinglog"
isdown=0

while true; do
        LOG_TIME=`date +%b' '%d' '%T`
        if ! ping -q -c 2 "$pingip" >> /dev/null ; then
                if [[ "$isdown" -eq 0 ]]; then
                        isdown=1
                        timeout=0
                        printf "$LOG_TIME $0: Interface %s is down!\n" "$iface" | tee -a $LOG_FILE
                fi
                ifdown $iface
                sleep 1
                ifup $iface
        else
                if [[ "$isdown" -eq 1 ]]; then
                        isdown=0
                        timeout=30
                        printf "$LOG_TIME $0: Interface %s is up!\n" "$iface" | tee -a $LOG_FILE
                fi
        fi
        sleep "$timeout"
done

관련 정보