August 29, 2016 - golang ※2016-09-05追記: 本記事の対策では不備があるためRe: Goの通信経路選択(net.LookupIP & net.Dial)に続編書きました。 GoのHTTP通信経路選択の挙動について腑に落ちない点があり、net.LookupIP/net.Dialの仕様とそれに伴い生じる接続経路の選択問題、そしてその対策について調べてみました。 TL;DR unix環境におけるGoの名前解決まわりの仕様 net.LookupIPはDNSから取得できたアドレスリストをそのまま返すわけではない 内部ネットワーク間の接続であれば接続元と接続先がビット列的に近いものを優先したアドレスリストを返す net.Dialはnet.LookupIPがかえすアドレスリストの先頭から接続を試みる その後、最初に接続が成功したものとのみ通信を行う DNSラウンドロビン