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