![pf 端口转发](https://linux22.com/image/494219/pf%20%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91.png)
我已经完成了 pf 防火墙/NAT 路由器设置的基本工作;流量正常出站,端口 53 上的 DNS 请求映射到内部子网并成功返回(端口号没有变化)。但我被困在从内部网关到需要转换端口的机器的端口转发上。以下是我得到的似乎不起作用的东西:
rdr on $ext_if inet proto tcp from any to 192.168.1.101 port 24 -> 192.168.0.105 port 22
pass in on $ext_if inet proto tcp from any to 192.168.0.105 port 22
网络是公共 IP => 此网关位于 192.168.1.101 => 需要 ssh 访问的机器位于 192.168.0.105
公共地址上的端口 22 正在不同的子网中使用(与 192.168.0.1/32 网络并行的 10. 网络)。
供参考,以下内容有效:
rdr on $ext_if proto udp from any to any port 53 -> 192.168.0.105
pass in on $ext_if inet proto udp from any to 192.168.0.105 port 53
编辑:因此,添加“synproxy state”使其处于建立连接并尝试登录然后超时的阶段(而之前它失败得相当快)。从现在开始可能只是超时的问题。我会再试一次;现在我刚刚在路由器机器上打开了 SSH,可以一步一步登录(先登录路由器,然后登录机器)。
答案1
您必须使用网关的外部 IP。尝试以下操作:
rdr on $ext_if inet proto tcp from any to ($ext_if:0) port 24 -> 192.168.0.105 port 22
括号将插入当前绑定到该接口的 IP 地址,并在 IP 地址发生变化时(例如由于 DHCP)保持更新。:0 表示它应该只使用绑定到接口的主 IP,而不是别名 IP。