我正在尝试调整系统上的网络,以便两个子网可以通过设备相互通信(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_forward
root 身份,可以通过sysctl
google 等永久设置)。
我暂时忽略 macvlan 的问题,第一步是让路由正常工作。
通过此设置,您应该能够在 PC、设备 1 和设备 2 之间以任意方向 ping 通。测试一下。要tcpdump -ni usb0
在新的 xterm 中在所有有趣的接口上进行调试、运行等(因此,其中四个接口在所有三个设备上)。然后您可以看到如果某些功能不起作用,您的数据包会消失在哪里。ip route get 1.2.3.4
也有助于找出内核认为路由1.2.3.4
应该去哪里。