MacOS 设置端口转发

作者 Hpyer 日期 2020-04-14
MacOS 设置端口转发

引子

在 MacOS 中,非 root 用户是无法使用小于1024的常用端口的。但是,实际开发中可能必须要用到 80 端口, 那我们就可以通过端口转发来实现。

解决

sudo vim /etc/pf.conf

编辑 pf.conf 文件,在 rdr-anchor "com.apple/*" 下方,加入如下语句:

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

意思是将任何来自网卡 lo0 对 ip 为 127.0.0.1,且 80 端口的TCP请求,转发到 127.0.0.18080 端口上。

保存文件后,再执行 sudo pfctl -f /etc/pf.conf 以重新加载文件配置

最后执行 sudo pfctl -e 完成服务的启动。注:系统重启后,需要重新执行该命令

这样就可以实现 nginx 实际监听 8080 端口,但是通过 http://localhost/http://127.0.0.1/ 来访问。

深入

上面的方法,只能解决本机访问的情况。但是现实中,很有可能需要跟同事联调,那上文所提到的语句就不够用了。

但是聪明的你应该有发现,我在解释那个语句的时候,有提到 网卡127.0.0.1 等关键字,我们可以利用这个来解决我们的需求。

首先,我们知道 *nix 系统下,查看本机 ip 的命令是 ifconfig ,如下图(图片来源于网络)

image

图中所标出的 192.168.3.94 就是本机的局域网 ip。

再注意看图片左侧,你会发现有 lo0en0 的文字,这个就是对应的网卡名称。我们可以看到 192.168.3.94 所对应的网卡名称是 en0,那么我们就可以根据这两个参数,写出下列语句:

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

这样就可以解决局域网内,其他人的访问问题了。

同理,你还可以用此方法解决诸如 443 等其它端口的问题,不再赘述。