IPv6回送地址(相当于127.xxx)


16

我设置了一个开发环境,在其中我为多个网站设置了单独的回送地址。

例如,我有以下内容:

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
我建议:: ffff:7f00:1,:: ffff:7f00:2,依此类推,但毫无疑问,有人会向我扔烂果子。
womble

您可以尝试在IPv6接口本地多播作用域中进行操作。那将循环回到您的主机,并且范围很大。它是否适合您将取决于您要尝试做什么。
罗恩·莫平

Answers:


13

从技术上讲,:: 2,:3等都是:: 0.0.0.0/96(“与ipv4兼容的ipv6地址”范围)的一部分。它已被弃用,但您可能不想使用该范围。

对于实验室环境,请使用唯一的本地寻址。转到https://www.ultratools.com/tools/rangeGenerator并为您自己生成一个前缀。然后,您可以从该前缀中选择所需的任何地址,并将其分配给回送接口。


为什么不:: 127.0.0.0/96?
托德

9

您的回送地址为:: 1/128。请注意,子网的宽度将其限制为仅一台主机。将子网掩码更改为更宽的范围,然后检查路由表。或使用本地链接地址。


1
如果您在Windows或linux的一个或两个上都添加了如何将其他IPv6地址绑定到回送接口,则此答案会更好。在IPv4中,您将获得127.0.0.1/8,而在IPv6中,您将获得::: 1/128,是否有任何方法可以为IPv6添加更多内容?
威廉

2
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可能是一个更好的选择。


如Ben Jencks所述,这有效地将路由表扩展到为ipv4兼容性保留的范围。
korkman '16

一点也不关心我。这是出于测试目的;在我的本地机器上;它只会影响我自己。
jcomeau_ictx

1
@jcomeau_ictx无论它是否与您有关,它都可能与将使用您答案的任何人有关,因为它会影响他们
mtraceur '18 -10-11

它可能会,但可以说直到分配了ipv4范围0/8才可以。无论如何,我会解决我的答案。
jcomeau_ictx

如果我使用/ 96,那将是很糟糕的,但是我使用/ 104。无论如何,我编辑了答案以使用:: 127.0.0.0/104,即回送范围。
jcomeau_ictx

2

我建议为此使用RFC 4193地址。RFC 4193允许您通过获取字节值fd后跟5个随机 字节来构造自己的/ 48供本地使用。您可以在前48位之后放置任何您认为合适的内容,因此,如果您想要/ 64,则可以采用fd7个随机字节,如下面的Linux系统示例所示:

ip -6 route add to local fd66:29e9:f422:8dfe::/64 dev lo

与以前的答案相比,使用RFC 4193的优点是您没有违反任何RFC,并且可以在没有接口标识符的情况下使用地址。

先前答案中提到的每个范围要么使用为不同目的保留的范围,要么使用链接本地地址,这些地址在使用时都需要接口标识符。

存在一个过期的草案,建议将该范围1::/32分配给您所要求的其他环回地址。但是,由于该草案已于几年前到期,因此从未进行过此类分配,因此您不能使用1::/32分配


我现在编写了一个小的命令行工具来生成RFC 4193兼容的前缀:v6tools.kasperd.dk/rfc4193
kasperd

0

使用链接本地寻址似乎是唯一有效的选择。这里大多数建议所忽略的是IPv6前缀声明了scope的事实,我不希望我的私有地址位于全局范围内。

因此对于Linux:

$ sudo ip -6 address add fe80::1/64 dev lo
$ sudo ip -6 address add fe80::2/64 dev lo
$ sudo ip -6 address add fe80::3/64 dev lo

并在引用此类地址时指定接口。使用netcat进行测试:

$ nc -l -p 10001 fe80::1%lo
$ nc fe80::1%lo 10001

验证正确的范围:

$ ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 
    inet6 fe80::1/64 scope link 
       valid_lft forever preferred_lft forever

仍然必须添加每个IP才能绑定到它,这似乎仍然不是很优雅。使用127.0.0.0/8,您可以绑定到任何地址,而无需事先分配它们。


不,ULA是进行站点本地寻址的有效方法。默认情况下,它不会在Internet上进行路由。您可以将其本地路由。站点上的每个子网都可以具有一个合理的全局唯一的专用前缀,独立于ISP。
John Mahowald

并且本地站点不是本地主机。那就是我的意思:-)
korkman '16

0

有一个RFC提案,称为“较大的IPv6环回前缀”,它建议1::/32用作localhost网络。但是,该提案未获批准,并已在2013年到期。


我去年就这个问题写的答案中已经提到了这一点。
kasperd

@kaspered哦,是的,很抱歉,您没有注意到,因为答案实际上包括两个答案,并以另一个答案开头。
F.Raab

我真的不认为过期的草案是一个答案,因为它从未成为标准。我在回答中注明了它的原因,因为它是相关的背景信息,并提供了有关针对该特定目的对范围进行标准化的尝试的一些背景信息。
卡巴斯德(Kasperd),
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.