在 Mac OS 10.11 (El Capitan) 上使用 pfctl 转发端口

Using pfctl on Mac OS 10.11 (El Capitan) to forward ports

我目前正在测试我的开发环境是否会 运行 在新的 Mac OS 10.11 上,以及我是否可以在它发布后立即升级。在我的测试机器上,我目前 运行正在使用 Beta 预览版 3。一切似乎 运行 都很好。

我可以让 pfctl 转发我的端口。我使用 Vagrant 和 Parallels Desktop 为我的本地 Web 服务器 运行 Debian 系统。 Vagrant 将主机上的端口 8080 转发到客户机上的 80。所以 127.0.0.1:8080 工作正常。但在某些项目中,我希望拥有与生产环境完全相同的本地域。 (没有:8080)而且我更喜欢它。 ;-)

为此,我使用 pfctl 将主机上的 80 转发到 8080。这是我的配置文件:

~/port-forwarding/pf.conf

rdr-anchor "forwarding"
load anchor "forwarding" from "/Users/nick/port-forwarding/rules.conf"

~/port-forwarding/rules.conf

rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080 
rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 4433 

为了启用它,我 运行:

sudo pfctl -vnf ~/port-forwarding/pf.conf
sudo pfctl -evf ~/port-forwarding/pf.conf

这给了我这个:

pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

rdr-anchor "forwarding" all

Loading anchor forwarding from /Users/nick/port-forwarding/rules.conf
rdr pass on lo0 inet proto tcp from any to any port = 80 -> 127.0.0.1 port 8080
rdr pass on lo0 inet proto tcp from any to any port = 443 -> 127.0.0.1 port 4433
pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

No ALTQ support in kernel
ALTQ related functions disabled
rdr-anchor "forwarding" all

Loading anchor forwarding from /Users/nick/port-forwarding/rules.conf
rdr pass on lo0 inet proto tcp from any to any port = 80 -> 127.0.0.1 port 8080
rdr pass on lo0 inet proto tcp from any to any port = 443 -> 127.0.0.1 port 4433
pf enabled
logout
Saving session...completed.

sudo pfctl -s nat 说:

No ALTQ support in kernel
ALTQ related functions disabled
rdr-anchor "forwarding" all

到目前为止,我认为它看起来不错。但它就是行不通。

127.0.0.1:80 - 无连接 127.0.0.1:8080 - 有效

我在 Yosemite 上使用相同的文件,在那里工作正常。

有谁知道如何使用 pfctl 或我是否做错了什么或是否存在可以报告的错误。

非常感谢

尼克

这仅适用于 OSX 10.11 - El Capitan - Public Beta 1

x-post 来自:https://superuser.com/questions/938999/osx-10-11-el-capitan-beta-pf-conf-behaviour-changed/943981#943981

在最新的10.11 beta中,127.0.0.1被屏蔽了。解决方案?使用 127.0.0.2。为此:

首先将127.0.0.2添加到环回别名 sudo ifconfig lo0 alias 127.0.0.2 up

修改您的 pf 规则以使用新别名。 rdr pass proto tcp from any to any port 80 -> 127.0.0.2 port 8080

从命令行,不使用文件:

echo "rdr pass proto tcp from any to any port {80,8080} -> 127.0.0.2 port 8080" | pfctl -Ef - <-- 请务必添加最后一个标记,您正在使用 STDIN 管道)