Как направить весь трафик, идущий на определенный адрес, на локальный хост с помощью nft?

Как направить весь трафик, идущий на определенный адрес, на локальный хост с помощью nft?

Мне нужно перехватить трафик, идущий на внешний IP, и перенаправить его на localhost. Это довольно просто с помощью iptables, но я не смог понять, как заставить это работать через nft. Я создал таблицу и цепочку внутри nft, но не смог создать правило, nft говорит Operation not supported.

Таблицы

sudo /usr/sbin/nft list ruleset
table ip filter {
        chain OUTPUT {
                type filter hook output priority filter; policy accept;
        }
}

Правило

sudo /usr/sbin/nft  add rule ip filter OUTPUT ip daddr $EXTERNAL_ADDRESS counter dnat to 127.0.0.1
Error: Could not process rule: Operation not supported

Модули ядра

lsmod | grep nf_tables
nf_tables             360448  1 nft_nat
libcrc32c              12288  3 nf_conntrack,nf_nat,nf_tables
nfnetlink              20480  1 nf_tables

Что не так с моим правилом или можно ли его упростить?

решение1

Назначьте IP-адрес хосту. Маршрутизация всего трафика — это то, для чего нужна таблица пересылки, брандмауэр может это сделать, но это часто не нужно.

Например, назначение IP-адреса, который я создал, для обратной связи в Linux:

  ip a add 2001:db8:114:6402::1020 dev lo

Как маршрут одного хоста, он будет иметь приоритет, даже если он обычно существует в другом месте в Интернете. На интерфейсе loopback другие хосты не будут знать о нем, он будет доступен только трафику, «выходящему» из того же хоста.

Если хостом является маршрутизатор, решите, хотите ли вы, чтобы эта информация была известна другим маршрутизаторам или нет.

Упражнения для читателя: зарегистрируйте это в IPAM и DNS. Сделайте это постоянным с помощью сетевого менеджера вашего дистрибутива.

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