我通过以太网运行带有 pppd 的 FreeBsd 盒子。一切都运行良好,只有一个例外。有时,连接会变得陈旧,但这种情况并不常见。一切看起来都好像没问题:ifconfig 显示已启动,ppp 表示链接正常,但流量未通过。我所做的是运行killall pppd
然后手动重新启动 ppp。它重新连接,一切又恢复正常。
我的问题是: pppd (或 mpd5 或其他任何地方)中是否有一个设置,如果设置的话,会使 ppp 检测到链接已过时并自动重新连接?
如果没有这样的设置,也许还有其他解决方案?
答案1
您是否配置了以下 pppd链路控制协议选项?它们控制 pppd 是否发送 LCP 回显以及发送 LCP 回显的频率来检查链路是否仍然有效,以及如果无效则如何响应。
lcp-echo-failure n
lcp-echo-interval n
lcp-echo-adaptive
它们与以下选项结合得很好,这些选项控制 pppd 是否在终止后尝试重新启动连接、重新连接之前延迟多长时间以及失败后重新启动多少次:
persist
holdoff n
maxfail n
如果 maxfail 非零,您可能还需要一个包装脚本或 cron 作业来重新启动 pppd(如果它已完全退出)(即,失败 > maxfail 设置)。 maxfail > 0 的一个常见原因是,可以编写包装器脚本来对长时间停机等情况做出更智能的响应(而不仅仅是一遍又一遍地重试)。
有关这些和其他配置选项的更多详细信息,请参阅 pppd 手册页。
答案2
我会向 crontab 添加一个简单的 shell 脚本,该脚本会定期 ping 已知主机,并在无法访问该主机时重新启动服务。
像这样的东西:
#!/bin/sh
ping -q -c3 google.com &> /dev/null
if [[ $? != "0" ]]
then
ppp_restart_command
fi
例如,将其命名conn_check.sh
,将其添加到 crontab 并让它每 60 秒运行一次。
答案3
所以,我想出了这个解决方案。
enable lqr
set lqrperiod 5