AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 432146
Accepted
namezero
namezero
Asked: 2018-03-20 09:49:00 +0800 CST2018-03-20 09:49:00 +0800 CST 2018-03-20 09:49:00 +0800 CST

链接循环时的 FreeBSD 静态 ARP 条目

  • 772

我们正在尝试向 FreeBSD 系统添加静态 ARP 条目。这适用于例如,

ARP-S 172.16.16.9 11:54:33:A8:B2:6B

. 我们已将此添加到启动脚本中以在重新启动后继续存在。到目前为止,一切都很好。

但是,如果物理链路被循环,永久 ARP 条目也会被刷新。有谁知道

一个。防止这种情况的好方法或

湾。重新添加链接的好方法或

C。一个更好的方法?

freebsd mac-address
  • 1 1 个回答
  • 2490 Views

1 个回答

  • Voted
  1. Best Answer
    Claus Andersen
    2018-03-21T08:28:45+08:002018-03-21T08:28:45+08:00

    与 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中:

     static_arp_pairs
         (str) Set to the list of static ARP pairs that are to be
         added at system boot time.  For each whitespace separated
         element in the value, a static_arp_<element> variable is
         assumed to exist whose contents will later be passed to a
         ``arp -S'' operation.  For example
    
         static_arp_pairs="gw"
         static_arp_gw="192.168.1.1 00:01:02:03:04:05"
    

    这意味着您可以通过将这些行添加到 /etc/rc.conf(我建议使用sysrc命令)添加 3 个静态 arp 条目,这些条目将在重新启动后仍然存在:

    static_arp_pairs="a b c"
    static_arp_a="1.2.3.4 11:22:33:44:55:66"
    static_arp_b="1.2.3.5 22:33:44:55:66:77"
    static_arp_c="1.2.3.6 33:44:55:66:77:88"
    

    或者在您的特定情况下:

    static_arp_pairs="myarp"
    static_arp_myarp="172.16.16.9 11:54:33:A8:B2:6B"
    

    处理这个的脚本是操作系统的一部分,/etc/rc.d/static_arp并且非常简单。它只支持“开始”和“停止”命令。

    您可以使用以下方式从任何地方调用它:

    /etc/rc.d/static_arp start
    

    但我更喜欢使用service命令:

    service static_arp start
    

    如果出于某种原因您想编辑/更改/etc/rc.d/static_arp,那么请不要!Root 是无所不能的,你可以做你想做的事——但你冒着被替换的风险。您应该做的是cp /etc/rc.d/static_arp /usr/local/etc/rc.d/mystatic_arp将修改后的版本放在那里。注意名称更改并确保它反映在脚本中!

    回收物理链路

    如果您习惯于其他系统,您可能只是使用 ifconfig 来启动/关闭接口。但在 FreeBSD 上,您应该考虑使用:

    service netif restart <interface>
    

    老实说,我还没有测试这是否也会带来 static_arp 。或类似的东西:

    service netif stop <interface>
    ...
    service netif start <interface>
    service routing restart
    service static_arp start
    

    但是循环物理链接可能会(不)插入电缆?同样,我不确定 arp 表会发生什么。我希望它仍然存在,因为我们没有在管理上关闭界面。

    更新:@namezero 在评论中确认使用 static_arp 设置的 arp 整体确实可以在物理断开连接中存活。

    但是我们应该进一步研究一下,以充分了解您的情况。这就是我能回答的最接近的答案“a.防止这种情况的好方法”

    cron

    如果我们没有收到有关物理链接的通知 - 那么我认为没有比监控它更好的方法了。如果我们保持脚本简单——那么我们可以将它留给常规的 cron。

    devd 救援

    如果我们能够看到操作系统的变化,那么我们就有了一条不错的前进道路。设备状态更改守护程序devd派上用场。缺少您的描述,因此我将假设我们有 LINK_UP 或 LINK_DOWN 可以采取行动。

    使用以下内容创建文件 /etc/devd/interface.conf:

    notify 0 {
        match "system"        "IFNET";
        match "subsystem"     "(em0|em1)";
        match "type"          "LINK_DOWN";
        action "/usr/local/sbin/alertme.sh $subsystem"
    }
    

    这将通知您网络接口 em0 和 em1。

    所以它可以很简单:

    notify 0 {
        match "system"        "IFNET";
        match "subsystem"     "(em0|em1)";
        match "type"          "LINK_UP";
        action "/etc/rc.d/static_arp start"
    }
    

    然而,这对我来说确实有点麻烦,因为我会花更多时间来发现为什么缺少 arp 条目。但我希望这些不同的指针能让你朝着“某些”方向前进。

    概括

    这将我们带到了这个候选名单,它概述了如何使用 FreeBSD 过上更幸福的生活:

    • 系统设置应该存在于/etc/rc.conf
    • 如果您想要自己的 rc 脚本,请将它们放在/usr/local/etc/rc.d
    • 如果您想要一个简单的启动脚本,请将其放在/etc/rc.local中(如果需要,您可以 source rc)
    • 如果您想在启动时使用真正通用的脚本,请使用 @reboot 和crontab
    • 编辑时使用sysrc/etc/rc.conf
    • 与 rc 脚本交互时使用服务
    • 使用devd作用于设备状态变化
    • 6

相关问题

  • FreeBSD w/ 两个网络接口和不同的域

  • Freebsd 11.1 问题与 gnu m4 eval 测试失败

  • Freebsd setfacl

  • ps -vxa 不对内存进行排序

  • FreeBSD 的 sh:列出函数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve