在我的 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/7
和0.0.0.2/7
值被转换为0.0.0.0/7
。因此我的条件端口转发不起作用。
关于如何做到这一点有什么建议吗?
答案1
PF 无法做到这一点。由于它是 FreeBSD,因此您可以使用 IPFilter 代替。是的,同时使用一组防火墙完全没问题,尽管人们应该清楚地了解它们可能产生的干扰。以防万一 — 通常,您可以通过这些防火墙更改其模块加载顺序来更改流量处理的顺序。