IP 转发 - 无法到达目标

IP 转发 - 无法到达目标

因此,我有以下简单的网络设置:

A成为 24 前缀网络上 192.168.0.1 处的主路由器。

是连接到 192.168.0.185 网络的 Linux 设备。

C是连接到 192.168.0.146 网络的第二个设备,但其网关不是指向路由器(192.168.0.1),而是指向设备 B。也就是说,设备 C 生成的所有流量都从设备 C 流向设备 B,最后到达路由器(设备 A)。

问题是,尽管已经在设备 B 上允许 IP 转发,并添加了一些 iptables 以确保流量得到转发,但似乎什么都没有发生。设备 C 可以毫无问题地 ping 设备 B,但是,当设备 C 尝试将数据包发送到公共 IP 或同一子网中的任何其他 IP 地址时,我收到“目标主机不可访问”错误。

这是设备B上的配置,它连接到wlan0上的主路由器:

iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i wlan0 -j ACCEPT

网络状态监测

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.134.203.168  0.0.0.0         255.255.255.252 U         0 0          0 rmnet_data0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0

IP 路由列表

10.134.203.168/30 dev rmnet_data0 proto kernel scope link src 10.134.203.170
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.185

当我禁用设备 B 上的 IP 转发时,设备 C 只是挂在那里等待答案,但当我激活 IP 转发时,设备 C 立即收到“目标主机无法访问”错误。所以我认为这可以排除 IP 转发作为主要问题。问题可能与 iptables 和 IP 路由有关。

在其他 Linux 机器上,只需允许 IP 转发就可以了,显然​​这台机器需要一些额外的配置。

有人知道我应该运行哪个命令才能使其工作吗?我应该如何编辑路由表?

谢谢

更新

所以我已经按照你的要求做了,现在我的路由表如下所示:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.134.203.168  0.0.0.0         255.255.255.252 U         0 0          0 rmnet_data0
192.168.0.0     192.168.0.1     255.255.255.0   UG        0 0          0 wlan0

不幸的是问题仍然存在...

我应该改变什么吗?

谢谢

更新2

我已经将路由表与其他 Linux 发行版进行了比较,并复制了它们。尝试了其他一些方法,但仍然没有效果。

这是当前的表格:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 wlan0
10.135.186.32   0.0.0.0         255.255.255.248 U         0 0          0 rmnet_data0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0

这是预期的,可以正常工作。我想,因为我是在 Android 9 上执行此操作,所以一切都完全不同,所以除非我修改整个文件系统(我不会这样做),否则这是不可能的。

在 Android 8 之前这不是一个问题,我不知道他们在新版本上做了什么。

答案1

正如@yoonix 指出的那样,计算机 B 没有默认路由。因此它不知道将数据包转发到未知网络的位置。

答案2

我找到解决办法了!

我们必须首先清理 iptables,允许 ip 转发,添加 ip 路由,最后添加主路由。

这可以通过 4 个命令完成:

iptables -F -t filter
sysctl -w net.ipv4.ip_forward=1
ip route add default via {gateway}
ip rule add from all lookup main pref 1

感谢大家的时间

相关内容