我在 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