2022 年 9 月 15 日更新:
事实证明,我试图实现的目标没有多大意义。因此,实际上这个问题应该被删除。但是,有一些非常有启发性的评论;因此,我暂时将其保留原样,并将有关其命运的决定留给社区。
原始问题:
我目前正在努力学习nftables
并取得了一些进展。现在我有以下问题(如果问题很愚蠢,请多多包涵,但所有引用都链接到 wiki.netfilter.org,目前已关闭(我通常的运气:-)):
我有一个 IPv4 网络,其中包含一些客户端 PC 和正在运行的路由器/防火墙 PC nftables
。路由器有两个IP地址,192.168.20.253
和192.168.20.254
。前者仅用于管理路由器(例如,SSH 守护程序正在该地址上侦听路由器),而后者是客户端应使用的网关地址。
在路由器的nftables
规则集中,我希望能够区分传入的数据包(对于此类数据包,当(目标地址)实际上是.253
时,我将只允许 SSH )和传入的数据包(对于此类数据包,我如果在本地网络之外,则只允许它们)。daddr
.253
.254
daddr
.253
如果和.254
被分配给两个不同的接口,我知道如何实现这一点。但这种情况并非如此; 两个路由器 IP 地址都分配给同一个接口。
有人可以给我小费吗?我没有找到提示man nft
。ip
它提到了or之类的路由表达式nexthop
,但这显然没有帮助。我是否需要创建两个接口(在同一个 NIC 上)并分配.253
给其中一个和.254
另一个?
所以我们有类似的东西:
因此,两者都在相同的物理以太网端口(L1)和相同的 MAC 地址(L2)上。
也就是说,客户端可以将其计算机上的网关配置
192.168.20.253
为192.168.20.254
让我们看看这里有什么问题。
...
运行简单的 DNS 服务器并让客户端使用 DNS 名称而不是 IP 进行连接。
您的场景中的正常方法是检查 dst IP 并设置 DNS。看上面。
如果您想在物理层和数据链路层分离用户,您只需要一个单独的接口。
此外,您使用的 IP 地址来自同一个 IP 子网,因此即使使用两个接口也没有任何意义,而且当通过两个接口访问同一个子网时,您也会遇到路由问题。
您不能使 192.168.20.253 和 192.168.20.254 位于大于 /31 前缀的不同子网中。