
Мне нужно перехватить трафик, идущий на внешний 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. Сделайте это постоянным с помощью сетевого менеджера вашего дистрибутива.