В интернете документации не очень много, и зачастую не в лучшем виде.
все оказалось сравнительно просто: echo "100 ext" >> /etc/iproute2/rt_tables
nmcli co add type ethernet ifname enp6s19 con-name enp6s19
nmcli co mod enp6s19 ipv4.addresses 192.168.1.230/24
nmcli connection modify enp6s19 +ipv4.method manual
и основное:
nmcli co modify enp6s19 ipv4.routes "0.0.0.0/1 192.168.1.1 table=100, 128.0.0.0/1 192.168.1.1 table=100"
nmcli co modify enp6s19 ipv4.routing-rules "priority 100 from 192.168.1.230/24 table 100"
Поднимаем интерфейс и проверяем:
nmcli co up enp6s19
$ ip route show table ext 0.0.0.0/1 via 192.168.1.1 dev enp6s19 proto static metric 101 128.0.0.0/1 via 192.168.1.1 dev enp6s19 proto static metric 101 $ ip rule list 32764: from 192.168.1.230 iif enp6s19 lookup ext
Успех.
PS: путь через "nmcli .. ipv4.route-table 100" - ошибочен. Согласно [[документации]][1] [1]: https://networkmanager.dev/docs/api/latest/nm-settings-nmcli.html "документации" - эта функция переносит все маршруты во внешнюю таблицу, но переносит и основные, статичные маршруты, из-за чего даже пинг до шлюза ходить не будет. Создано для совместимости, используется при управлении интерфейсом, который управляется НЕ из nmcli.