FreeBSD nat 通过 PF:如何从随机 UDP 端口更改为增量?

FreeBSD nat 通过 PF:如何从随机 UDP 端口更改为增量?

我正在测试 NAT 穿透代码,需要一个对称 NAT。我已经使用 PF 配置了 FreeBSD,规则非常简单:

# rl0 in WAN on DHCP, sk0 is LAN with computers behind this NAT.
nat on rl0 from sk0:network to any -> (rl0)

这很有效,NAT 对 UDP 数据包来说是对称的,但不幸的是,每个数据包到不同目的地的传出端口号都是随机的。是否有一种配置 PF 的方法,使端口不是随机的,而是某种增量?例如,发送到主机 A 的 UDP 数据包将获得传出 UDP 端口号 50000,发送到主机 B 的 UDP 数据包将获得端口号 50001,发送到主机 C 的 UDP 数据包将获得端口号 50002 等等?

答案1

static-port选项应该可以实现您想要的效果。

使用 nat 规则,静态端口选项可防止 pf(4) 修改 TCP 和 UDP 数据包上的源端口。

从而给你一个规则。

nat on rl0 from sk0:network to any -> (rl0) static-port

不过我很好奇你为什么要这么做。端口随机化并不是一件坏事,而且可以在某种程度上保护易受攻击的协议。例如去年的 Kaminsky DNS 问题。

答案2

只是猜测,但你可以尝试

# sysctl net.inet.ip.portrange.randomized=0

相关内容