Linux netns: execute comandos diferentes com IPs diferentes em uma interface física

Linux netns: execute comandos diferentes com IPs diferentes em uma interface física

Eu tenho um Debian Stretch VPS com 4 endereços IPv4. Quero executar vários programas, vinculando-os a endereços IP específicos (para fazer solicitações HTTP de saída de diferentes IPs). Então, por exemplo, comando

~$ curl icanhazip.com

geraria IPs diferentes específicos.

O que eu fiz:

0) Solicitei IPs extras ao meu ISP

1) Editado /etc/network/interfaces e adicionados IPs extras:

# Initial configuration after ordering VPS
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

allow-hotplug ens3 
iface ens3 inet static
    address 194.67.205.100
    netmask 255.255.252.0
    gateway 194.67.204.1

# Next lines were added by me
auto ens3:1
iface ens3:1 inet static
    address 185.125.216.101
    netmask 255.255.252.0

auto ens3:2
iface ens3:2 inet static
    address 185.125.216.102
    netmask 255.255.252.0

auto ens3:3
iface ens3:3 inet static
    address 185.125.216.103
    netmask 255.255.252.0

2) Então criei netns para cada IP

ip netns add ns1
ip netns add ns2
and so on

3) Tentei adicionar interface às redes recém-criadas:

# ip link set ens3:1 netns ns1

4) Nesse momento a conexão SSH cai. Se eu fizer login usando VNC e executar ip a, vejo que toda a interface física ens3 e todas as suas subinterfaces desapareceram das redes principais. Captura de tela de saída do comando

O que estou fazendo de errado? Como posso vincular programas a diferentes endereços IP de origem?

PS: Estou desenvolvendo um raspador de site simples usando Python, preciso de IPs diferentes para acelerar a análise (fazer mais solicitações por segundo) e evitar banimento.

Responder1

Uma determinada interface física só pode estar em um namespace de rede, portanto, cada um dos seus alias não pode estar em seus próprios namespaces. Assim que você começar a mover um, tudo se moverá, o que explica a sua observação.

Veja esta pergunta:IP secundário em seu próprio namespace netnspara obter explicações sobre por que isso acontece, e também uma solução baseada em macvlan(ou caso contrário, você pode fazer pontes, encaminhamento de IP ou NAT).

informação relacionada