
Estou tentando fazer um programa C que criará uma interface de dispositivo tun para a interface física do meu pc. A idéia é que, quando eu escrever qualquer pacote bruto em meu dispositivo de túnel, ele o coloque em minha interface física real. Minha pergunta é como mapear o dispositivo tun com a interface física real?
Por exemplo, meu eth1 tem endereço IP - 10.16.1.152. Como posso criar um dispositivo tun para poder ler/escrever na interface eth1? Preciso fornecer o mesmo endereço IP ou um endereço IP diferente? É a única maneira de escrever pacotes no dispositivo tun e criar uma rota que terá um gateway padrão do dispositivo tun como um dispositivo phy.
Eu estou seguindoeste exemplo, mas ainda não estou claro sobre o conceito.
Eu criei um dispositivo de túnel com os seguintes comandos. Meu PC tem uma interface Ethernet real. Este endereço IP da interface Ethernet 10.16.1.152 conectou-se a vários PCs e depois ao servidor gateway para acessar a Internet.
Estou tentando criar um programa C que grave pacotes de saudação OSPF na interface.
Para fazer isso, estou criando um dispositivo de túnel para poder escrever nele pacotes de saudação OSPF. Mas antes de fazer isso, estou verificando o dispositivo do túnel. Aqui meu dispositivo de túnel é 11.11.11.2/24 e estou definindo a rota para obter 10.16.1.152. 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 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 faltando algum conceito aqui? Como posso fazer isso? Ainda estou lutando para esclarecer meus conceitos de dispositivos de túnel.
Responder1
Você não pode usar uma tun
interface para "colocar pacotes reais em uma interface existente". Uma tun
interface é sempre uma nova interface de rede, distinta de todas as interfaces existentes.
Mas você pode usarsoquetes de pacotespara gravar pacotes brutos (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ê mesmo tem que implementar o comportamento correto do protocolo, a menos que você realmente,realmentesabe 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, então este pode ser umProblema XY, e é perfeitamente possível que nem uma tun
interface nem soquetes de pacotes sejam o que você realmente precisa.