使用 pf 转发 IP 地址

使用 pf 转发 IP 地址

我正在尝试使用 pf 将外部 IP 地址转发到另一个外部 IP 地址。等效的 iptables 命令是iptables -t nat -A OUTPUT -d [ipaddress1] -j DNAT --to-destination [ipaddress2]

我已经在我的 pf.conf 中尝试了各种形式的 nat 和 rdr,例如:($int_if是内部接口、$ext_if外部接口、$out_ad是 ipaddress1(要重定向的地址)和$res_ad是 ipaddress2(要重定向到的地址)

nat on $int_if from 127.0.0.1 to $out_ad -> $res_ad
rdr pass on $ext_if proto tcp from $out_ad to $res_ad -> 127.0.0.1
rdr pass on $int_if proto tcp from 127.0.0.1 to $out_ad -> $res_ad
rdr pass log proto tcp from any to $out_ad -> $res_ad
nat from $out_ad to $res_ad -> 127.0.0.1
nat on $ext_if from $out_ad to $res_ad -> $ext_if
rdr on $int_if proto tcp from any to $out_ad -> $res_ad
rdr pass quick on $ext_if proto tcp from any to $out_ad -> $res_ad

这些似乎都不起作用。我sysctl net.inet.ip.forwarding=1也设置了。任何帮助都将不胜感激。谢谢

答案1

sysctl net.inet.ip.forwarding=1

这只会在您的机器上启用路由。如果您创建一个允许任何目标 IP 到达外部接口(至少在理论上),它就可以工作(在此示例中,10.20.30.40 是您的最终目的地)

pass in inet proto tcp from any to 10.20.30.40

(只是一个想法)

但是你的 rdr 规则将不起作用,因为它们恰好位于同一个接口上,而(根据一些论坛帖子)这是不允许的,或者根本不起作用

另一方面,公共 NAT 规则应该可以工作,但是您将丢失最终目的地的原始 IP 地址。(有意的?)

nat on $ext_if inet from any to 10.20.30.40 -> ($ext_if:0) port 1024:65535
pass on $ext_if inet from any to 10.20.30.40 keep state 

(或同代理状态)

为了调试目的,尝试启用规则的日志记录(通过将日志添加到 pass 规则,启用 pflog 和以下命令)

/etc/rc.conf
...
pflog_enable="YES"
pflog_logfile="/var/log/pflog
...


# tcpdump -i pflog0 -n -e -ttt

哦,也许请提供一些简单的网络结构;)

相关内容