是否可以通过另一台设备与不同的子网通信?

是否可以通过另一台设备与不同的子网通信?

我正在尝试调整系统上的网络,以便两个子网可以通过设备相互通信(ping)。设置如下:

          (192.168.1.128)  (172.16.248.223)
Router <------> PC <---------> Device 1 <--------> Device 2
          (172.16.248.248)    (10.0.1.1)          (10.0.1.2)

PC 有一个 DNS 代理,网关为 172.16.248.254。 PC 与设备 1 共享其互联网,设备 1 与设备 2 共享互联网。这是通过 IP 路由实现的,但 PC 无法 ping 通设备 2。这也是我的设置所必需的。设备使用 USB(cdc_ncm 驱动程序)共享互联网。

路线如下:

在电脑上:

default via 192.168.1.1 dev eno1  proto static  metric 100 
10.0.1.0/24 via 172.16.248.248 dev usb0 
172.16.248.0/24 dev usb0  proto kernel  scope link  src 172.16.248.248 
192.168.1.0/24 dev eno1  proto kernel  scope link  src 192.168.1.128  metric 100
192.168.1.0/24 dev eno1  proto kernel  scope link  src 192.168.1.128  metric 202

在设备 1 上:

default via 172.16.248.254 dev eth1 
10.0.1.0/24 dev usb1 proto kernel scope link src 10.0.1.1 
172.16.248.0/24 dev eth1 proto kernel scope link src 172.16.248.223

在设备 2 上:

default via 10.0.1.1 dev usb0 
10.0.1.0/24 dev usb0 proto kernel scope link src 10.0.1.2 
172.16.248.0/24 via 10.0.1.1 dev usb0

另外,设备1上的usb0接口有一个macvlan接口eth1。虽然在此设置中可以正常连接互联网,但 PC 无法 ping 设备 2。但是,PC 可以 ping 设备 1,并且设备 1 也可以 ping 设备 2。

为了进行尝试,我刷新了所有设备上的 iptables。当我实现这样的连接后我会考虑它。

是否可以使 PC 能够 ping 设备 2?我在这里遗漏了什么?

编辑:所有设备均已启用 IP 路由。请允许我重新表述一下这个问题以避免混淆。我想使用物理接口 (USB) 连接三个设备。我希望所有设备都能从 PC 共享互联网连接,并且所有设备都能够相互 ping 通。我想要有以下内容:

物理连接

设备 2 具有不同的子网并不重要,但如果没有它,互联网连接将无法工作。我需要建议来实现这一目标。除了与电脑共享互联网的路由器外,我没有任何路由器。

答案1

小心“共享互联网”这个术语,通常这涉及某种 NAT(网络地址转换)。我假设您的设置不是这种情况。

您提到了一个 DNS 代理,地址为 172.16.248.254,但不清楚它是如何连接到网络的。我将假设一个像这样的网络图(如果我的解释错误,请纠正):

         192.168.1.0/24     172.16.248.0/24         10.0.1.0/24
              |                    |                    |
Router        |                    |                    |
192.168.1.1 --|   172.16.248.248 --|-- 172.16.248.223   |
              |        PC          |       Device 1     |
              |-- 192.168.1.128    |         10.0.1.1 --|   
              |                    |                    |-- 10.0.1.2
              |   172.16.248.254 --|                    |   Device 2
              |      DNS proxy     |                    |
              |                    |                    |

(围绕子网组织图表是一个很好的做法)。特别是 DNS 代理未连接到路由器。

这意味着您需要以下路线:

在电脑上:

default via 192.168.1.1 dev eno1 
10.0.1.0/24 via 172.16.248.233 dev usb0     # NOT .248 !!
172.16.248.0/24 dev usb0
192.168.1.0/24 dev eno1

在设备 1 上:

default via 172.16.248.248 dev eth1        # NOT .254 !! 
10.0.1.0/24 dev usb1
172.16.248.0/24 dev eth1

在设备 2 上:

default via 10.0.1.1 dev usb0 
10.0.1.0/24 dev usb0

您还需要在 PC 和设备 1 上启用 IP 转发(通过echo 1 > /proc/sys/net/ipv4/ip_forwardroot 身份,可以通过sysctlgoogle 等永久设置)。

我暂时忽略 macvlan 的问题,第一步是让路由正常工作。

通过此设置,您应该能够在 PC、设备 1 和设备 2 之间以任意方向 ping 通。测试一下。要tcpdump -ni usb0在新的 xterm 中在所有有趣的接口上进行调试、运行等(因此,其中四个接口在所有三个设备上)。然后您可以看到如果某些功能不起作用,您的数据包会消失在哪里。ip route get 1.2.3.4也有助于找出内核认为路由1.2.3.4应该去哪里。

相关内容