0 votos

¿Cómo puedo hacer que Ruby net::http deje de bloquearse en ipv6?

Hay algunas herramientas críticas para mi flujo de trabajo que hablan con www.pivotaltracker.com usando ruby.

Alguna combinación de la actualización de Ruby 2.1.2 a Ruby 2.1.3, las recientes actualizaciones del sistema os x, y las actualizaciones de brew hicieron que empezaran a tardar mucho en funcionar, y la razón es ipv6 que puedo ver utilizando curl para realizar peticiones api similares:

    curl -v -H "X-TrackerToken: $TOKEN" -X GET http://www.pivotaltracker.com/services/v3/projects
    * About to connect() to www.pivotaltracker.com port 80 (#0)
    *   Trying 2607:f700:1:1388:c856:ed01:e1bf:b0e0…

después de un minuto o dos de tiempo de espera en todas las direcciones ipv6 de www.pivotaltracker.com, la dirección ipv4 se intenta finalmente, y la solicitud se completa con éxito.

Esto es así a pesar de utilizar sudo networksetup -setv6off Ethernet y verificando que ipv6 estaba "desactivado" en Preferencias>Red. También he intentado poner una entrada ipv4 correcta en mi /etc/hosts .

Si uso curl --ipv4 la solicitud se completa inmediatamente. Sin embargo, no consigo averiguar cómo forzar los scripts de ruby que utilizan net::http para saltar ipv6

Lo más frustrante de esto es que el mismo problema ocurrió con una ronda de actualizaciones del entorno de desarrollo en mayo o junio, y de alguna manera lo resolví, pero parece que no puedo volver a descubrir cómo o encontrarlo buscando en mis archivos del historial del shell.

El problema no es exclusivo de pivotaltracker.com, sino que es válido para cualquier dominio que tenga direcciones ipv6. Os X intenta las direcciones ipv6 primero a menos que se le indique lo contrario, lo que los navegadores y algunas otras aplicaciones parecen hacer, pero ruby y la mayoría de las aplicaciones unix no lo hacen. wget también se detiene.

Eventualmente actualizaré mi router y conseguiré que ipv6 funcione completamente, pero mientras tanto me gustaría encontrar una solución.

Salida de ifconfig

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    inet 127.0.0.1 netmask 0xff000000
    inet6 ::1 prefixlen 128
    inet6 fd3e:fe65:5a2c:ebe1:224:1dff:fe16:65d3 prefixlen 128
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 00:24:1d:16:65:d3
    inet 192.168.0.47 netmask 0xffffff00 broadcast 192.168.0.255
    media: autoselect (1000baseT <full-duplex>)
    status: active
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 2030
    lladdr 00:19:a1:fa:00:00:24:1d
    media: autoselect <full-duplex>
    status: inactive
vnic0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether 00:1c:42:00:00:08
    inet 10.211.55.2 netmask 0xffffff00 broadcast 10.211.55.255
    inet6 fe80::21c:42ff:fe00:8%vnic0 prefixlen 64 scopeid 0x6
    inet6 ::1 prefixlen 64
    media: autoselect
    status: active
vnic1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether 00:1c:42:00:00:09
    inet 10.37.129.2 netmask 0xffffff00 broadcast 10.37.129.255
    inet6 fe80::21c:42ff:fe00:9%vnic1 prefixlen 64 scopeid 0x7
    inet6 ::1 prefixlen 64
    media: autoselect
    status: active

netstat -r

cuando ejecuto netstat -r, tiene una sección de Internet6, a pesar de que Preferencias del Sistema>Red>Ethernet>Avanzado >Configurar IPv6 está en Off.

1voto

guest Puntos 11

No estoy seguro de que sea un problema de Apple, sino de Ruby. Puedes ver un informe de errores aquí.

Puedes intentar especificar un nombre de host específico para ipv6 en la inicialización.

Por ejemplo, TCPServer.new('::1', pivotal_tracker_address) debería permitirle utilizar curl sin especificar el -ipv6 . No puedo ver tu código Ruby, así que no estoy seguro de que esto solucione tu problema.

Espero que esto ayude.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X