Mac 下通过 pfctl 进行 80 端口转发问题

2018-06-04 10:56:59 +08:00
 pheyer
Mac 的 80 端口默认是 root 权限的(小于 1024 的端口都需要 root 权限),普通用户是不能启用 80 端口服务的。假设在 Mac 上启用了一个 8080 端口的 web 服务,想通过转发 80 端口到 8080 端口实现 80 端口访问 web 服务。

根据 [这篇文章]( https://www.jianshu.com/p/1ea969078e4c) ,我选择了 pfctl 来进行 80 端口转发,按照里面的步骤做了之后可以实现在浏览器访问 localhost 或者 127.0.0.1 访问 8080 web 服务,但是却不能通过本机局域网 ip 访问。

文章中特别强调了这一点—— lo0 是本地环路 127.0.0.1,如果希望内网其他同学也能访问到还要加下面的配置:

rdr on en0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080

可见这一点并没有生效,我把其中第一个 127.0.0.1 修改成本机局域网 ip 地址也不行,把上面的 80 端口换成大于 1024 的端口也都不行。我的 Mac 使用有线网络,对应 en0 也是没错的。


[这篇文章]( https://www.jianshu.com/p/2e93c3ee6270) 的结论跟我差不多,作者转而选择 nginx 来解决问题——我知道 nginx 能解决,但就是想知道用 pfctl 为啥就不行,有人能探讨一下吗
2540 次点击
所在节点    macOS
4 条回复
tony1016
2018-06-05 09:23:38 +08:00
第一,127.0.0.1 只能本机访问,其它机器没法访问
第二,就我所知,pfctl 只能转发到 127.0.0.1,其它地址无效

所以你这个想法最好来的简单一点,用 socat 就可以了
pheyer
2018-06-05 11:09:10 +08:00
@tony1016 本来昨天我已经放弃解决了,刚才看到你的回复又重新查了一下,居然就解决了,解决的配置是这个:
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080

所以你的“ pfctl 只能转发到 127.0.0.1 ”结论也是错误的
pheyer
2018-06-05 11:14:47 +08:00
@tony1016 不对,我搞反了,还是只能转发到 127.0.0.1
chenshun00
2019-04-12 16:39:49 +08:00
ssh 转发是可以的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/460153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX