Я хочу, чтобы весь мой трафик проходил TUN
интерфейс.
Вот блок-схема
Итак, как видите, трафик направляется на TUN
ифейс на 10.0.0.1
адрес из каждой программы. Затем программа, прикрепленная к TUN
что-то делает с пакетами, а затем они отправляются на мой маршрутизатор на 192.168.1.1
. Затем они маршрутизируются через Интернет (например, на мой прокси-сервер, но на самом деле это не имеет большого значения для моей проблемы).
Итак, моя цель — просто направить трафик таким образом: $any_program
<--> tunX
<--> 192.168.1.1 (the router)
(<-->
вещь означает, что трафик входит и выходит).
Что я сделал до сих пор:
- Сначала я инициализировал
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);
- Затем я настроил устройство с помощью следующих команд:
$ 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 материалы, которые я здесь написал. Желаю вам помочь мне!