如何在MacOS X上定义静态路由,并通过重新启动来保持静态路由? 我在Google上发现的唯一build议是build立一个launchd服务,在启动时运行,这似乎是一个可怕的黑客攻击(例如,它是否能够在networking重启的情况下存活)?
要设置我暂时需要的路线,我可以运行以下命令:
route add -net ${network} ${gateway} ${netmask}
我会如何坚持下去?
除了启动守护进程(就像之前的启动项),在这方面有两个重要的问题:
如果系统configuration重做networkingconfiguration,它将垃圾你的路线。 您可以通过使launchd定期运行“启动守护进程”来解决这个问题,但是您可能仍然需要等待这段时间才能恢复路由。
启动后台程序和启动项目都可以在一些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许可的。
三种方法,按善良的顺序排列:
我不得不不同意善良的顺序 – 如果OP使用launchd(无论是手动创build的plist还是用lingon创build的),它们可以在启动时运行。 如果他们使用像RouteSplit这样基于AppleScript的解决scheme,他们将无法在没有用户login的情况下运行它。
Charles,我很好奇,为什么使用像launchd这样的操作系统供应商认可的工具对你来说看起来很讨厌?