[Q] Форвардинг через userspace tun на linux

День добрый! Есть репо GitHub - Diniboy1123/usque: Open-source reimplementation of the Cloudflare WARP client's MASQUE protocol. в котором реализовано создание tun интерфейса WARP. С помощью iproute2 можно сделать его как default машрут на системе. Но никак не получается запустить комп как роутер, который весь трафик отправляет в WARP. Подскажите как сделать WARP default шлюзем для роутера и всех его клиентов? Также при работе с клиентами, в моменты когда все работает иногда, наблюдаются дичайшие тормоза на клиентах, но потом все соединение просто зависает.

делал так

usque nativetun --sni-address=rkn.userapi.com --interface-name=tun0
sudo ip r a 162.159.xxx.xxx/32 via 192.168.1.1 dev eno1 metric 10
sudo ip r a default dev tun0 metric 100
sudo ip -6 r a default dev tun0 metric 100
далее делал маскардинг для v4 и v6 адресов с br-lan на tun0 по ниче не работало

А default route через dev eno1 с какой метрикой? Или есть еще какие-то default route в выводе ip r?

полагаю это из-за отсутствия mssfix

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

можно сделать так

ip route add default tun0 table 100
ip rule add from 192.168.1.100/32 table 100

А можете для nftables сказать ?

10000 метрика на роутер default
default это ж 0.0.0.0/0, но ведь сначала применябтся маршруты с наибольшей маской, т е сначала отработают /32 правила, а default когда ничего не подошло.

на warp интерфейс tun0 ставится ipv4 затычка 172.16.0.2/32 и ipv6 2606:4700:110:че-то там:1/128, так что там надо маскардить все на ip роутера
client(192.168/24) —> [ router (192.168/24) - masquerade (br to tun0) - tun0 via eno1 - eno1 (10/32 via ISP) ]

nft add rule ip filter forward tcp flags syn / syn,rst tcp option maxseg size set rt mtu

Может быть несколько default марштуров, например:

default via 192.168.0.1 dev enxX proto static 
default via 192.168.1.1 dev vlan1 proto static metric 100 
default via 192.168.2.1 dev vlan2 proto static metric 200 
default via 192.168.3.1 dev vlan3 proto static metric 300 

Можете отправить все настройки сети, чтобы понять, что и как у вас настроено?

ip a
ip r
ip rule
nft list ruleset
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc cake state UP group default qlen 1000
    link/ether 66:17:8a:f9:22:cd brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.9/24 brd 192.168.1.255 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::3701:f958:3ad2:6652/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: wlo9: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 7a:94:51:db:b0:02 brd ff:ff:ff:ff:ff:ff
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc cake state UNKNOWN group default qlen 500
    link/none 
    inet 172.16.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 2606:4700:110:xxxx:xxxx:xxxx:xxxx:xxxx/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::fd32:b15e:86d0:1ecf/64 scope link stable-privacy proto kernel_ll 
       valid_lft forever preferred_lft forever
ip r
default dev tun0 scope link metric 10000 
default via 192.168.1.1 dev eno1 proto static metric 90000 
162.159.198.1 via 192.168.1.1 dev eno1 metric 10 
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.9 metric 100 
ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
`nft list ruleset`
table ip warp4 {
     chain masq4 {
         type nat hook prerouting priority srcnat; policy accept;
         iifname "br" masquerade
     }
}
table ip6 warp6 {
     chain masq6 {
         type nat hook prerouting priority srcnat; policy accept;
         iifname "br" masquerade
     }
}

172.16.11.254 - это точно правильный шлюз, который досупен в сети интерфейса eno1, у которого default маршрут через 192.168.1.1?

Где правило маскарадинга?

И какой из интерфейсов LAN?

И еще добавьте маршрут к 192.168.1.0/24, а то у вас соединения к 192.168.1.0/24 идут через tun0:

192.168.1.0/24 dev eno1 proto kernel scope link

исправил вывод

Все работает с компа

LAN это br в перспективе, по можно и wlo тоже рассматривать

Исправьте prerouting на postrouting.

Помогло, спасибо

nft
sudo nft create table ip my
sudo nft "create chain ip my forw { type filter hook forward priority filter; policy accept; }"
sudo nft add rule ip my forw tcp flags syn tcp option maxseg size set rt mtu