You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OPNSense端口转发场景下的地址伪装配置求助

OPNSense端口转发场景下的地址伪装配置求助

我现在遇到一个OPNSense的配置问题,想请各位技术大佬帮忙支个招:

我需要把公网IP的流量转发到通过ZeroTier连接的内部服务器,已经给5432端口做了端口转发,设置好目标IP和端口后,外部请求完全没响应。我在目标机器上用tcpdump抓包分析,发现进来的数据包源IP是请求者的公网IP,完全没做地址伪装。现在的问题是,目标机器的 outbound 流量会走它自己的默认网关,而不是OPNSense,导致整个请求链路断了。

所以我想请教:怎么给这个端口转发的入站流量配置地址伪装呢?

补充说明:我在OPNSense的诊断工具里,是能正常连接到目标IP和对应5432端口的。


解决思路与具体操作步骤

这个问题的核心是要给端口转发的流量加上SNAT(源地址转换/地址伪装)规则,让目标服务器的回包能通过OPNSense返回,而不是走自身默认网关。具体配置步骤如下:

  1. 登录OPNSense后台,进入防火墙 > NAT > 出站页面
  2. 点击右上角的「添加」按钮,新建一条出站NAT规则:
    • 接口:选择和ZeroTier通信的对应接口(比如你给ZeroTier分配的ztXXXXXX格式接口名称)
    • 协议:根据服务实际需求选「TCP」或「TCP/UDP」(你的场景选TCP即可)
    • 源地址:可以填*(允许所有公网地址请求),也可以设置更精准的公网IP段
    • 源端口:填*(任意端口)
    • 目标地址:填写内部服务器的ZeroTier IP(也就是你端口转发规则里的目标IP)
    • 目标端口:填写5432(对应你要转发的服务端口)
    • 转换目标:选择「伪装地址」,然后在下方「伪装地址」选项里,选中OPNSense在ZeroTier网络中的本地IP
    • 描述:可以加个备注方便识别,比如「给5432端口转发流量做SNAT,确保回包路径正确」
  3. 调整这条规则的优先级,把它移到默认出站规则的前面,保证请求流量先匹配到这条规则
  4. 点击「保存」,再点击页面顶部的「应用更改」使规则生效

原理补充

现在的问题是目标服务器收到的是公网请求者的真实IP,它的回包会直接发向这个公网IP,走自身默认网关,完全不经过OPNSense,所以外部请求收不到响应。而配置SNAT后,目标服务器收到的源IP会被替换成OPNSense的ZeroTier IP,回包就会发给OPNSense,再由OPNSense转发给公网请求者,这样整个请求链路就打通了。

你能从OPNSense诊断工具连通目标服务器,是因为诊断请求的源IP就是OPNSense本身,目标服务器的回包自然能正常返回,这和外部公网请求的场景本质不同。

备注:内容来源于stack exchange,提问作者Antoner.me

火山引擎 最新活动