据我了解,IPv6地址是按块分配的。每台机器都有一个IPv6地址范围,该范围内的任何IPv6地址都将指向它。
从ifconfig
输出看这行
inet6 2a01:2e8:d2c:e24c::1 prefixlen 64 scopeid 0x0<global>
我得出结论,所有带有2a01:2e8:d2c:e24c
前缀的IPv6地址都将指向我的机器。
但是,我无法将任何服务绑定到除IPv6地址以外的任何IPv6地址
2a01:2e8:d2c:e24c:0000:0000:0000:0001
nc -l 2a01:2e8:d2c:e24c:0000:0000:0000:0002 80
不起作用
nc -l 2a01:2e8:d2c:e24c:0000:0000:0001:0001 80
不起作用
nc -l 2a01:2e8:d2c:e24c:1000:0000:0000:0001 80
不起作用
nc -l 2a01:2e8:d2c:e24c:0000:0000:0000:0001 80
仅适用
nc -l <IP> <PORT>
在指定的IP和端口上打开一个简单的TCP服务器。
我得到的错误是nc: Cannot assign requested address
我想在同一端口但不同的IPv6地址上运行服务的多个实例。由于公共IPv6地址可用于每台机器,因此我想利用它。
ifconfig
:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 88.77.66.55 netmask 255.255.255.255 broadcast 88.77.66.55
inet6 fe80::9300:ff:fe33:64c1 prefixlen 64 scopeid 0x20<link>
inet6 2a01:2e8:d2c:e24c::1 prefixlen 64 scopeid 0x0<global>
ether 96:00:00:4e:31:e4 txqueuelen 1000 (Ethernet)
RX packets 26788391 bytes 21199864639 (21.1 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21940989 bytes 20045216536 (20.0 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
操作系统:Ubuntu 18.04
VPS主持人:Hetzner
我实际上正在尝试在主机的不同IPv6地址上运行映射到端口80的多个nginx docker容器。那就是我遇到的问题。 nc -l
测试只是为了简化问题描述。
答案 0 :(得分:1)
我得出结论,所有带有2a01:2e8:d2c:e24c前缀的IPv6地址都将指向我的机器
这个假设是错误的。前缀长度与IPv4网络掩码的含义相同。它确定哪些地址在您的本地网络上,而不是哪些地址属于您的本地主机。