运行 Ubuntu 和 ipv6 的 Virtualbox

运行 Ubuntu 和 ipv6 的 Virtualbox

我只是在尝试使用 ipv6,并尝试通过 ipv6 使用 netcat。我尝试了以下方法,成功了。

$ # terminal one 
$ nc -6 -l 7171

$ # terminal two
$ nc -vvv -6 ::1 7171                                                                                                                           
Connection to ::1 7171 port [tcp/*] succeeded!

我尝试运行 ifconfig 并得到以下输出:-

eth0      Link encap:Ethernet  HWaddr 08:00:27:0c:5c:90
          inet addr:192.168.5.177  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe0c:5c90/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:363545 errors:0 dropped:0 overruns:0 frame:0
          TX packets:389270 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:75700504 (75.7 MB)  TX bytes:471219676 (471.2 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:15246 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15246 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1010273 (1.0 MB)  TX bytes:1010273 (1.0 MB)

接下来我尝试通过 eth0 接口连接 nc 客户端。

$ # terminal one 
$ nc -6 -l 7171

$ # terminal two
$ nc -vvv -6 fe80::a00:27ff:fe0c:5c90 7171
nc: connect to fe80::a00:27ff:fe0c:5c90 port 7171 (tcp) failed: Invalid argument

为什么会发生这种情况?我是不是做了一些明显错误的事情?

答案1

您尝试连接的地址是链路本地地址。使用此类地址时,您必须始终指定网络接口。常用符号是后缀%和接口 ID。在您的示例中,它将变成:fe80::a00:27ff:fe0c:5c90%eth0

而且由于链路本地地址是链路本地的,因此无法路由。因此,通常更容易为您的接口提供“普通”IPv6 地址。如果您的 ISP 没有为您提供 IPv6 连接,那么您可以设置到 SixXS 或 Hurricane Electric 等的隧道,或者您可以使用私有地址。这些被称为ULA(唯一本地地址)在 IPv6 中,您可以在块中随机生成自己的 /48 前缀fd00::/8。这可以防止在互连网络(VPN 隧道、公司合并等)时与其他 ULA 地址发生冲突

答案2

您必须附加区域索引链接本地地址(如果您要使用它们)。在 Linux 系统下,这是设备名称。这是因为链接本地地址fe80::/10在每个设备上都有前缀。

假设您有两个接口(例如以太网和 wifi),那么类似的事情ping6 fe80::1就会变得模棱两可 - 是fe80::1在以太网上还是在 wifi 设备上?两者都完全有可能,但系统无法知道哪一个(而且它肯定不会尝试)。所以你必须说出来,比如ping6 fe80::1%enp2s0或诸如此类。这就是为什么链接本地地址使用起来有些麻烦的原因。(它的 URL 编码特别尴尬。)除了它们对于邻居发现的重要性之外,如果 IP 地址配置出现问题,它们是最后的手段,但它们不适合常规使用 - 为此使用全局地址或唯一本地地址。

离题:如果您想使用 IPv6,最好先熟悉ipiproute2 包中的实用程序,它取代并优于ifconfigroute

相关内容