Debian 在断电后失去有线以太网连接

Debian 在断电后失去有线以太网连接

我有一个无头 debian 家庭服务器(Jessie,8.9)。我们偶尔会遇到停电的情况。问题是当电力恢复时,路由器的启动速度不如 Debian 服务器。路由器需要 +1 分钟才能启动,但服务器会在约 10 秒内启动。

在接口初始化检测到没有链接(路由器尚未完成启动,尚不接受连接)后,我的服务器不会发起新的以太网链接请求。我在 debian 上使用静态 IP 设置。

如何配置我的接口以便稍后再次检查,或延迟初始化足够长的时间以使路由器完成启动并接受连接?

答案1

您可以通过路由器的 DHCP 服务器设置静态 IP,而不是在 Debian 服务器上设置静态 IP。

有些路由器有更多选项,有些则较少...但是,通常可以将路由器 DHCP 服务器设置为至少有一个动态 IP 池和至少一些静态 IP。这样,静态 IP 将从 DHCP 服务器而不是客户端分配。

在我的家庭网络上,我设置了一个在备用上网本上运行的 isc dhcp 服务器,并关闭了路由器相当有限的 dhcp 服务器。如果只要有人使用 Internet,您的家庭服务器就始终运行,您可能可以从该服务器运行 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 路由器 - 如果成功退出
  • 如果 ping 不成功,请执行 ifdown 和 ifup
  • 也许检查您是否已登录(如果是,则不会执行 ifdown)
  • 相当定期地运行此脚本(在 cron 中每 2 或 10 分钟运行一次)。

答案3

我编写了一个定期 ping 路由器的脚本。如果 ping 失败,则它会尝试通过调用ifdownifup短暂延迟来恢复接口。

请注意,如果接口已关闭,则 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

相关内容