我已经配置了具有以下拓扑的网络:
Gateway (10.0.0.1)
| tun0
|
|-----------------------| 10.0.0.0/16
| |
| tun0 | tun0
Host A (10.0.1.1) Host B (10.0.2.1)
| wlan0 | wlan0
| |
| 10.0.1.0/24 |----------------| 10.0.2.0/24
| | |
| wlan0 | wlan0 | wlan0
Client A (10.0.1.2) Client B (10.0.2.2) Client C (10.0.2.3)
目前,主机 A 和 B 可以 ping 通网关并相互 ping 通。此外,每个客户端都可以 ping 通直接连接到它的主机以及连接到该主机的其他客户端。但是,我希望每个设备都能够 ping 通网络上的所有其他设备(例如,客户端 A 可以 ping 通客户端 B,主机 A 可以 ping 通客户端 C,等等)。
我尝试了几种方法来配置每个主机以允许在客户端、其他主机和网关之间转发数据包。我尝试的第一种方法是在每个主机上使用 iptables 在子网之间转发流量。虽然我使用以下教程取得了成功这是 Adafruit 上的允许客户端 ping 主机和网关,但这些不允许其他主机 ping 客户端。我还尝试了以下解决方案这个在子网之间路由流量,但它们似乎不适用于重叠子网。我还尝试在桥接 tun0 和 wlan0 的每个主机上创建一个桥接接口,但没有成功。
只要保留所有设备连接到所有其他设备的能力,我愿意更改此网络上的 IP 地址配置。
答案1
解决方案(事后看来非常明显)是按如下方式分配 IP 地址:
Gateway
| tun0 (10.0.0.1)
|
|-----------------------| 10.0.0.0/24
| |
| tun0 (10.0.0.2) | tun0 (10.0.0.3)
Host A Host B
| wlan0 (10.0.2.1) | wlan0 (10.0.3.1)
| |
| 10.0.2.0/24 |-------------------| 10.0.3.0/24
| | |
| wlan0 (10.0.2.2) | wlan0 (10.0.3.2) | wlan0 (10.0.3.3)
Client A Client B Client C
这会将网关/主机连接置于单独的子网上。在此配置中,涉及两个子网之间路由流量的教程将起作用。需要在每个主机和网关上配置路由(例如ip route add 10.0.3.0/24 via 10.0.3.1
)。