V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pheyer
V2EX  ›  macOS

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

  •  
  •   pheyer · 2018-06-04 10:56:59 +08:00 · 2540 次点击
    这是一个创建于 2365 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 为啥就不行,有人能探讨一下吗
    4 条回复    2019-04-12 16:39:49 +08:00
    tony1016
        1
    tony1016  
       2018-06-05 09:23:38 +08:00
    第一,127.0.0.1 只能本机访问,其它机器没法访问
    第二,就我所知,pfctl 只能转发到 127.0.0.1,其它地址无效

    所以你这个想法最好来的简单一点,用 socat 就可以了
    pheyer
        2
    pheyer  
    OP
       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
        3
    pheyer  
    OP
       2018-06-05 11:14:47 +08:00
    @tony1016 不对,我搞反了,还是只能转发到 127.0.0.1
    chenshun00
        4
    chenshun00  
       2019-04-12 16:39:49 +08:00
    ssh 转发是可以的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   915 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:24 · PVG 05:24 · LAX 13:24 · JFK 16:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.