我建立了一个开发环境,其中为多个网站提供了单独的环回地址。
例如,我有以下内容:
127.0.0.1 www.example.com
127.0.0.2 foo.example.com
127.0.0.3 bar.example.com
127.0.0.4 waffles.example.com
我想要一个针对 IPv6 的等效解决方案。
我已经知道您可以使用 ::1 作为环回地址,但 ::2、::3 等似乎不起作用。
IPv6 中还有其他环回地址吗?有没有办法拥有多个唯一的环回地址?
答案1
从技术上讲,::2、::3 等是 ::0.0.0.0/96 的一部分,即“与 ipv4 兼容的 ipv6 地址”范围。它已被弃用,但您可能不想使用该范围。
对于实验室环境,请使用唯一的本地寻址。转到https://www.ultratools.com/tools/rangeGenerator并为自己生成一个前缀。然后您可以从该前缀中挑选所需的任何地址,并将它们分配给环回接口。
答案2
您的环回地址是 ::1/128。请注意子网的宽度,它将其限制为仅一个主机。将子网掩码更改为更宽的地址并检查您的路由表。或者使用链路本地地址。
答案3
我建议使用RFC 4193地址。RFC 4193 允许您通过获取字节值fd
后跟 5 来构建自己的 /48 供本地使用随机的 字节。您可以在前 48 位之后放置任何您认为合适的内容,因此如果您想要一个 /64,您可以取fd
后跟 7 个随机字节,如 Linux 系统的此示例所示:
ip -6 route add to local fd66:29e9:f422:8dfe::/64 dev lo
与之前的答案相比,使用 RFC 4193 的优势在于,这样做不会违反任何 RFC,并且可以在没有接口标识符的情况下使用这些地址。
前面答案中提到的每个范围要么使用为不同目的保留的范围,要么使用每次使用都需要接口标识符的链路本地地址。
存在已过期的草稿建议将该范围1::/32
分配给您要求的其他环回地址。但是由于该草案几年前就过期了,因此没有这样的分配曾经被制造出来你不能用1::/32
它来做这个。
答案4
jcomeau@aspire:~/rentacoder/jcomeau/kybyz$ sudo ip route add local ::/104 dev lo
jcomeau@aspire:~/rentacoder/jcomeau/kybyz$ ping6 ::2
PING ::2(::2) 56 data bytes
64 bytes from ::2: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from ::2: icmp_seq=2 ttl=64 time=0.128 ms
^C
--- ::2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.083/0.105/0.128/0.024 ms
jcomeau@aspire:~/rentacoder/jcomeau/kybyz$ ping6 ::3
PING ::3(::3) 56 data bytes
64 bytes from ::3: icmp_seq=1 ttl=64 time=0.148 ms
64 bytes from ::3: icmp_seq=2 ttl=64 time=0.141 ms
64 bytes from ::3: icmp_seq=3 ttl=64 time=0.142 ms
这是唯一对我有用的东西。当然是 Linux 专用的。
注意:因为这可能会在未来某个时候与 0.0.0.0/8 地址冲突,所以::127.0.0.0/104
可能是更好的选择。