我设置了一个开发环境,在其中我为多个网站设置了单独的回送地址。
例如,我有以下内容:
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中还有其他环回地址吗?有没有办法拥有多个唯一的回送地址?
我设置了一个开发环境,在其中我为多个网站设置了单独的回送地址。
例如,我有以下内容:
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中还有其他环回地址吗?有没有办法拥有多个唯一的回送地址?
Answers:
从技术上讲,:: 2,:3等都是:: 0.0.0.0/96(“与ipv4兼容的ipv6地址”范围)的一部分。它已被弃用,但您可能不想使用该范围。
对于实验室环境,请使用唯一的本地寻址。转到https://www.ultratools.com/tools/rangeGenerator并为您自己生成一个前缀。然后,您可以从该前缀中选择所需的任何地址,并将其分配给回送接口。
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
可能是一个更好的选择。
我建议为此使用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
此分配。
使用链接本地寻址似乎是唯一有效的选择。这里大多数建议所忽略的是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,您可以绑定到任何地址,而无需事先分配它们。