I have a Heroku app making some API calls to an external service. There are some issues and the service wants to know what IPs are making the calls.
A lot of the basic tools like ifconfig
, traceroute
, netstat
, etc don't exist on the machines. Looks like they are running a very barebones version of Ubuntu 14.04.5.
I was able to use heroku ps:exec -a <myapp>
to SSH into my app and use ip addr
but there are some problems:
1) It appears that this only allows me to SSH into the web.1 dyno (and I am making my API calls through rest.1, rest.2, etc.) 2) These calls go through a router on Heroku's side.
How can I get the IPs of all dyno instances and/or the router?
Get the list of dynos with the
heroku ps -a <app>
command.You actually can ssh into individual dyno instances with
heroku ps:exec -a <app> -d <dyno_instance> --ssh
.Get the individual dyno IP with the
ip
command e.g.ip addr | grep "global eth0" | awk '{ print $2 }'
.Get the router IP with
curl 'https://api.ipify.org'
. http://httpbin.org/ip is also good.You could use
expect
to programmatically retrieve the IPs from every dyno by running the Heroku SSH command, waiting for the prompt, running the IP command(s), logging out, then repeating for each dyno instance.