Llamadas cURL a través de distintas interfaces
Si tu servidor web dispone de varias interfaces de red
y quieres que ciertas peticiones que haces con cURL salgan a
través de una IP específica puedes modificar el flag
CURLOPT_INTERFACE de cURL pásandole la IP.
Un ejemplo tonto podría ser:
...
// Todas mis interfaces de red:
$interfaces = array(
'91.121.157.41',
'178.33.161.225',
'188.165.128.67',
'178.33.166.125',
'178.33.163.125',
);
// Salir aleatoriamente por una de ellas:
$rand_interface = $interfaces[rand(0,count($interfaces)-1)];
curl_setopt($curl_handle, CURLOPT_INTERFACE, $rand_interface );
...
Esto te puede servir tanto para balancear carga, como para forzar que una petición venga de un orígen único. Especialmente útil para hacer cosas feas en servidores con IP failover.
En una máquina con IP Failover la lista de interface de red puede ser:
cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 91.121.157.41
netmask 255.255.255.0
network 91.121.157.0
broadcast 91.121.157.255
gateway 91.121.157.254
auto eth0:0
iface eth0:0 inet static
address 178.33.161.225
netmask 255.255.255.255
auto eth0:1
iface eth0:1 inet static
address 188.165.128.67
netmask 255.255.255.255
auto eth0:2
iface eth0:2 inet static
address 178.33.166.125
netmask 255.255.255.255
auto eth0:3
iface eth0:3 inet static
address 178.33.163.125
netmask 255.255.255.255