在 macOS 10.10 开始,系统防火墙工具由 ipfw
替换为了 pfctl
,关于 pf 防火墙的使用手册可以参考这里: https://murusfirewall.com/Documentation/OS%20X%20PF%20Manual.pdf
开启 IP 转发功能
开启 IPv4 转发功能:
$ sudo sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1
开启 IPv6 转发功能:
$ sudo sysctl net.inet6.ip6.forwarding=1
net.inet6.ip6.forwarding: 0 -> 1
以上操作只是临时生效,重启系统后就恢复默认值。
BTW:网上比较旧的文章写的是 sysctl -w net.inet.ip.forwarding=1
,多了个 -w
参数,
通过 man sysctl
查看帮助文档看到:The -w option has been deprecated and is silently ignored.
,这个参数可以不用了。
使用 pfctl
设置端口转发
简单介绍一下 pf 防火墙的开启和关闭,默认 pf 防火墙是关闭状态。
开启:
$ sudo pfctl -e
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled
关闭:
$ sudo pfctl -d
No ALTQ support in kernel
ALTQ related functions disabled
pf disabled
pf 默认的配置文件路径是 /etc/pf.conf
官方文档里不建议使用 -e
, -d
来硬管理 pf 防火墙的开启和关闭,而是应该在最后启用的引用被释放时自动关闭,这样比较管理资源比较优雅:
$ sudo pfctl -E -f /etc/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.
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled
Token : 9782614659941713109
使用 -E
选项开启 pf 并对引用计数,返回一个 Token 值。
然后使用 -X
对 Token 自动管理:
$ sudo pfctl -X 9782614659941713109
No ALTQ support in kernel
ALTQ related functions disabled
pf disabled