Хорошо, кажется, я все это прояснил, основываясь на правильном прочтении выше. В фрагменте кода выше $hostname = "pvelocalhost". Как упомянул @wbumiller, он выбирает семью, которую видит первым, и по умолчанию это записано в /etc/hosts как IPv4 адрес. Преобразовав это в адрес IPv6, сопоставляемый с IPv4, мы заставим pveproxy привязываться к сокету v6, но он будет работать и для v4, и для v6, так как у него не включен bindv6only. Так что мой файл hosts выглядит так:
Код:
root@pve:~# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
::ffff:10.0.0.53 pve.dev.example.org pve pvelocalhost
# Следующие строки желательны для узлов, поддерживающих IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts, что приводит к результату
Код:
root@pve:~# netstat -anlpt | grep 8006
tcp6 0 0 :::8006 :::* LISTEN 11181/pveproxy
root@pve:~# Кажется, это работает и для IPv4, и для IPv6
Код:
root@pve:~# curl -vk "https://127.0.0.1:8006" 2>&1 | grep "OK"
< HTTP/1.1 200 OK
root@pve:~# curl -vk "https://[::1]:8006" 2>&1 | grep "OK"
< HTTP/1.1 200 OK