freebsd数据包过滤器匹配IP地址的最后一位数字

freebsd数据包过滤器匹配IP地址的最后一位数字

在我的 freebsd 系统上,我想根据源 IP 的最后一位数字使用端口转发来分配传入流量。

以下操作在具有 iptables 的 Linux 上进行:

iptables -t nat -A PREROUTING -p tcp -s 0.0.0.0/0.0.0.7 -d w.x.y.z --dport 443 -j DNAT --to-destination :4431
iptables -t nat -A PREROUTING -p tcp -s 0.0.0.1/0.0.0.7 -d w.x.y.z --dport 443 -j DNAT --to-destination :4432
iptables -t nat -A PREROUTING -p tcp -s 0.0.0.2/0.0.0.7 -d w.x.y.z --dport 443 -j DNAT --to-destination :4433
iptables -t nat -A PREROUTING -p tcp -s 0.0.0.3/0.0.0.7 -d w.x.y.z --dport 443 -j DNAT --to-destination :4434
iptables -t nat -A PREROUTING -p tcp -s 0.0.0.4/0.0.0.7 -d w.x.y.z --dport 443 -j DNAT --to-destination :4435
iptables -t nat -A PREROUTING -p tcp -s 0.0.0.5/0.0.0.7 -d w.x.y.z --dport 443 -j DNAT --to-destination :4436
iptables -t nat -A PREROUTING -p tcp -s 0.0.0.6/0.0.0.7 -d w.x.y.z --dport 443 -j DNAT --to-destination :4437
iptables -t nat -A PREROUTING -p tcp -s 0.0.0.7/0.0.0.7 -d w.x.y.z --dport 443 -j DNAT --to-destination :4438

它的作用是将子网掩码应用于 IP 地址的最后一位数字来计算模值。

现在,如何在使用数据包过滤器的 freebsd 上执行此操作?我尝试了以下方法:

rdr log on vmx1 inet proto tcp from 0.0.0.1/7 to w.x.y.z port = https -> w.x.y.z port 4432 round-robin
rdr log on vmx1 inet proto tcp from 0.0.0.2/7 to w.x.y.z port = https -> w.x.y.z port 4433 round-robin

不幸的是,0.0.0.1/70.0.0.2/7值被转换为0.0.0.0/7。因此我的条件端口转发不起作用。

关于如何做到这一点有什么建议吗?

答案1

PF 无法做到这一点。由于它是 FreeBSD,因此您可以使用 IPFilter 代替。是的,同时使用一组防火墙完全没问题,尽管人们应该清楚地了解它们可能产生的干扰。以防万一 — 通常,您可以通过这些防火墙更改其模块加载顺序来更改流量处理的顺序。

相关内容