macOS 手动 PF 共享网络

由于要将 MacBook 的 Wi-Fi 网络共享给一台没有网络的机器,使用网络共享功能发现无法灵活配置IP地址。由于机器不方便使用 DHCP、更改 IP,因此无法使用。

通过搜索得知,在 macOS 上配置网卡 NAT(网络地址转换)主要有两种方式:

  • 系统内置的 Internet 共享功能(基于PF,自动配置)
  • PF(Packet Filter)防火墙(手动配置)

由于 Internet 共享功能无法满足需求,因此选择了 PF 防火墙手动配置的方式来实现 Wi-Fi 网络共享。

要求

  1. USB 网卡(以太网适配器)连接到没有网络的机器。
  2. MacBook 连接到 Wi-Fi 网络。
  3. 网线

步骤

配置网络接口

  1. 使用网线将 Mac 连接的 USB 网卡连接到没有网络的机器。
  2. 设备网络配置:
    • IP: 192.168.100.2/24
    • Gateway: 192.168.100.1
    • DNS: 223.5.5.5
  3. MacBook网络配置:
    • IP: 192.168.100.1/24

配置 PF 防火墙 NAT 转发

  1. 确认内外网接口名称。在 macOS 终端执行 ifconfig,找到:

    • 外网接口(Wi-Fi):一般是 en0inet 是 Wi-Fi 的 IP(比如 192.168.1.x
    • 内网接口(USB 网卡):inet 是 192.168.100.1,名字一般是 en5
  2. 开启 IP 转发

    1
    2
    3
    4
    5
    # 临时开启(重启失效)
    sudo sysctl -w net.inet.ip.forwarding=1
    
    # 永久开启(重启不失效)
    # echo "net.inet.ip.forwarding=1" | sudo tee -a /etc/sysctl.conf
  3. 创建 PF NAT 规则

    创建一个临时的 PF 配置文件 nat.conf,内容如下:

    1
    2
    3
    4
    5
    6
    # NAT规则:将192.168.100.0/24网段的流量通过Wi-Fi转发
    nat on en0 from 192.168.100.0/24 to any -> (en0)
    
    # 允许内网流量转发
    pass in on en5 from 192.168.100.0/24 to any
    pass out on en0 from 192.168.100.0/24 to any
  4. 加载规则并验证

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 停止PF(如果正在运行)
    sudo pfctl -d
    
    # 清空现有规则
    sudo pfctl -F all
    
    # 启用PF并加载规则
    sudo pfctl -e -f ./nat.conf
    
    # 验证规则(能看到NAT规则即正常)
    sudo pfctl -s nat

到这里,设备应该就可以访问互联网了。

鉴于这种方法并非最佳解决方案,不建议长期使用,因此我也不提供永久修改系统的方案。建议在有条件的情况下,给设备加一台 Wi-Fi 路由器做无线桥接会稳一些。