Linux ipv4 转发未按预期工作

Linux ipv4 转发未按预期工作

我想使用我的树莓派作为中间路由器来访问其他 LAN。如下所示。

──────────────────────vpn 10.1.4.x─┐
router 10.1.1.1────────────pi4b 10.1.1.42─────────>pc 10.1.1.43
      ├───────────────────────────────────────────>tv
      ├───────────────────────────────────────────>ps5
      └───────────────────────────────────────────>etc...

因此我在 pi4b 内核中启用了 ipv4 转发。

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 1
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 1

在 pi 上,有一个到路由器 ( 10.1.1.1) 的默认路由。而 pc 的默认路由设置为 pi ( 10.1.1.42)。路由器的路由表我无法访问,但我认为没有什么特别的。这是一个红米AX6,SSH 不可用。

但我无法通过电脑访问互联网。

magrathea:~ jeffwhen$ traceroute 223.5.5.5
traceroute to 223.5.5.5 (223.5.5.5), 64 hops max, 52 byte packets
 1  * pi4b (10.1.1.42)  2.248 ms *
 2  xiaoqiang (10.1.1.1)  2.292 ms  1.317 ms  1.258 ms
 3  * * *
 4  * * *

我做错了什么?任何帮助我都会很感激。

答案1

当你的 Pi 收到一个未直接处理的包时,它可能会发出 ICMP 路由重定向,告诉你的 PC 直接使用 10.1.1.1。然而,这效果不佳;这是一个安全风险,所以许多现代操作系统都会忽略它们。

正确的解决方案有两种:

  • 每个子网配备一个路由器
  • 在客户端上明确声明一条路线。

每个子网一个路由器

将 Pi 和 PC 之间的网络配置为与 LAN 其余部分不同的子网,例如 10.1.2.0/24。然后,Pi 将具有一个默认路由,其网关为 10.1.1.1,以及带有某个网关的 10.1.4.0/24。

Pi 后面的任何机器都将简单地拥有 10.1.2.0/24,并以 Pi 作为网关。

在客户端上声明路由

将 Pi 的 IP 配置为 10.1.1.0/24 子网。不要将其设置为任何 PC 的默认网关;它们都应该有 10.1.1.1。

通过 Pi 添加到 10.1.4.0/24 的路由。在 Windows 上,可以使用以下命令完成

route ADD 10.1.4.0 MASK 255.255.255.0 10.1.1.42 

用于route -p ADD...在重启后保留路由。

相关内容