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

ell*_*urt 65 networking routing loopback osx-mountain-lion macos

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

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

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

Eve*_*ett 90

这是简短的回答: 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 实现环回,但此块内的地址不应出现在任何网络的任何位置。

  • 如果只有一种方法可以使它适用于 127.*.*.* (4认同)

lau*_*ent 17

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

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

  • 实际上,@Everett 的提议也不起作用,因为它只会启用诸​​如 127.7.7.7 或 127.42.42.42 之类的地址,即最后三位数字相等的地址。您需要三个不同的循环才能实际启用 127/8 块中的所有 IP。然而,这样做肯定不是一个好主意:考虑到每个 IP 必须单独启用,很有可能每个分配的 IP 都有一些资源;分配大约 1770 万个 IP(即 256^3)可能会产生一些重大后果...... (2认同)
  • @jwatkins 底线:仅在需要时才启用它们,这确实是所有事情的经验法则。 (2认同)

rzl*_*vmp 7

基于 @laurent anwser 和这篇文章:

  1. 添加本地主机别名脚本:
$ sudo touch /usr/local/bin/localhost_alias
$ sudo chmod +x /usr/local/bin/localhost_alias
Run Code Online (Sandbox Code Playgroud)
  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
Run Code Online (Sandbox Code Playgroud)
  1. 添加自动运行守护进程描述:
$ sudo touch /Library/LaunchDaemons/org.localhost.alias.plist
Run Code Online (Sandbox Code Playgroud)
  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>
Run Code Online (Sandbox Code Playgroud)
  1. 我们在启动时有127.0.0.2别名127.0.0.8

您可以在创建这些文件后让 launchd 执行守护进程,而无需重新启动,方法是执行

sudo launchctl load /Library/LaunchDaemons/org.localhost.alias.plist
Run Code Online (Sandbox Code Playgroud)

在 MacOS Mojave 上测试