本地网络和背景:

本地网络和背景:

我有一个叫做袖珍小猎犬我一直试图将它添加到我的本地网络中,但没有成功。我尝试了很多方法,但没有一个完全成功。刚开始的时候,这看起来并不难,但经过几天的争论却没有成功,我必须承认我是个无可救药的白痴。话虽如此,我需要帮助才能让它工作。

本地网络和背景:

以下是我的局域网的粗略草图。192.168.1.0 网络和 OPNsense 防火墙几年来一直运行良好。我现在想添加之间的网络连接袖珍小猎犬以及网络上的其他主机,以及与互联网的连接袖珍小猎犬

袖珍小猎犬运行某个版本的 Debian。它只有一个 USB 接口,用于供电和所有外部通信。它显然使用USB 以太网将其 USB 表示为以太网接口。

袖珍小猎犬有两个 (2) 个以太网接口:192.168.6.2 和 192.168.7.2。根据文档,它运行一个 DHCP 服务器,将 192.168.6.1 和 192.168.7.1 分配给主机 - 在本例中为下图所示的 Ubuntu Linux 机器 - 又名苹果电脑。它为自己保留了 192.168.6.2 和 *.7.2。“开箱即用”,我能够SSH苹果电脑袖珍小猎犬, 但袖珍小猎犬无法再进一步了。

“外面的世界”必须通过苹果电脑WiFi接口为192.168.1.104。

本地网络

在 macbuntupro 主机上:

当我插上电源时袖珍小猎犬进入我的 Ubuntu 20.04 桌面机(macbuntupro),我可以看到以下内容:

ifconfig苹果电脑

注意:为了简洁起见,我删除了lo接口enp2s0和一些其他细节

seamus@MacBuntuPro:~$ ifconfig
enx606405fa813b: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.7.1  netmask 255.255.255.0  broadcast 192.168.7.255
        ether 60:64:05:fa:81:3b  txqueuelen 1000  (Ethernet)

enx606405fa813d: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.6.1  netmask 255.255.255.0  broadcast 192.168.6.255
        ether 60:64:05:fa:81:3d  txqueuelen 1000  (Ethernet)

wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.104  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 68:a8:6d:2d:d4:d0  txqueuelen 1000  (Ethernet)

route -nmacbuntupro:

seamus@MacBuntuPro:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    600    0        0 wlp3s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enx606405fa813b
192.168.1.0     0.0.0.0         255.255.255.0   U     600    0        0 wlp3s0
192.168.6.0     0.0.0.0         255.255.255.0   U     101    0        0 enx606405fa813d
192.168.7.0     0.0.0.0         255.255.255.0   U     100    0        0 enx606405fa813b

注意:我不确定169.254.0.0我开始时目的地是否存在。

使用以下配置苹果电脑可以访问 192.168.1.0 网络上的所有主机,并且可以通过 192.168.1.1 的防火墙/网关访问互联网。所有协议和服务均正常运行,名称解析快速无误。

袖珍小猎犬通过 SSH 主机苹果电脑

苹果电脑可以连接到袖珍小猎犬通过 SSH(为简洁起见,已编辑):

seamus@MacBuntuPro:~$ ssh [email protected]
Debian GNU/Linux 10
...
[email protected]'s password: 
...
debian@beaglebone:~$ 

ifconfig 袖珍小猎犬

注意:为了简洁起见,我删除了lo一些其他细节

debian@beaglebone:~$ ifconfig

usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.7.2  netmask 255.255.255.0  broadcast 192.168.7.255
        ether 60:64:05:fa:81:3a  txqueuelen 1000  (Ethernet)

usb1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.6.2  netmask 255.255.255.0  broadcast 192.168.6.255
        ether 60:64:05:fa:81:3e  txqueuelen 1000  (Ethernet)

route -n 袖珍小猎犬

debian@beaglebone:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.6.0     0.0.0.0         255.255.255.0   U     0      0        0 usb1
192.168.7.0     0.0.0.0         255.255.255.0   U     0      0        0 usb0

路由表中的这些默认条目pocketbeagle可能是合适的,甚至是必要的,但当使用默认路由表时macbuntupropocketbeagle甚至无法到达 192.168.1.104 处的 WiFi 网关。从pocketbeagle,除 之外唯一可以访问的 IP 地址lo是 192.168.6.1 和 192.168.7.1。显然,还需要更多的东西。

状态、尝试和错误

使用上述默认设置,我可以ssh从 macbuntupro 发起连接到袖珍小猎犬。 从袖珍小猎犬我可以 ping 192.168.6.1 和 192.168.7.1(连接的 Ubuntu 端),但除此之外什么也做不了。

我可以花几个小时详细描述我尝试过的一切。我有一些有限的成功,但都不起作用完全地也就是说,我在一些试验中获得了部分连接。在我看来,这是一个路由问题route,我尝试使用配置静态路由的工具来解决这个问题。我确实尝试connmanctl袖珍小猎犬,但它错误地发送了一条我无法解码的难以理解的消息。

