我想使用我的树莓派作为中间路由器来访问其他 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...
在重启后保留路由。