我们正在尝试向 FreeBSD 系统添加静态 ARP 条目。这适用于例如,
ARP-S 172.16.16.9 11:54:33:A8:B2:6B
. 我们已将此添加到启动脚本中以在重新启动后继续存在。到目前为止,一切都很好。
但是,如果物理链路被循环,永久 ARP 条目也会被刷新。有谁知道
一个。防止这种情况的好方法或
湾。重新添加链接的好方法或
C。一个更好的方法?
我们正在尝试向 FreeBSD 系统添加静态 ARP 条目。这适用于例如,
ARP-S 172.16.16.9 11:54:33:A8:B2:6B
. 我们已将此添加到启动脚本中以在重新启动后继续存在。到目前为止,一切都很好。
但是,如果物理链路被循环,永久 ARP 条目也会被刷新。有谁知道
一个。防止这种情况的好方法或
湾。重新添加链接的好方法或
C。一个更好的方法?
与 FreeBSD 成为朋友
你似乎在一条部分正确的道路上。我认为您对 Unix 有很多了解,但对实际的 FreeBSD 系统了解不多。我猜测的原因是您使用它的方式与 FreeBSD 中 rc.d 的典型用户略有不同。
我觉得这个问题有点薄,因为我个人宁愿追查为什么 arp 会丢失。但我们得到的信息很少。相反,我们会直接下结论。然而,他们确实提出了一些关于如何在 FreeBSD 上做事的有趣问题。请记住我们最终可能会使用扳手作为锤子的巨大警告购买者。
编写rc脚本
FreeBSD 启动脚本存在,
/etc/rc.d
但您不应该在那里创建任何东西,而是将该目录留给操作系统。否则,您可能会在更新期间覆盖您的内容。如果您想编写自己的启动/守护程序/服务脚本,那么最好的位置是/usr/local/etc/rc.d
推荐的文件位置记录在hier
而不是从头开始编写所有东西,您可以通过阅读BSD 中的实用 rc.d 脚本来获得很多帮助函数
/etc/rc.conf.d/*
您在评论中询问是否可以在
/etc/rc.conf.d/*
. 请不要这样做。这里的文件是在启动时获取的——但是这个目录的目的是有一些带有配置设置的小片段(参见rc.conf)。大多数人只是简单地使用该文件/etc/rc.conf
来配置系统选项 - 但您可以将它们分成小段并将它们放入/etc/rc.conf.d
,即使它并不常见。最好将更通用的 statup 脚本放在 仍然受支持的/etc/rc.local中。但我仍然建议创建一个适当的 rc 脚本并将其放入
/usr/local/etc/rc.d
如果您想完全忽略 rc 脚本,另一种在引导时启动通用脚本的常用方法是在crontab中使用 @reboot 关键字
然而,我会说您不需要创建新的 rc 脚本,因为该功能已经存在。
静态ARP
静态 arp 实际上是有据可查的——然而它非常简单。“缺失”的文档可能是 rc 脚本的处理方式。它记录在rc.conf中:
这意味着您可以通过将这些行添加到 /etc/rc.conf(我建议使用sysrc命令)添加 3 个静态 arp 条目,这些条目将在重新启动后仍然存在:
或者在您的特定情况下:
处理这个的脚本是操作系统的一部分,
/etc/rc.d/static_arp
并且非常简单。它只支持“开始”和“停止”命令。您可以使用以下方式从任何地方调用它:
但我更喜欢使用service命令:
如果出于某种原因您想编辑/更改
/etc/rc.d/static_arp
,那么请不要!Root 是无所不能的,你可以做你想做的事——但你冒着被替换的风险。您应该做的是cp /etc/rc.d/static_arp /usr/local/etc/rc.d/mystatic_arp
将修改后的版本放在那里。注意名称更改并确保它反映在脚本中!回收物理链路
如果您习惯于其他系统,您可能只是使用 ifconfig 来启动/关闭接口。但在 FreeBSD 上,您应该考虑使用:
老实说,我还没有测试这是否也会带来 static_arp 。或类似的东西:
但是循环物理链接可能会(不)插入电缆?同样,我不确定 arp 表会发生什么。我希望它仍然存在,因为我们没有在管理上关闭界面。
更新:@namezero 在评论中确认使用 static_arp 设置的 arp 整体确实可以在物理断开连接中存活。
但是我们应该进一步研究一下,以充分了解您的情况。这就是我能回答的最接近的答案“a.防止这种情况的好方法”
cron
如果我们没有收到有关物理链接的通知 - 那么我认为没有比监控它更好的方法了。如果我们保持脚本简单——那么我们可以将它留给常规的 cron。
devd 救援
如果我们能够看到操作系统的变化,那么我们就有了一条不错的前进道路。设备状态更改守护程序devd派上用场。缺少您的描述,因此我将假设我们有 LINK_UP 或 LINK_DOWN 可以采取行动。
使用以下内容创建文件 /etc/devd/interface.conf:
这将通知您网络接口 em0 和 em1。
所以它可以很简单:
然而,这对我来说确实有点麻烦,因为我会花更多时间来发现为什么缺少 arp 条目。但我希望这些不同的指针能让你朝着“某些”方向前进。
概括
这将我们带到了这个候选名单,它概述了如何使用 FreeBSD 过上更幸福的生活:
/etc/rc.conf