Como eu crio um dispositivo tun para a interface de rede física real?

1

Estou tentando criar um programa em C que crie uma interface de dispositivo tun para minha interface física do pc. A ideia toda é que quando eu escrevo qualquer pacote bruto no meu dispositivo de túnel, ele coloca isso na minha interface física real. Minha pergunta é como mapear o dispositivo tun com a interface física real?

Por exemplo, minha eth1 tem endereço IP - 10.16.1.152. Como posso criar um dispositivo tun para que eu possa ler / escrever na interface eth1? Preciso dar o mesmo endereço IP ou um endereço IP diferente? É rota única maneira que eu vou escrever pacotes no dispositivo tun e irá criar uma rota que terá um gateway padrão do dispositivo tun como um dispositivo phy.

Estou seguindo este exemplo , mas estou claro sobre o conceito ainda.

Eu criei um dispositivo de encapsulamento com os seguintes comandos. Meu PC tem uma interface ethernet real. Este endereço IP da interface ethernet 10.16.1.152 é conectado a um grupo de PCs e depois ao servidor de gateway para acessar a Internet.

Estou tentando criar um programa em C que grava pacotes de saudação do OSPF na interface.

Para fazer isso, estou criando um dispositivo de encapsulamento para que eu possa gravar pacotes de saudação do OSPF nele. Mas antes de fazer isso, estou verificando o dispositivo de túnel. Aqui meu dispositivo de túnel é 11.11.11.2/24 e estou configurando a rota para obter 10.16.1.152. O meu entendimento é que todos os pacotes recebidos ou enviados na interface real, ou seja, 10.16.1.152, serão recebidos por esta interface de dispositivo de túnel, cujo endereço IP é 11.11.11.2. Mas, quando eu fiz um ping para 10.16.1.152, os pacotes RX / Tx recebidos ainda são zero. Então, acho que meu túnel não está recebendo nenhum pacote.

ip tuntap add mode tun dev tun0
ip addr add 11.11.11.2/24 dev tun0
ip link set dev tun0 up
ip route get 10.16.1.152

Estou perdendo algum conceito aqui? Como posso fazer isso? Ainda estou lutando para esclarecer meus conceitos de dispositivo de túnel.

    
por dexterous_stranger 22.11.2017 / 04:37

1 resposta

1

Você não pode usar uma interface tun para "colocar pacotes reais em uma interface existente". Uma interface tun é sempre uma nova interface de rede, distinta de todas as interfaces existentes.

Mas você pode usar pacotes sockets para escrever pacotes brutos para (ou ler pacotes brutos de) uma interface de rede existente. Veja man 7 packet para detalhes. Mas você está ignorando todas as camadas de protocolo com isso, então você tem que implementar o comportamento de protocolo correto, então a menos que você realmente, realmente saiba o que está fazendo, não faça isso.

Você não disse o que realmente deseja alcançar e parece estar um pouco confuso sobre os conceitos, por isso pode ser um , e é perfeitamente possível que nem uma interface tun nem soquetes de pacotes sejam o que você realmente precisa.

    
por 22.11.2017 / 08:59