Quero que todo o meu tráfego passe pela TUN
interface.
Então, como você pode ver, o tráfego é roteado para o endereço TUN
iface 10.0.0.1
de cada programa. Então, o programa anexado TUN
faz algo com os pacotes e eles são enviados para o meu roteador em 192.168.1.1
. Em seguida, eles são roteados pela Internet (por exemplo, para o meu servidor proxy, mas isso não importa muito para o meu problema).
Portanto, meu objetivo é apenas direcionar o tráfego dessa maneira: $any_program
<--> tunX
<--> 192.168.1.1 (the router)
( <-->
isso significa que o tráfego entra e sai).
O que eu fiz até agora:
- Primeiro, inicializei
tunX
o dispositivo com esta função:
int tun_open(char *device)
{
struct ifreq ifr;
int fd, err;
fd = open("/dev/net/tun", O_RDWR);
if (fd == -1)
{
perror("opening /dev/net/tun");
exit(1);
}
memset(&ifr, 0, sizeof (ifr));
ifr.ifr_flags = IFF_TUN;
strncpy(ifr.ifr_ifrn.ifrn_name, device, IFNAMSIZ);
err = ioctl(fd, TUNSETIFF, (void *) &ifr);
if (err == -1)
{
perror("ioctl TUNSETIFF");
close(fd);
exit(1);
}
return fd;
}
E então:
tunfd = tun_open("tun6");
Além disso, eu habilitei TUNSETPERSIST
:
ioctl(tunfd, TUNSETPERSIST, 1) < 0);
- Então, configurei o dispositivo com os seguintes comandos:
$ sudo ip addr add 10.0.0.1/24 dev tun6
$ sudo ip link set tun6 up
O programa lê tunfd
e gera o conteúdo. Até agora a única coisa que lê é o seguinte:
:B\{k
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 1
ST: urn:dial-multiscreen-org:service:dial:1
USER-AGENT: Google Chrome/86.0.4240.198 Linux
% N%*.%K%M%P%M%M%M%HP%,%M%*K%(aP%>O%M%LqP%@K%`P%P%Ҵ u@=U繤湤}=UoK%0=U
ssdp: descobrir? Por que isso está passando pela minha interface tun?
Saída de route -n
:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 wlp2s0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun6
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlp2s0
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp2s0
Tenho brincado com programas iptables
e ip route
programas, mas sou meio novato em tudo isso. Pelo que entendi, iptables
na verdade não encaminha os pacotes, mas os filtra (posso estar muito errado). Então, existe uma maneira de rotear os pacotes ip route
?
Responder1
O roteamento normal é baseado em destinos, não em interfaces (a menos que você configure o roteamento baseado em políticas); portanto, você precisa rotear todo o tráfego de saída para a 10.0.0.0/24
rede:
ip route del default
ip route add default via 10.0.0.254
Na verdade não importa por qual endereço 10.0.0.0/24
você o envia, ele deve chegar ao seu programa.