Linux e IPv6: Como ligar a um endereço IPv6 arbitrário? [duplicado]

4

Eu tenho um bloco / 48 IPv6. Eu gostaria de poder fazer isso:

$ wget --bind-address=<1st-ipv6> http://www.some-url.com
$ wget --bind-address=<2nd-ipv6> http://www.some-url.com
$ wget --bind-address=<3rd-ipv6> http://www.some-url.com
etc...

para qualquer um dos 2 ^ 80 IPs disponíveis no meu bloco / 48.

De acordo com meus testes, atribuir muitos IPs a uma interface torna as coisas lentas (em termos de solicitações HTTP por segundo). E obviamente, não posso atribuir bilhões de IPs a uma interface. Existe uma maneira de dizer ao Linux para aceitar qualquer IP que pertença ao meu bloco / 48, ou para modificar o wget para que isso possa ser feito?

17 de janeiro de 2013 EDIT: Eu descobri como fazer isso. Sua versão do kernel deve ser pelo menos 3.3, porque a partir desta versão, este patch é aplicado: link

Então você tem que correr como root (como disse David Schwartz):

# ip -6 route add local your_ipv6_block/48 dev lo

Você tem que atribuir esta rota para a interface lo, mesmo que não seja a interface de saída para acessar a Internet.

Então você tem que modificar as fontes do wget. Em src / connect.c, dentro da função connect_to_ip (), depois que o socket é criado, adicione isto:

setsockopt(sock, SOL_IP, IP_FREEBIND, &v, sizeof(v));

Em seguida, compile o wget (o compilador pode reclamar que o IP_FREEBIND não está definido, como resolver isso está fora do escopo aqui) e instale-o.

Então você pode fazer:

$ wget --bind-address=<any_ipv6_in_your_block> http://www.some-url.com
    
por raco 10.01.2013 / 18:27

1 resposta

0

Supondo que você esteja fazendo isso para testar o seu servidor da Web, consulte o curl loader

Isso fará solicitações a um servidor da Web e usará um IP de cliente diferente para cada solicitação; ele também poderá solicitar páginas diferentes na mesma conexão simulando um usuário, por exemplo, indo para uma página de login e efetuando login, etc.

Ele funcionará com IPv4 e IPv6 e configurará o endereço IP para você, portanto, tudo o que você precisa fazer é fornecer um intervalo de IP, um número de conexões e conexões simultâneas e, em seguida, executar o comando.

    
por 10.01.2013 / 20:07