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

0

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

Alguna combinación de actualización de Ruby 2.1.2 a Ruby 2.1.3, actualizaciones recientes del sistema OS X y actualizaciones de preparación provocó que comenzaran a tardar mucho tiempo en funcionar, y la razón es ipv6 , que puedo ver usando curl para hacer solicitudes de 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 y la solicitud se completa con éxito.

Esto es a pesar de usar sudo networksetup -setv6off Ethernet y verificar que ipv6 estaba "apagado" en Preferencias > Redes. También he intentado colocar una entrada correcta de ipv4 en mi /etc/hosts .

Si uso curl --ipv4 , la solicitud se completa de inmediato. Sin embargo, no puedo averiguar cómo forzar los scripts ruby que usan net::http para omitir 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 mirando a través de mis archivos de historial de shell.

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

Eventualmente, actualizaré mi enrutador y haré 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 las Preferencias del sistema > Red > Ethernet > Advanced ... > Configure IPv6 en Off.

    
pregunta Michael Johnston 05.10.2014 - 00:57

1 respuesta

1

No estoy seguro de que se trate de un problema de Apple, sino de Ruby. Puede ver un informe de error aquí

Puede intentar especificar un nombre de host específico de ipv6 durante la inicialización.

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

Espero que esto ayude.

    
respondido por el guest 10.03.2015 - 23:39

Lea otras preguntas en las etiquetas