0

There are some tools critical to my workflow that talk to www.pivotaltracker.com using ruby.

Some combination of updating from Ruby 2.1.2 to Ruby 2.1.3, recent os x system updates, and brew updates caused them to start taking a very long time to function, and the reason is ipv6, which I can see by using curl to make similar api requests:

    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…

after a minute or two of timing out on all of www.pivotaltracker.com's ipv6 addresses, the ipv4 address is eventually tried, and the request completes sucessfully.

This is despite using sudo networksetup -setv6off Ethernet and verifying that ipv6 was "off" in Preferences>Networking. I've also tried putting a correct ipv4 entry in my /etc/hosts.

If I use curl --ipv4 the request completes immediately. However I can't figure out how to force ruby scripts that use net::http to skip ipv6

The deeply frustrating thing about this is that the same issue happened with a round of development environment upgrades in May or June, and I somehow resolved it, but I can't seem to re-discover how or find it by looking through my shell history files.

The issue is not unique to pivotaltracker.com, but is true of any domain that has ipv6 addresses. Os X tries the ipv6 addresses first unless told to do otherwise, which browsers and some other apps seem to do, but ruby and most unix apps do not. wget stalls as well.

I will eventually upgrade my router and get ipv6 working completely, but in the meantime I would like to find a workaround.

Output of 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

when I run netstat -r, it has an Internet6 section, despite System Preferences>Network>Ethernet>Advanced…>Configure IPv6 being set to Off.

  • What you describe usually only happens when you have an IPv6 address configured on your machine but your IPv6 connectivity is broken. Browsers use an algorithm called happy eyeballs to fall back to IPv4. You say that you turned IPv6 off. Can you show the output of ifconfig and netstat -r to verify? – Sander Steffann Oct 4 '14 at 23:27
  • @SanderSteffann I suspect this is a curl bug. I've lost count of the number of times I've seen curl try to connect to IPv6 addresses from hosts which have only been configured with IPv4. – Michael Hampton Oct 5 '14 at 0:43
  • @MichaelHampton Although I can reproduce with curl, it is a system issue. It affects ruby scripts, wget, etc. – Michael Johnston Oct 6 '14 at 17:51
  • @SanderSteffann I added info about ifconfig and netstat. Why does os x still use ipv6 after running sudo networksetup -setv6off Ethernet? By the way the address that is currently important to me (www.pivotaltracker.com) is not the only destination affected -- any destination is affected. – Michael Johnston Oct 6 '14 at 18:01
  • @MichaelJohnston: IPv6 is a integral part of most operating systems these days, so turning it off often leaves you in an unsupported state... – Sander Steffann Oct 7 '14 at 11:01
1

I am not sure that this is an Apple issue, but a Ruby issue. You can see a bug report here.

You might try specifying a ipv6-specific hostname upon initialization.

For example, TCPServer.new('::1', pivotal_tracker_address) should allow you to use curl without specifying the -ipv6. I can't see you Ruby code, so I am not sure if this will fix your problem.

Hope this helps.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .