Переведите исходный адрес всех пакетов, покидающих определенный интерфейс, с помощью nftables

Я использую виртуальную машину Ubuntu Server 18-04 на хосте Zorin.

Я хочу перевести исходный адрес всех пакетов, отправляемых через enp0s3, в 192.168.1.120 с помощью nftables. Вот что я сделал:

apt install nftables

modprobe nft_nat

modprobe nft_chain_nat_ipv4

nft add table nat

nft add chain nat post { type nat hook postrouting priority 0 \; }

nft add chain nat pre { type nat hook prerouting priority 0 \; }

nft add rule nat postrouting oif enp0s3 snat to 192.168.2.120

Я получил:

Error: Could not process rule: No such file or directory

Согласно этому посту здесь

"Примечание. Возможно, вам придется создать /etc/modules-load.d/nftables.conf со всеми модулями, относящимися к nftables, которые требуются в качестве записей для правильной работы службы systemd. Вы можете получить список модулей, используя эту команду: $ lsmod | grep '^nf' В противном случае вы можете получить страшную ошибку: не удалось обработать правило: нет такого файла или каталога."

Вывод $ lsmod | grep '^ nf' это:

nft_chain_nat_ipv4     16384  2    
nf_conntrack_ipv4      16384  1    
nf_defrag_ipv4         16384  1 nf_conntrack_ipv4    
nf_nat_ipv4            16384  1 nft_chain_nat_ipv4    
nft_nat                16384  0    
nf_nat                 32768  2 nft_nat,nf_nat_ipv4    
nf_conntrack          131072  4    
nft_nat,nf_conntrack_ipv4,nf_nat_ipv4,nf_nat    
nf_tables_inet         16384  4    
nf_tables_ipv6         16384  1 nf_tables_inet    
nf_tables_ipv4         16384  2 nf_tables_inet    
nf_tables              90112  5     
nft_nat,nft_chain_nat_ipv4,nf_tables_ipv6,nf_tables_ipv4,nf_tables_i$    
nfnetlink              16384  1 nf_tables

Я вырезал и вставил это в /etc/modules-load.d/nftables.conf Файл без успеха.

Кто-нибудь знает, как я могу решить эту ошибку?

РЕДАКТИРОВАТЬ:

Я изменил порядок, добавил цепочки, сначала я добавил цепочку "pre", а затем цепочку "post". Теперь я получаю другую ошибку:

nft add rule nat postrouting oif eno1 snat to 192.168.2.120
<cmdline>:1:40-41: Error: syntax error, unexpected to
add rule nat postrouting oif eno1 snat to 192.168.2.120
                                       ^^

Эта ошибка кажется мне странной, так как я получил этот синтаксис для man-страницы nftables:

Использование операторов NAT

создать подходящую таблицу / цепочку для всех последующих примеров

добавить таблицу nat добавить цепочку nat prerouting { type nat hook prerouting priority 0; } добавить цепочку nat postrouting { type nat hook postrouting priority 100; }

переводить исходные адреса всех пакетов, отправляемых через eth0, в адрес 1.2.3.4

добавить правило nat postrouting ethif snat в 1.2.3.4

2 ответа

Хорошо, я понял это.

"postrouting" - это не крючок, а название цепочки. Поскольку моя цепочка была названа "пост", правильный синтаксис:

nft add rule nat post oif enp0s3 snat to 192.168.2.120

Правило должно быть nft добавить правило nat post "адрес подсети enp0s3" snat в 192.168.2.120

Пример адреса подсети enp0s3 может быть похож на 10.4.0.1/16

Другие вопросы по тегам