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

如何在MacOS X上定义静态路由,并通过重新启动来保持静态路由? 我在Google上发现的唯一build议是build立一个launchd服务,在启动时运行,这似乎是一个可怕的黑客攻击(例如,它是否能够在networking重启的情况下存活)?

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

route add -net ${network} ${gateway} ${netmask} 

我会如何坚持下去?

除了启动守护进程(就像之前的启动项),在这方面有两个重要的问题:

  1. 如果系统configuration重做networkingconfiguration,它将垃圾你的路线。 您可以通过使launchd定期运行“启动守护进程”来解决这个问题,但是您可能仍然需要等待这段时间才能恢复路由。

  2. 启动后台程序和启动项目都可以在一些networking接口完全configuration之前运行。 在这种情况下,您可能无法在当时build立路线,并且可能不得不等待定期调用启动守护程序(或启动项目,可能为cron作业)。

我刚刚发布了希望在我的网站上更好(即更强大)的解决scheme。 我为它构build了一个安装程序包(下载) 还有一些源代码,但是我不能在Server Fault上发布这个链接,因为我没有足够高的声望,每个post都有超过一个的超链接。

要使用它,安装包(到目前为止只在我的笔记本电脑上testing,但似乎工作)。 它应该安装启动守护进程,启动“静态路由”服务器进程(可以在顶部检查;如果没有运行,这可能意味着我的安装程序有点不对,但是应该可以使用launchctl作为启动项通常)。

要创build静态路由,可以使用“静态路由”程序(可以在/ usr / local / sbin中find)。 例如

 staticroute add 10.128.4.0/24 "Main Network Interface" staticroute delete 10.192.0.0/16 "Other Interface" 

您也可以看到已configuration的静态路由列表

 staticroute list 

和一个接口名称列表

 staticroute list-interfaces 

configuration的静态路由在重新启动后仍然存在,并会随着networking接口的上下而自动添加和删除。

还有手册页; 这些安装在/ usr / local / share / man / man8中,所以你可能还想把/ usr / local / share / man添加到你的MANPATH中。

我应该强调的是,我今天刚刚敲了这段代码来解决由于不得不使用cron作业来保持静态路由而导致的问题。 它似乎为我工作,但YMMV。 代码和二进制文件是MIT许可的。

三种方法,按善良的顺序排列:

  • 手动创buildlaunchd服务来设置路由,如http://osxfaq.com/tips/kluskens/index.ws
  • 使用Lingon自动创build服务,否则如上所述; 这个软件是没有维护,但仍然工作正常的OS X 10.5.8。
  • 使用RouteSplit ,为此目的而构build的工具。

我不得不不同意善良的顺序 – 如果OP使用launchd(无论是手动创build的plist还是用lingon创build的),它们可以在启动时运行。 如果他们使用像RouteSplit这样基于AppleScript的解决scheme,他们将无法在没有用户login的情况下运行它。

Charles,我很好奇,为什么使用像launchd这样的操作系统供应商认可的工具对你来说看起来很讨厌?