最近我也不得不做类似的事情,并且在搜索中找到了这个答案。不幸的是,Nafe使用的答案ipfw
现已被OSX弃用并且不可用;而Kevin Leary的回答确实有点荒谬。所以我不得不做得更好(更清洁),并决定在此分享以供后代使用。这个答案主要基于本要点提到的方法。
如OP所述,将浏览器指向192.168.99.100应该会收到来自本地主机:8000的服务器的响应。单独添加别名ifconfig
并没有必要,pfctl
要实现此目的pf.conf
,/etc/pf.conf
只需修改文件即可。
首先,我们创建(使用sudo)的新主播的文件(让我们称之为 redirection
)在:/etc/pf.anchors/redirection
。这基本上是一个普通的文本文件,包含以下行(就像凯文猜疑的答案): rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
。创建新的锚文件后,需要在pf.conf
文件中对其进行引用。pf.conf
使用sudo 打开文件,并rdr-anchor "redirection"
在最后的rdr-anchor行(即rdr-anchor "com.apple/*"
)之后添加load anchor "redirection" from "/etc/pf.anchors/redirection"
,然后在末尾添加。
最终,这是pf.conf文件的外观:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection" #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection" #added for redirection/port forwarding
仅此而已。只需pfctl
发出以下sudo pfctl -d
命令重新启动即可将其禁用,然后再sudo pfctl -fe /etc/pf.conf
重新启动。
现在,如果您需要在每次重新启动后自动执行此操作,则还需要完成一点点工作:pfctl
需要更新启动守护进程(引用的要点提到启动时会自动启用pf,但这似乎并非如此)通过查看代码来确定)。打开(使用sudo)System/Library/LaunchDaemons/com.apple.pfctl.plist
并查找:
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
并添加该行<string>-e</string>
,最终使其如下所示:
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
那应该做。
注意:Apple不再允许更改启动恶魔文件(不能使用sudo,chmod或其他任何方式)。的唯一方法是用鼓捣系统完整性保护的设置:开机进入恢复模式,并推出终端。通过检查SIP状态csrutil status
,通常应将其启用。禁用它csrutil disable
并在正常模式下重新启动,然后如上所述对plist文件进行更改。完成后,返回到恢复模式,并通过发出来重新启用保护(出于充分的理由它已经就位)csrutil enable
。
说明:可以通过发出已经是localhost lo0的(默认)别名的ifconfig
命令来进行检查127.0.0.1
-使用此事实是为了避免必须为localhost添加额外的别名,而只是使用pf.conf
文件中的默认地址。
更新:不幸的是,似乎在启动时无法加载文件。我仍在设法获得帮助以进行排序。在此之前,sudo pfctl -f /etc/pf.conf
启动后运行即可达到目的。