Skip to content

Instantly share code, notes, and snippets.

@ognjenm
Forked from sparkcodeuk/floating-ip-gateway.sh
Last active May 1, 2021 10:40
Show Gist options
  • Save ognjenm/687024e4779aa65c925832ca0cfbbc6c to your computer and use it in GitHub Desktop.
Save ognjenm/687024e4779aa65c925832ca0cfbbc6c to your computer and use it in GitHub Desktop.
Digital Ocean floating IP gateway script (force droplet to use the assigned floating IP for outbound traffic as well as inbound traffic)
#!/bin/bash
# Force outbound traffic through the attached floating IP
NET_INT="eth0"
CURL_TIMEOUT=3
echo -n "Setting floating IP as the default gateway: "
# Check there's a floating IP attached to this droplet
if [ "$(curl -s --connect-timeout $CURL_TIMEOUT http://169.254.169.254/metadata/v1/floating_ip/ipv4/active)" != "true" ]; then
echo "Error: this droplet doesn't have a floating IP assigned to it."
exit 1
fi
# Get the gateway IP for the floating IP
GATEWAY_IP=$(curl -s --connect-timeout $CURL_TIMEOUT http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/gateway)
if [ -z "$GATEWAY_IP" ]; then
echo "Error: failed getting gateway IP for this droplet."
exit 1
fi
# Check we haven't already got the floating IP as a default gateway
if [ ! -z $(ip route ls 0/0|awk '{print $3}'|grep "$GATEWAY_IP") ]; then
echo "Error: gateway IP already a default route."
exit 1
fi
# Add the new route before we remove any
sudo ip route replace default via $GATEWAY_IP dev $NET_INT
#TODO: fix monitoring
#ip route add 169.254.169.254 via [original_gateway_ip] dev eth0
# Delete any other default gatways for this interface
#ip route ls 0/0 dev $NET_INT|awk '{print $3}'|grep -v "$GATEWAY_IP"|xargs -n1 -I{} sudo route del default gw {}
echo "Done."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment