在 nftables 中,如果相应接口分配了多个 IP 地址,我们如何获取数据包传入的 IP 地址?

在 nftables 中,如果相应接口分配了多个 IP 地址,我们如何获取数据包传入的 IP 地址?

2022年9月15日更新:

事实证明,我试图实现的目标没有多大意义。因此,实际上这个问题应该删除。然而,有一些非常有启发性的评论;因此,我将暂时保留其原样,并将其命运的决定权留给社区。

原问题:

目前我正在努力学习nftables并取得了一些进展。现在我遇到了以下问题(如果问题很愚蠢,请耐心等待,但所有引用都链接到 wiki.netfilter.org,该网站目前已关闭(我通常的运气:-)):

我有一个 IPv4 网络,其中有一些客户端 PC 和正在运行的路由器/防火墙 PC nftables。路由器有两个 IP 地址,192.168.20.253192.168.20.254。前者仅用于管理路由器(例如,SSH 守护程序正在该地址上的路由器上侦听),而后者是客户端应使用的网关地址。

在路由器的nftables规则集中,我希望能够区分通过的数据包(对于此类数据包,当(目标地址)实际上是时,.253我只允许 SSH )和通过的数据包(对于此类数据包,我仅当位于本地网络之外时才允许它们)。daddr.253.254daddr

.253我知道如果和.254被分配给两个不同的接口如何实现这一点。但这种情况并非如此;两个路由器 IP 地址都分配给同一接口。

有人可以给我提示吗?我在 中没有找到提示man nft。它提到了像ipor 这样的路由表达式nexthop,但这显然没有帮助。我是否需要创建两个接口(在同一网卡上)并分配.253给其中一个和.254另一个?

答案1

路由器有两个 IP 地址,192.168.20.253 和 192.168.20.254 ...两者...都分配给同一个接口

所以我们有这样的东西:

# ip addr
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:f8:ed:0e brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.254/24 brd 192.168.20.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.20.253/24 brd 192.168.20.255 scope global secondary enp0s8
       valid_lft forever preferred_lft forever

因此两者都位于相同的物理以太网端口 (L1) 和相同的 MAC 地址 (L2) 上。

我想阻止客户端通过 .253 访问互联网

也就是说,客户端可以将其计算机上的网关配置192.168.20.253192.168.20.254

在路由器的 nftables 规则集中,我希望能够区分哪些数据包进来通过.253

让我们看看这里有什么问题。

...

原因之一是我希望以后能够轻松地将 .253 更改为其他内容(而 .254 是“固定的”)。

运行简单的 DNS 服务器并让客户端使用 DNS 名称而不是 IP 进行连接。

但我知道我无法以正常方式实现这一目标

您的场景中的正常方法是检查目标 IP 并设置 DNS。往上看。

我将尝试创建第二个接口,并将其分配给 .253;这将解决问题。

如果您想在物理层和数据链路层分离用户,则只需要一个单独的接口。

此外,您使用的 IP 地址都来自同一 IP 子网,因此即使有两个接口也没有任何意义,并且当通过两个接口访问同一子网时,您还会遇到路由问题。

您不能将 192.168.20.253 和 192.168.20.254 置于大于 /31 前缀的不同子网中。

相关内容