Rotating IP de saída [fechado]

1

Eu quero rotacionar endereços IP para captura na web, e aqui está minha configuração:

  1. Eu configurei vários endereços IP como abaixo no meu arquivo /etc/network/interfaces :

    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    allow-hotplug eth0
    iface eth0 inet static
        address XX.XXX.XXX.146
        netmask 255.255.255.248
        network XX.XXX.XXX.144
        broadcast XX.XXX.XXX.151
        gateway XX.XXX.XXX.145
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 208.67.222.222 208.67.220.220
        dns-search host.myhost.com
    auto eth0:1
    iface eth0:1 inet static
    address XX.XXX.XXX.147
    netmask 255.255.255.248
    broadcast XX.XXX.XXX.151 
    network XX.XXX.XXX.144 
    
    auto eth0:2
    iface eth0:2 inet static
    address XX.XXX.XXX.148
    netmask 255.255.255.248
    broadcast XX.XXX.XXX.151 
    network XX.XXX.XXX.144 
    
    auto eth0:3
    iface eth0:3 inet static
    address XX.XXX.XXX.149
    netmask 255.255.255.248
    broadcast XX.XXX.XXX.151 
    network XX.XXX.XXX.144 
    
  2. O Cloudflare DNS executa o round robin para diferentes endereços IP do meu servidor.

  3. No entanto, quando uso o seguinte script PHP para verificar meu endereço IP externo, obtenho valores diferentes para $_SERVER['SERVER_ADDR']; , mas meu endereço IP externo permanece igual (conforme verificado pelo script abaixo de http://checkip.dyndns.com/ ).

    <?php
    $externalContent = file_get_contents('http://checkip.dyndns.com/');
    preg_match('/Current IP Address: ([\[\]:.[0-9a-fA-F]+)</', $externalContent, $m);
    $externalIp = $m[1];
    echo $externalIp;
    echo '<br/>';
    echo $_SERVER['SERVER_ADDR'];
    ?>
    

O que estou perdendo aqui, eu quero executar um executável externo que deve usar diferentes endereços IP públicos disponíveis no meu servidor em rotação?

    
por iTech 21.12.2014 / 07:38

2 respostas

3

Resumindo, a solução é configurar as regras iptables conforme abaixo:

iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 80 -o eth0 -m statistic --mode nth --every 1 --packet 0 -j SNAT --to-source XX.XXX.XXX.146 iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 80 -o eth0 -m statistic --mode nth --every 2 --packet 0 -j SNAT --to-source XX.XXX.XXX.147 iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 80 -o eth0 -m statistic --mode nth --every 3 --packet 0 -j SNAT --to-source XX.XXX.XXX.148 iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 80 -o eth0 -m statistic --mode nth --every 4 --packet 0 -j SNAT --to-source XX.XXX.XXX.149

    
por 21.12.2014 / 08:27
1

Se você quiser usar endereços IP de origem diferentes ao usar a função PHP file_get_contents, tente usar contextos em PHP e especificando a opção de socket bindto .

Se você NÃO estiver usando PHP e sua conexão com o cliente não fornecer uma opção para vincular a um endereço de origem específico, você não terá outra chance além do iptables source-nat: você pode definir iptables apropriados traduções nat para cada um dos seus endereços IP de saída.

Por favor, note que o DNS NÃO tem qualquer papel para o que você precisa, pois se refere apenas aos serviços INBOUND.

    
por 21.12.2014 / 08:12