使用 2 个互联网和 2 个路由器与 Raspberry Pi 建立 SSH 连接

使用 2 个互联网和 2 个路由器与 Raspberry Pi 建立 SSH 连接

我有两个互联网连接,它们都有公共静态 IP。这两个互联网连接都连接到各自的路由器,这两个路由器从 LAN 到 LAN 相互连接。其中一个路由器已禁用 DHCP。第一个路由器
的网关为192.168.0.1第二个路由器的网关为192.168.0.2. 第一个带网关的路由器192.168.0.1已启用 DHCP,并且 Raspberry Pi 通过 LAN 电缆连接到第一个路由器,Raspberry Pi 中的 WiFi 已禁用。在这两个路由器中,我都已完成端口 22 的端口转发,指向 Raspberry Pi 本地 IP。
问题是我只能从互联网上的第一个路由器的公共 IP 通过 SSH 连接到 Raspberry Pi。我无法从第二个路由器的公共 IP 连接,即使它们都启用了指向 Raspberry Pi 本地 IP 地址的端口 22 的端口转发。我的 Raspberry PI 没有静态 IP 配置,但我已在路由器上进行了 IP 预留,因此 Raspberry Pi 将始终收到相同的 IP 地址。
我注意到,这取决于 Raspberry Pi 使用的网关。我在 Raspberry Pi 上运行了route -n,发现它指向第一个路由器的192.168.0.1网关,因此我能够从第一个路由器的公共静态 IP 连接它。如果我将此网关更改为192.168.0.2,那么我可以从第二个路由器的公共静态 IP 连接,但不能从第一个路由器连接。
我可以做哪些配置更改来确保我的 Raspberry Pi 可以通过互联网上的 SSH 从任一公共静态 IP 连接?我需要这个来确保当其中一个互联网断线时我至少有一种连接方式。

答案1

ct mark您可以在 nftables 中使用:

table ip alt_gateway {
        chain input {
                type filter hook input priority mangle; policy accept;
                ether saddr YOUR_SECOND_ROUTER_MAC ct mark set 0x00616c74
        }

        chain output {
                type route hook output priority mangle; policy accept;
                ct mark 0x00616c74 meta mark set 0x00616c74
        }
}

ether saddr YOUR_SECOND_ROUTER_MAC匹配由第二个路由器转发的流量(即那些以其 MAC 地址作为源 L2 地址的流量)。从技术上讲,该规则还涵盖来自路由器本身的流量,因此您可能需要任何一个添加ip saddr != 192.168.0.2ct mark set 或者192.168.0.2下方的备用路线表中提供了直接路线。

标记0x00616c74是任意的,并且meta mark设置的 可以与 不同ct mark(另一方面,您也可以有类似 的东西meta mark set ct mark,这实际上等同于上面的)。

然后可以meta mark与 进行匹配ip rule(查找default路由的备用路由表,您可以将它192.168.0.2作为下一跳/网关)fwmark

ip route add default via 192.168.0.2 table 123
ip rule add iif lo fwmark 0x00616c74 lookup 123

iif lo表示该规则仅适用于来自此主机的流量。它是一种可选的,旨在与上表不处理流量的事实相对应转发也就是说,如果此主机还充当某种路由器/网关,那么您将需要额外的链/规则,并且此技巧对于来自/到它所服务的主机的流量也是必要的。

桌子号码123也是任意的。

相关内容