Eu sei que a ferramenta ip permite vincular vários endereços a uma interface (por exemplo, http://www.linuxplanet.com/linuxplanet/tutorials/6553/1/ ). No momento, estou tentando criar algo sobre o IPv6, e seria realmente útil ter um bloco inteiro de endereços (por exemplo, um / 64) disponível, para que os programas pudessem escolher qualquer endereço do intervalo e vincular a isso. Desnecessário dizer que a conexão de todos os IP desse intervalo a uma interface levaria um tempo.
O Linux suporta a ligação de um bloco inteiro de endereços a uma interface?
Respostas:
O Linux 2.6.37 e superior suporta isso por meio de um recurso chamado AnyIP . Por exemplo, se eu correr
em uma máquina Ubuntu 11.04, ele aceitará conexões em qualquer endereço na rede 2001: db8 :: / 32.
fonte
ip route list
ouip -6 route list
a rota adicionada não é visível. Como você enumeraria um bloco de endereço AnyIP?Sim, o Linux suporta a ligação de um bloco de endereços de rede a uma interface de rede ... mas apenas na interface de loopback. Então você pode fazer isso:
E então faça o seguinte:
Com as rotas apropriadas, isso fará o que você deseja ... para endereços IPv4. Você perguntou sobre IPv6 e eu não tenho nenhuma experiência com IPv6, mas há uma boa chance de que funcione da mesma maneira.
Eu li originalmente sobre isso aqui (no final do artigo). Observe que este artigo também discute como atribuir explicitamente vários endereços a uma interface usando os recursos do CentOS / Red Hat que eu não conhecia anteriormente.
fonte
ip -6 route add local <ip> dev lo
.Então, eu vejo algumas opções aqui:
use um script para vincular todos os endereços à interface individualmente
direcione o bloco que você deseja para o endereço único da sua máquina e faça com que a máquina use a interface pcap para interceptar todo o tráfego desse bloco (como se fosse um roteador) e manipulá-lo.
Você pode fazer truques com regras NAT de maneira fácil, para reescrever um bloco de Ips que foram roteados para uma máquina em um único IP interno nessa máquina ... mas você ainda terá um IP interno por IP que realmente deseja pagar. atenção, o que leva você de volta à solução 1.
Se eu fosse você, escreveria o pequeno script na opção 1. Ou use o daqui :
fonte
Como já foi dito, você pode usar o mecanismo AnyIP para rotear pacotes de chegada de uma sub-rede inteira para a interface localhost, mas lembre-se de que você também precisará que seu roteador upstream direcione todos os pacotes desejados para esta máquina em o primeiro lugar. Isso pode ser feito simplesmente com entradas da tabela de roteamento no roteador ou via BGP. O ARP não é realmente apropriado, uma vez que sua máquina precisaria ARP para cada IP individualmente.
fonte
O "Anyip" descrito acima não funcionou para mim no centos 7. Eu tive que criar um script para criar manualmente endereços IPv6 na inicialização. Para fazer isso, adicionei o seguinte ao / etc / crontab:
Aqui está o script bash para criar aproximadamente 3000 endereços ipv6:
fonte