Я просто играю с ipv6 и пытаюсь использовать netcat поверх ipv6. Я попробовал следующее, и это работает.

$ # 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)

Затем я попытался подключить клиент nc через интерфейс eth0.

$ # 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

Почему это происходит? Я делаю что-то явно неправильно?

2 ответа2

2

Адрес, к которому вы пытаетесь подключиться, является локальным адресом связи. При использовании таких адресов вы всегда должны указывать сетевой интерфейс. Общим обозначением является суффикс % и идентификатор интерфейса. В вашем примере это будет: fe80::a00:27ff:fe0c:5c90%eth0 .

А поскольку локальные адреса ссылки являются локальными для ссылки, они не могут быть направлены. Из-за этого, как правило, гораздо проще назначать «нормальные» адреса IPv6 вашим интерфейсам. Если ваш Интернет-провайдер не предоставил вам возможность подключения по IPv6, вы можете настроить туннель, например, SixXS или Hurricane Electric, или использовать частные адреса. Они называются ULA (уникальные локальные адреса) в IPv6, и вы можете случайным образом сгенерировать свой собственный префикс /48 в блоке fd00::/8 . Это предотвращает конфликты с другими адресами ULA при соединении сетей (VPN-туннели, слияния компаний и т.д.)

0

Вы должны добавить индекс зоны, чтобы связать локальные адреса, если вы хотите их использовать. В системах Linux это имя устройства. Это связано с тем, что локальные адреса ссылок имеют префикс fe80::/10 на каждом устройстве.

Предположим, у вас есть два интерфейса (скажем, ethernet и wifi), тогда что-то вроде ping6 fe80::1 неоднозначно - это fe80::1 в ethernet или на устройстве wifi? И то и другое может быть вполне возможным, но система не может знать, какой из них (и, конечно, не будет пытаться). Таким образом, вы должны сказать, как ping6 fe80::1%enp2s0 или около того. Вот почему адреса локальной ссылки довольно громоздки в использовании. (Кодировка URL этого особенно неудобна.) Наряду с их важностью для обнаружения соседей они служат последним средством, если что-то с конфигурацией IP-адреса идет не так, но они не предназначены для регулярного использования - используйте глобальные адреса или уникальные локальные адреса для этого.

Оффтоп: целесообразно ознакомиться с утилитой ip из пакета iproute2, если вы хотите поиграть с IPv6, он заменяет и превосходит ifconfig и route .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .