如何让除 127.0.0.1 之外的环回地址在 OS X 上工作

如何让除 127.0.0.1 之外的环回地址在 OS X 上工作

根据我所读到的所有内容,整个 127.xxx 子网应该环回。

但是,在我的 Mac 上,我只能 ping 127.0.0.1

我知道我以前做过这个(虽然可能是在另一个操作系统上),并且对于在本地开发多个 SSL 站点和通过隧道传输远程服务以通过本地 IP 进行访问非常有用(例如,我可以通过 ssh 进入我的 MySQL 服务器,然后将标准端口转发到本地机器上的同一端口,但在 127.0.0.2 上,而我的本地服务器运行在 127.0.0.1 上。

答案1

以下是简短的回答:sudo ifconfig lo0 alias 127.0.0.* up

必须单独添加每个别名(sudo ifconfig lo0 alias 127.0.0.2 up, sudo ifconfig lo0 alias 127.0.0.3 up)。可以手动添加以进行测试,也可以将该子网中其他 250 个可用号码的子集或完整列表制作成 StartupItems 脚本,该脚本将在启动时自动执行此操作。

详细回答:根据 RFC3330,127.0.0.0/8 - 此地址块被指定为 Internet 主机环回地址。由更高级别协议发送到此地址块内任意地址的数据报都应在主机内环回。这通常仅使用 127.0.0.1/32 进行环回,但此地址块内的任何地址都不应出现在任何网络上。

答案2

对于那些感兴趣的人,这里有一个小 bash 脚本,它添加了 IP 127.0.0.* 的所有别名:

#!/bin/bash
for ((i=2;i<256;i++))
do
    sudo ifconfig lo0 alias 127.0.0.$i up
done

答案3

基于@laurent anwser和文章:

  1. 添加localhost别名脚本:
$ sudo touch /usr/local/bin/localhost_alias
$ sudo chmod +x /usr/local/bin/localhost_alias
  1. localhost_alias 内容:
#!/usr/bin/env bash

from=${1}
to=${2}

if [[ -z "$from" || -z "$to" ]]; then
  echo "Usage: $(basename "$0") 2-255 2-255 [from and to range numbers (127.0.0.[from-to])]"
  exit 0
fi 

for ((i=from;i<=to;i++))
do
    ifconfig lo0 alias 127.0.0.$i up
done
  1. 添加自动运行守护进程描述:
$ sudo touch /Library/LaunchDaemons/org.localhost.alias.plist
  1. org.localhost.alias.plist内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.localhost.alias</string>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/localhost_alias</string>
      <string>2</string>
      <string>8</string>
    </array>
</dict>
</plist>
  1. 我们在启动时127.0.0.2有别名127.0.0.8

您可以在创建这些文件后通过执行 launchd 来执行守护进程,而无需重新启动

sudo launchctl load /Library/LaunchDaemons/org.localhost.alias.plist

在 MacOS Mojave 上测试

相关内容