为所有进一步的示例创建合适的表/链设置

为所有进一步的示例创建合适的表/链设置

我在 Zorin 主机上运行 Ubuntu Server 18-04 VM。

我想使用 nftables 将通过 enp0s3 离开的所有数据包的源地址转换为 192.168.1.120。这是我所做的:

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
                                       ^^

这个错误对我来说似乎很奇怪,因为我得到了 nftables 手册页的这种语法:

使用 NAT 语句

为所有进一步的示例创建合适的表/链设置

添加表 nat 添加链 nat 预路由 { 类型 nat hook 预路由优先级 0; } 添加链 nat 后路由 { 类型 nat hook 后路由优先级 100; }

将通过 eth0 离开的所有数据包的源地址转换为地址 1.2.3.4

添加规则 nat postrouting oif eth0 snat 到 1.2.3.4

答案1

规则应该是 nft 添加规则 nat post “enp0s3 的子网地址” snat 到 192.168.2.120

例如enp0s3 子网地址可能像10.4.0.1/16

答案2

好的,我明白了。

“postrouting” 不是钩子而是链的名称。由于我的链名为“post”,因此正确的语法是:

nft add rule nat post oif enp0s3 snat to 192.168.2.120

相关内容