网络路由对我来说是一个巨大的盲点——过去几天我至少学到了这么多。经过一番研究,我认为“简单”的方法是启用“IP 转发”。我编辑了文件/etc/sysctl.conf以启用net.ipv4.ip_forward=1,然后检查:

seamus@MacBuntuPro:~$ cat /proc/sys/net/ipv4/ip_forward
1

这没有帮助 - 所有尝试联系其他主机袖珍小猎犬收到了network unreachable消息。我还检查了ufw, 在苹果电脑并确认防火墙已正常inactive

袖珍小猎犬没有traceroute(或mtrtracepath),但是我无法 ping 192.168.1.104 的一跳远 WiFi 这一事实表明ip_forward需要一些“帮助”。

我添加了这条路线袖珍小猎犬&重新测试:

debian@beaglebone:~$ sudo route add -net 0.0.0.0 gw 192.168.6.1
# OR, ALTERNATIVELY: 
debian@beaglebone:~$ sudo route add default gw 192.168.6.1
debian@beaglebone:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.6.1     0.0.0.0         UG    0      0        0 usb1
192.168.6.0     0.0.0.0         255.255.255.0   U     0      0        0 usb1
192.168.7.0     0.0.0.0         255.255.255.0   U     0      0        0 usb0

debian@beaglebone:~$ ping 192.168.1.104
PING 192.168.1.104 (192.168.1.104) 56(84) bytes of data.
64 bytes from 192.168.1.104: icmp_seq=1 ttl=64 time=0.388 ms
...
...
# SUCCESS! 

debian@beaglebone:~$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
^C
--- 192.168.1.1 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 145ms

# FAILURE! 

似乎“IP 转发”不起作用 - 或者至少它没有按照我的期望运行。如果我转发192.168.6.1192.168.1.104,并且 192.168.1.104 知道如何到达 192.168.1.1(并且它确实做到了),它似乎会用它来处理转发无法提供从 192.169.1.0 网络上的主机到袖珍小猎犬。显然我忽略了一些东西。

我能够通过在OPNsense 网关/防火墙

要访问网络 192.168.6.0/24,请转到网关 192.168.1.104

这是一个 GUI 配置,我无法可靠地将其转换为route命令。不幸的是,虽然这改善了逐步地,这也是一个部分解决方案。它允许袖珍小猎犬到达 192.168.1.1 的网关/防火墙,但互联网上没有任何连接。它还允许 192.169.1.0 网络上的主机连接到袖珍小猎犬连接非常脆弱,可能只能维持一两分钟!因此,我禁用了此路由。

我就此打住,重新陈述我的问题:

需要哪些路线才能允许袖珍小猎犬到达局域网和互联网,并允许局域网上的其他主机到达袖珍小猎犬

或者:

如果我的方法完全错过了机会,请提出更好的方法。

答案1

似乎“IP 转发”不起作用 - 或者至少它没有按照我的期望运行。如果我从 192.168.6.1 转发到 192.168.1.104,并且 192.168.1.104 知道如何到达 192.168.1.1(并且它确实知道),似乎它会将其用于转发给它的数据包?!此设置也无法提供从 192.169.1.0 网络上的主机到 pocketbeagle 的连接。显然我遗漏了一些东西。

配置一个方向的路由并不会自动暗示反向路由。因此,不仅 Pocketbeagle 需要到 LAN 的路由,而且 LAN 上的设备也明确需要到 Pocketbeagle 的路由。

将路由添加到 OPNsense(LAN 网关)确实是实现此目的的一种方法。然而,它不可靠的最可能原因是它会导致三角路由:从 LAN 到 Pocketbeagle 的数据包通过 OPNsense,但从 Pocketbeagle 到 LAN 的数据包不通过。这是因为 Ubuntu 路由器到 LAN 的路由更直接。

严格来说,非对称路由并不坏,但它确实意味着 OPNsense 防火墙的“状态跟踪”永远看不到响应,也永远无法正确地将状态标记为已建立,并在快速超时后忘记它。

因此你可能还需要添加一个防火墙规则在 OPNsense 路由器上,这样它总是允许从 192.168.1.0/24 到 192.168.6.0/24 以及反方向的任何流量。如果 OPNsense 的工作原理与 pfSense 类似,则应选择状态类型:草率以使规则与非对称路由兼容。

更好的方法是直接添加相同的路线在每个 LAN 主机上,而不仅仅是在 OPNsense 网关上。这样,两个方向的数据包都会完全跳过 OPNsense。当然,缺点是您需要在每个主机上手动执行此操作……但您可以尝试使用 DHCP“无类静态路由”选项进行分发,许多操作系统都支持该选项。

相关内容