У меня есть настройка IPv6 в Linux, однако он не использует IPv6 по умолчанию, если я не укажу его. Например:
ssh -v HOSTNAME
Я вижу, как ssh подключается к IPv4-адресу. Единственный способ заставить его использовать IPv6 - это если я:
ssh -6 HOSTNAME
-or-
ssh IP::v6%INTERFACE
Я использую тот же самый хост в системе Solaris, и IPv6 работает нормально.
Солярис:
nslookup host1
Server: 10.1.44.100
Address: 10.1.44.100#53
Name: host1.sc.somehost.net
Address: 10.1.42.37
dig AAAA host1.sc.somehost.net
; <<>> DiG 9.6-ESV-R8 <<>> AAAA host1.sc.somehost.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4583
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 5
;; QUESTION SECTION:
;host1.sc.somehost.net. IN AAAA
;; ANSWER SECTION:
host1.sc.somehost.net. 3600 IN AAAA 2600:REST_OF_PREFIX:2::37
В Linux вывод такой же.
На моем Linux-хосте нет /etc/gai.conf. На моем хосте solaris у меня есть следующее в моем /etc/nsswitch.conf (который, как мне сказали, "включает" ipv6 по умолчанию.
ipnodes: files dns
Просто для удовольствия моя конфигурация Linux для IPv6 выглядит следующим образом:
bond0 Link encap:Ethernet HWaddr NOPE
inet addr:10.1.44.194 Bcast:10.1.45.255 Mask:255.255.254.0
inet6 addr: 2600:REST_OF_PREFIX:1::44:194/64 Scope:Global
inet6 addr: 2600:REST_OF_PREFIX:AUTOCONFIG_MAC_ADDR_ADDRESS/64 Scope:Global
inet6 addr: fe80::NOT_GETTIN_MY_MAC/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:1197675 errors:0 dropped:569214 overruns:0 frame:0
TX packets:878545 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:447693586 (426.9 MiB) TX bytes:793250645 (756.5 MiB)
Спасибо за помощь, ребята!
Есть (более старые, как я надеялся) версии Linux, в которых адресное пространство RFC1918 IPv4 предпочтительнее, чем IPv6. См. Например ошибка debian # 428434 libc6: Resolver в некоторых случаях предпочитает IPv4 IPv6. У вас, вероятно, нет файла /etc/gai.conf, чтобы исправить это, это было только в более новых версиях.