问题标签 [nftables]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nat - 使用 libnftnl API 添加 nftables nat 规则
我想使用 nftables 添加以下snat
规则dnat
:
在这里,pre
andpost
是nat
表中链的名称,我使用以下命令添加了这些链:
我已经用nft
命令检查了它,它工作得很好。
我想通过我的应用程序中的 API 方法来实现相同的目标。libnftnl库中提供了一些示例和测试程序。根据nft-rule-add.c和nft-expr_nat-test.c的参考,我做了一个相同的测试应用程序,如下所示:
在这里,main()
函数调用setup_rule()
是构建整个规则的地方。setup_rule()
调用构建add_nat()
表达式的snat
位置。应该用于snat
或dnat
作为参数传递给的 IP 和端口add_nat()
。据我了解,建立规则的哲学是用各种表达方式建立规则。在add_nat()
一个表达是为做snat
而建的,这就是我开始摸索的地方。不知道如何处理NFTNL_EXPR_NAT_REG_ADDR_MIN
和NFTNL_EXPR_NAT_REG_PROTO_MIN
种类的宏。如何传递将在 snat 或 dnat 中使用的 IP 地址和端口地址。
我按如下方式运行上述测试应用程序:
并使用以下命令
得到如下输出:
可能是方法不对,但是,如上图,最后显示snat to
出来了。这让我希望这是前进的道路。我还挖掘了nftables实用程序代码,但无济于事。
所以要列出所有查询:
- 如何使用 nftable api添加
snat
或规则?dnat
- 有什么用
NFT_REG_1
?这些寄存器应该如何使用以及应该在哪里使用? - 命令输出中@之后写的是
nft list table nat -a
什么?当我使用命令应用规则时,nft
它不会在 @ 之后的输出中显示信息nft list table
- 此外,命令
ip addr 0.0.0.0
的输出中还显示了一个额外的内容。nft list table nat -a
在哪里添加?
ipv6 - 如何通过 nftables 进行 NETMAP
我的局域网中有一些家庭服务器,通过adsl连接到互联网我的路由器是基于linux的x86服务器,我在上面写了脚本几个月前我将脚本更新为nftables ...
它在 ipv4 中运行良好....
有一天,我发现我的isp通过dhcp-pd提供了ipv6 由于ipv6地址可能会改变,服务器上设置静态全局ipv6地址会很困难。然后我正在考虑使用唯一的本地地址。我需要类似的东西: ip6tables -t nat -A POSTROUTING -o eth0 -s fc00::/64 -j NETMAP --to 2006::/64 将地址转换为全局地址(并使用适当的 dnat 规则)但是我在 nftables 中找不到类似的东西......
我查看了官方 wiki: nft_nat
但我无法理解如何使用 nft_nat。
如果它是 ipv4 中的 /24 块,甚至可以将所有地址枚举到映射中。但是在 ipv6 中枚举 /64 块真的是不可能的......
那么有没有办法通过 nftables 来做 netmap 呢?或者我必须恢复到 ip(6)tables?或者有什么其他建议?
谢谢你。
nftables - 测试数据包不匹配集
我想编写一个 nftables 规则来匹配在集合中找不到的数据包字段:
不幸的是,这给出了一个语法错误:“意外!” 将“不”移动到语句中的其他各种可能点对错误消息没有影响。是否允许否定?
tunnel - 让 SSH 隧道工作的 nft 规则是什么?
我可以使用 nft 中的“所有 IP 都匹配”规则进行 SSH 连接:
SSH 隧道在没有上述规则集的情况下工作,但在出现 nft 规则集时不起作用:
问题:在保持输入策略“丢弃”的同时使 SSH 隧道正常工作的最小规则是什么?
docker - 如何使用 nftables 从系统上的 Docker 容器发布端口?
我有一个相当简单的 Debian Buster 安装。Debian Buster 使用 nftables 而不是 iptables。如果我尝试运行具有已发布端口的容器:
然后我得到这个错误:
如何让端口发布工作?
nftables - 在 nftables 中添加规则时如何指定子网掩码?
在 nftables 中添加规则时如何指定子网掩码?
紧跟在指定 IP 地址后面的斜杠会导致语法错误。
结果是
(操作系统:Debian Buster:nftables v0.9.0)
logging - nftables:如何记录从路由器发出的数据包?
我们的 VoIP 突然出现故障,无法连接。我可以看到 UDP 5060 数据包通过以下线路进入路由器:
但是我没有找到记录输出的技巧,以确保数据包被发送到 ADSL 盒子。以下两行不时给出一个数据包(大约 1 比 100)。
我用 tcp 端口 80 进行了测试(互联网工作正常),这给出了相同的结果,所以这并不意味着 5060 数据包丢失,而只是日志写得不好。
我知道我可以使用 wireshark 或 tcpdump 来做到这一点,如这篇文章所示: 分析从我的计算机发出的数据包, 但在 nftables 内有一个连续的日志对我来说更容易
ipv6 - nftables - IPv6 端口敲击 - 接受整个子网
我想将端口敲门添加到已经在工作的服务器上。我的客户端发送数据包的神奇序列,服务器将在特定时间将其添加到一组允许的客户端的 nftables 中。因此,允许客户端使用某些服务。有关详细信息,请参阅下面的我的配置。
现在我想从我的路由器自动敲击端口。对于 IPv4,这是可行的,但对于 IPv6,这是行不通的,因为不涉及 NAT,因此每个客户端都有一个唯一的地址。这就是为什么我想将敲门客户端的整个子网 (/56) 添加到允许的客户端集。
这可能使用 nftables 吗?我读过“标志间隔”,但我不明白如何动态地将客户端子网添加到它。
set - 无法刷新 nftable 元素的集合
我实际上正在学习在测试环境中使用 nftables,并且我实际上正在使用 nftables 集。我使用的是 0.7 版,由于我的测试无法正常工作,我更新到 0.9.4 版,但我的问题仍然相同。
我可以毫无问题地在我的桌子上创建我的套装。而且我的集合元素必须包含 ipv4 地址。我使用 nftables 表、链和集合没有问题,我的规则有效等等......
所以我想做但找不到怎么做的是删除我所有的集合元素,而不是一一精确的ipv4地址。
假设我的表名称是test并且我的设置名称是tmp类型为 ipv4_addr,我的配置将如下所示:
我可以使用以下命令成功地将元素添加到该集合中:
现在我要做的是删除我的集合中的所有元素,我查看了 nft 的手册页,它说我可以使用 flush 命令刷新集合中的所有元素:
所以我尝试了这个命令从我的集合中删除我的所有元素:
但它返回给我这个错误:
我以相同的方式尝试了很多命令(在设置之前添加表格,而不是精确表格),它总是返回错误,但并非每次都相同。
我想我一定做错了什么,但我不知道是什么。如果你有任何想法,请?我将非常感谢!
也许我的整体配置不好,我不能这样想套?
如果无法从集合中刷新元素,有没有办法从集合中删除所有元素(除了定义标志超时)?
抱歉,如果我的信息不清楚,我是法语,用另一种语言来描述问题有点困难......
谢谢!
问候。