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

多树莓派搭建网络转发后内网设备无法访问电脑的解决求助(不修改路由器配置)

多树莓派搭建网络转发后内网设备无法访问电脑的解决求助(不修改路由器配置)

看起来你已经把两个树莓派的转发链路搭得有模有样了,电脑能访问内网和外网就说明基本的转发逻辑是通的!现在的核心问题是内网其他设备找不到你的电脑——毕竟你的电脑在192.168.2.0/24这个子网,而路由器那边的设备都在192.168.1.0/24,它们根本不知道有这么个子网存在,更别说怎么找过去了。而且你还不想动路由器配置,那咱们就得在树莓派上做文章了。

先梳理下你的当前配置(顺便纠正个小笔误)

树莓派1(靠近路由器的一端)

# 你原命令里写的ppp0应该是笔误,改成eth0才对
ip addr add 192.168.1.100/24 dev eth0
# 设置ppp0静态IP
ip addr add 192.168.0.1/24 dev ppp0
# 开启IP转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
# 添加到Pi2子网的路由
ip route add 192.168.2.0/24 via 192.168.0.2 dev ppp0
# 配置NAT转发到外网
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

树莓派2(靠近电脑的一端)

# 设置eth0静态IP
ip addr add 192.168.2.1/24 dev eth0
# 设置ppp0静态IP
ip addr add 192.168.0.2/24 dev ppp0
# 开启IP转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
# 添加默认路由到Pi1
ip route add default via 192.168.0.1
# 添加到路由器子网的路由
ip route add 192.168.1.0/24 via 192.168.0.1 dev ppp0
# 这条NAT规则其实没必要,后面会说怎么删
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

你的电脑

# 设置静态IP
ip addr add 192.168.2.100/24 dev eth0
# 默认路由指向Pi2
ip route add default via 192.168.2.1
# 添加DNS
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf

问题根源

路由器子网(192.168.1.0/24)里的设备没有到192.168.2.0/24子网的路由条目,所以它们收到电脑的回复包后,根本不知道该往哪发,只能直接丢包。既然不能改路由器配置,咱们有两个实用方案可选:


方案一:反向NAT映射(最简单,适合大多数场景)

这个思路是把电脑的IP“挂靠”到Pi1的eth0 IP上,内网设备访问Pi1的IP就相当于访问你的电脑。如果只是需要ping通或者访问电脑的所有服务,直接做全端口映射就行:

在树莓派1上执行以下命令:

# 把所有发往Pi1 eth0 IP(192.168.1.100)的流量转发到电脑
iptables -t nat -A PREROUTING -d 192.168.1.100 -j DNAT --to-destination 192.168.2.100
# 确保电脑的回复流量能正确回到内网设备
iptables -t nat -A POSTROUTING -s 192.168.2.100 -j SNAT --to-source 192.168.1.100

完成后,内网设备直接ping 192.168.1.100就能通你的电脑,访问这个IP的端口也会转发到电脑对应端口。缺点是没法直接用192.168.2.100访问,但胜在简单稳定,不会触发防火墙告警。


方案二:ARP欺骗+路由注入(支持直接用电脑IP访问)

如果必须让内网设备直接用192.168.2.100访问电脑,那可以让Pi1通过ARP欺骗,告诉内网设备“要去192.168.2.0/24的流量都发给我”:

步骤1:确认Pi1的路由配置(已经做过,检查下)

确保Pi1有到电脑子网的路由:

ip route add 192.168.2.0/24 via 192.168.0.2 dev ppp0

步骤2:安装ARP工具

在Pi1上安装arping:

sudo apt-get update && sudo apt-get install arping

步骤3:发送ARP公告

一次性发送公告,告诉内网设备192.168.2.0/24的网关是Pi1:

sudo arping -U -c 5 -I eth0 192.168.1.100 -s 192.168.2.0

如果需要持续生效,可以安装dsniff用arpspoof:

sudo apt-get install dsniff
# 持续欺骗整个内网子网
sudo arpspoof -i eth0 -t 192.168.1.0/24 192.168.2.0

这个方案的优点是内网设备能直接用电脑IP访问,但ARP欺骗可能会被某些企业级防火墙拦截,而且重启后需要重新执行。


额外优化:删掉Pi2上多余的NAT规则

你在Pi2上配置的iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE完全没必要,反而会把电脑的源IP改成Pi2的eth0 IP,导致Pi1没法正确转发回复流量。赶紧删掉:

# 在Pi2上执行
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

备注:内容来源于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:33:14