在 Mac OS X 上定义持久静态路由

Cha*_*ffy 5 networking mac-osx

如何在 MacOS X 上定义一条通过重启持续存在的静态路由?我在谷歌上找到的唯一建议是设置一个启动服务以在启动时运行,这似乎是一个可怕的黑客(例如,它是否可以在不重启的情况下在网络重启后幸存下来?)

要设置我临时需要的路线,我可以运行以下命令:

route add -net ${network} ${gateway} ${netmask}
Run Code Online (Sandbox Code Playgroud)

我将如何使这种情况持续下去?

ala*_*air 2

除了启动守护进程(就像它之前的启动项一样)在这方面遇到两个重要问题:

  1. 如果系统配置重做网络配置,将会废弃您的路由。您可以通过让 launchd 定期运行您的启动守护进程来解决这个问题,但您可能仍然需要等待一段时间才能恢复您的路由。

  2. 启动守护程序和启动项都可以在某些网络接口完全配置之前运行。在这种情况下,您可能无法在那时建立路由,并且可能必须回退到等待启动守护程序的定期调用(或者在启动项的情况下,可能是针对 cron 作业)。

我刚刚在我的网站上发布了希望是更好(即更强大)的解决方案。我为其构建了一个安装程序包(下载) ;还有一些源代码,但我无法在服务器故障上发布链接,因为我还没有足够高的声誉,无法在每个帖子中放置多个超链接。

要使用它,请安装该软件包(到目前为止仅在我的笔记本电脑上进行了测试,但似乎可以工作)。它应该安装一个启动守护进程来启动“staticrouted”服务器进程(您可以在顶部检查这一点;如果它没有运行,则可能意味着我的安装程序略有错误,但您应该能够使用 launchctl 启动它通常)。

要创建静态路由,您可以使用“staticroute”程序(您可以在 /usr/local/sbin 中找到该程序)。例如

staticroute add 10.128.4.0/24 "Main Network Interface"
staticroute delete 10.192.0.0/16 "Other Interface"
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下命令查看配置的静态路由列表

staticroute list
Run Code Online (Sandbox Code Playgroud)

以及接口名称列表

staticroute list-interfaces
Run Code Online (Sandbox Code Playgroud)

配置的静态路由在重新启动后仍然有效,并且将随着网络接口的启动和关闭而自动添加和删除。

还有手册页;这些安装在 /usr/local/share/man/man8 中,因此您可能还需要将 /usr/local/share/man 添加到您的 MANPATH(如果它尚不存在)。

我应该强调的是,我今天刚刚敲出这段代码来解决由于我必须使用 cron 作业来保持静态路由到位而引起的问题。它似乎对我有用,但是 YMMV。代码和二进制文件已获得 MIT 许可。