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

10

我目前正在测试我的开发环境是否可以在即将发布的新Mac OS 10.11上运行,并且如果可以,我会尽快升级。在我的测试机器上,我目前正在运行Beta Preview 3,一切似乎都运行正常。

我不能让pfctl转发我的端口。我使用Vagrant和Parallels Desktop来运行Debian系统作为我的本地Web服务器。 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"

~/端口转发/规则.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 says: 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 发生了变化,或者我是否做错了什么,或者是否有一个可以报告的错误。

非常感谢

Nick


1
有人在superuser上提出了这个问题,特别是这条评论,如果你愿意更改你要转发的端口,可能会有所帮助。 无论如何,你可能想要关注这篇文章,因为它比stackoverflow更适合。 - Thibault Martin
1个回答

12

此方法仅适用于OSX 10.11 - El Capitan - Public Beta 1

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

在最新的10.11测试版中,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 管道输入


我刚刚升级到了10.11 Beta 4,看起来它的运行情况和之前一样。 - Dafen
2
请确保使用sudo:echo "rdr pass proto tcp from any to any port {80,8080} -> 127.0.0.2 port 8080" | sudo pfctl -Ef - - Irimia
只是提醒其他人,127.0.0.1在El Capitan的公共版本中似乎没有被阻止,例如在OS X 10.11.5上。我已经成功地在El Capitan上设置了基于pf的本地环回转发,针对的是127.0.0.1。 - bluebinary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接