You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

利用两台树莓派实现跨子网流量转发及指定IP映射的方案可行性咨询

利用两台树莓派实现跨子网流量转发及指定IP映射的方案可行性咨询

嘿,看起来你已经把跨子网转发的基础框架搭得挺扎实了!咱们直接说重点:你这套IP映射的思路方向是对的,但有几个关键规则需要调整才能正常跑起来,下面给你拆解清楚:

先明确你的核心需求

你想让主路由(192.168.1.0/24)下的所有设备,访问Pi#1上的192.168.1.102时,流量自动转发到电脑的192.168.2.100,同时电脑的回复能正确回到主路由设备,对吧?

现有规则的问题修正

你写的iptables规则有两处逻辑偏差,得改:

  1. DNAT规则的目标IP匹配错误
    你原来的规则是:

    iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.102 -j DNAT --to-destination 192.168.2.100
    

    这里的-s 192.168.1.102是匹配来自这个IP的流量,但你要的是匹配发往这个IP的流量,应该改成-d 192.168.1.102,修正后:

    iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.102 -j DNAT --to-destination 192.168.2.100
    
  2. SNAT规则的出口网卡选错
    你原来的规则是:

    iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.2.100 -j SNAT --to-source 192.168.1.102
    

    SNAT是用来修改数据包的源地址,让主路由设备收到的回复看起来是来自192.168.1.102。这个操作应该发生在数据包**离开Pi#1的eth0(往主路由方向)**的时候,而不是发往Pi#2的ppp0口,所以要把-o ppp0改成-o eth0,修正后:

    iptables -t nat -A POSTROUTING -o eth0 -s 192.168.2.100 -j SNAT --to-source 192.168.1.102
    

额外需要确认的几个细节

除了规则修正,还有几个点要确保没问题:

  • 转发规则放行:如果Pi#1的iptables默认FORWARD策略是DROP,得手动加双向转发规则,允许流量在eth0和ppp0之间流转:
    iptables -A FORWARD -i eth0 -o ppp0 -d 192.168.2.100 -j ACCEPT
    iptables -A FORWARD -i ppp0 -o eth0 -s 192.168.2.100 -j ACCEPT
    
  • 主路由侧的可达性:主路由下的设备能直接访问192.168.1.102吗?因为Pi#1的eth0本身就在192.168.1.0/24子网,只要主路由没防火墙限制,应该是没问题的。
  • 配置持久化:你现在用ifconfig、ip route和临时iptables规则设置的内容,重启树莓派后会消失。建议用dhcpcd.conf配置静态IP,把路由加到/etc/rc.local,用iptables-save > /etc/iptables/rules.v4保存规则并设置开机加载。

最终结论

调整完上述规则后,你的方案完全可以实现需求:主路由设备访问192.168.1.102时,流量会被转发到电脑的192.168.2.100,电脑的回复也能正确返回给主路由设备,同时电脑的原始IP不会被修改,满足你的要求。

备注:内容来源于stack exchange,提问作者Manitoba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:45:29