Маршрутизация только исходящего трафика TCP через интерфейс tun0

Маршрутизация только исходящего трафика TCP через интерфейс tun0

У меня система Ubuntu 20, и я пытаюсь создать туннель между своей системой и удаленным сервером, поскольку моя клиентская система не может иметь входящий/исходящий TCP-трафик.

Я создал виртуальный интерфейс tun0 и хочу, чтобы TCP-пакеты направлялись только на этот интерфейс, чтобы моя программа могла их прочитать, обернуть пакет в другой протокол (например, DNS) и отправить его в конечную точку моего туннеля.

Я уже добился маршрутизации всего трафика со своего компьютера на интерфейс, но это лишит мою систему возможности передавать другой трафик, не связанный с TCP (например, пинговать мой маршрутизатор или google.com).

Правила, которые я использовал:

sudo ip route del default
sudo ip route add default via 10.1.0.1 dev tun0
sudo ip route add 192.168.1.127 via 192.168.1.1 dev ens33

Где 192.168.1.1 — мой gw по умолчанию, 10.1.0.1 — мой tun0 ip, 192.168.1.127 — мой сервер ip.

Как можно маршрутизировать только TCP-трафик?

решение1

Мне удалось добиться этого, используя другую таблицу маршрутизации и отметив определенные пакеты для маршрутизации с использованием этой таблицы.

Чтобы создать маршрут по умолчанию к IP-адресу моего интерфейса tun:

 ip route add default via 10.0.0.1 table 3

Чтобы пометить исходящие TCP-пакеты:

 iptables -t mangle -A OUTPUT -p tcp -j MARK --set-mark 2

И наконец, чтобы убедиться, что эти пакеты маршрутизируются с помощью таблицы 3, правило IP для пересылки помеченных пакетов:

ip rule add fwmark 2 table 3

Связанный контент