Маршрутизировать весь трафик через интерфейс TUN

Я хочу, чтобы весь мой трафик проходил TUN интерфейс.
Вот блок-схема

Итак, как видите, трафик направляется на TUN ифейс на 10.0.0.1 адрес из каждой программы. Затем программа, прикрепленная к TUN что-то делает с пакетами, а затем они отправляются на мой маршрутизатор на 192.168.1.1. Затем они маршрутизируются через Интернет (например, на мой прокси-сервер, но на самом деле это не имеет большого значения для моей проблемы).

Итак, моя цель – просто направить трафик таким образом: $any_program <--> tunX <--> 192.168.1.1 (the router) (<--> вещь означает, что трафик входит и выходит).

Что я сделал до сих пор:

  1. Сначала я инициализировал tunX устройство с этой функцией:
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;
}

А потом:

tunfd = tun_open("tun6");

Также я включил TUNSETPERSIST:

ioctl(tunfd, TUNSETPERSIST, 1) < 0);
  1. Затем я настроил устройство с помощью следующих команд:
$ sudo ip addr add 10.0.0.1/24 dev tun6
$ sudo ip link set tun6 up                                                 

Программа читает из tunfd и выводит контент. Пока что там написано только следующее:

: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: обнаружить? Почему это проходит через мой интерфейс tun?

Выход 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

Я играл с iptables и ip route программ, но я как бы новичок во всем этом. Насколько я понял, iptables на самом деле не маршрутизирует пакеты, а фильтрует их (я могу ошибаться). Итак, есть ли способ маршрутизировать пакеты с помощью ip route?

Спасибо, что прочитали все эти n00b материалы, которые я здесь написал. Желаю вам помочь мне!

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *