解决Mac通过有线进行互联网共享时对方上不了网的问题

问题

最近由于探索了Moonlight推流,再加上学校校园网有设备数限制,于是想要将我的PC与Mac组建一个局域网,Mac连接Wi-Fi后通过有线共享给PC,同时PC开启热点给其他设备共享网络。但在按照官方说明开启互联网共享后,却发现PC始终无法上网。询问苹果官方客服,对方称Mac的设置是正确的,没有其他设置,可能是PC问题。
后来在我跟ChatGPT探讨了一下午各种解决方案后,发现了问题是Mac需要额外设置NAT后才能共享网络。

操作方法

查看网卡名称

在终端中执行以下指令,查看网卡名称。

ifconfig

将返回一大堆网卡信息。从这一堆网卡信息中找出自己的Wi-Fi网卡和以太网网卡的名称。

配置 NAT 规则

备份并打开/etc/pf.conf:

sudo su
cp /etc/pf.conf /etc/pf.bak
vi /etc/pf.conf

在文件中,您需要添加一条规则来设置 NAT。假设 en0 是 Wi-Fi 接口,而 en1 是您想共享到的以太网接口,您可以添加如下规则:

nat on en0 from en1:network to any -> (en0)

这条规则的意思是:将从 en1 接口(以太网)发出的流量,通过 en0 接口(Wi-Fi)进行 NAT 转换。
注意,您应该将 NAT 规则放在 nat-anchor "com.apple/*" 之后,但在 load anchor "com.apple" from "/etc/pf.anchors/com.apple" 这一行之前。例如:

...
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"

nat on en0 from en1:network to any -> (en0)

load anchor "com.apple" from "/etc/pf.anchors/com.apple"

IP转发设置

执行以下指令,开启IP转发功能:

sudo sysctl net.inet.ip.forwarding=1
sudo sysctl net.inet6.ip6.forwarding=1

应用更改

在进行更改后,重新加载 PF 配置:

sudo pfctl -f /etc/pf.conf
sudo pfctl -e

现在,再去看看,应该可以上网了。

设置永久的 sysctl 参数

在 macOS 和其他基于 Unix 的操作系统中,使用 sysctl 命令直接设置的参数通常不是永久生效的。这些更改只在当前会话有效,意味着在系统重启后这些设置将被重置为默认值。要使 sysctl 设置永久生效,需要将这些设置添加到系统的配置文件中。

对于 macOS,您可以将 sysctl 设置添加到 /etc/sysctl.conf 文件中,以实现永久生效。这个文件在系统启动时会被读取,从而应用其中的设置。

编辑 /etc/sysctl.conf:

打开 /etc/sysctl.conf 文件
在文件中添加以下行来永久启用 IPv4 和 IPv6 转发:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1

保存并关闭文件。现在更改永久生效了。

后记

这真的是给普通用户使用的功能?官方连个说明都没有,要不是ChatGPT我都不知道

类似文章

2条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注