Roteie todo o tráfego através da interface TUN

Roteie todo o tráfego através da interface TUN

Quero que todo o meu tráfego passe pela TUNinterface.

Aqui está o fluxograma

Então, como você pode ver, o tráfego é roteado para o endereço TUNiface 10.0.0.1de cada programa. Então, o programa anexado TUNfaz 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:

  1. Primeiro, inicializei tunXo 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);
  1. 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ê tunfde 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 iptablese ip routeprogramas, mas sou meio novato em tudo isso. Pelo que entendi, iptablesna 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/24rede:

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/24você o envia, ele deve chegar ao seu programa.

informação relacionada