所以我不完全确定这是否可行,我只是尝试了一些方法,希望能够得到一个可行的解决方案。
我已通过 dnsmasq 成功设置了设备的 eth0,用作 DHCP 服务器。效果很好。由于我怀疑我需要超过 254 个客户端,因此我选择创建一个 /20 网络。
现在,我还成功设置了设备的 wlan0,使其与同一个 dnsmasq 绑定,并给出连接到其 AP 的 IP。我也能做到这一点。
eth0 Link encap:Ethernet HWaddr b8:27:eb:92:22:c6
inet addr:1.0.0.1 Bcast:1.0.15.255 Mask:255.255.240.0
inet6 addr: fe80::ba27:ebff:fe92:22c6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2113 errors:0 dropped:0 overruns:0 frame:0
TX packets:323 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:134909 (131.7 KiB) TX bytes:21087 (20.5 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:3576 errors:0 dropped:0 overruns:0 frame:0
TX packets:3576 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:252704 (246.7 KiB) TX bytes:252704 (246.7 KiB)
wlan0 Link encap:Ethernet HWaddr b8:27:eb:c7:77:93
inet addr:1.0.0.2 Bcast:1.0.15.255 Mask:255.255.240.0
inet6 addr: fe80::ba27:ebff:fec7:7793/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:938 errors:0 dropped:1 overruns:0 frame:0
TX packets:3552 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:150695 (147.1 KiB) TX bytes:279694 (273.1 KiB)
我的 dnsmasq 是:
interface=eth0,wlan0
listen-address=1.0.0.1,1.0.0.2
bind-interfaces
local=/argos/
domain=argos
domain-needed
bogus-priv
dhcp-sequential-ip
dhcp-range=1.0.0.3,1.0.15.254,255.255.240.0,36h
这一切似乎都很顺利,只是我无法 ping 通客户端,客户端也无法 ping 通设备。
但是,如果我指定使用哪个接口进行 ping,它似乎能找到自己的方式:
ping -I eth0 1.0.0.3
所以我认为路由方面出现了问题。我该如何解决?考虑到无论您是通过 eth0 还是 wlan0 连接,设备都是相同的,我不知道为什么这不起作用。
答案1
一个子网应该属于一接口,因为它基本上描述了哪些主机在同一个广播域(即可以通过以太网第 2 层直接互相访问)。
如果同一子网内的主机尝试相互访问,它们将不会尝试使用路由器 - 而是尝试直接了解彼此的 MAC 地址(使用 ARP)。
如果流量来自另一个网络(或来自路由器本身),您的路由器将不会尝试判断每个单独主机的数据包是否应该通过 eth0 或 wlan0 路由 - 它将对所有数据包使用相同的 /20 路由(通常通过 eth0)。
如果你想要一个子网,那么“链接”两个接口的正确方法是设置一个桥接口(其作用类似于交换机,根据 MAC 地址转发以太网帧)并将两个物理接口设置为桥接端口。
(IP 地址和 dnsmasq 也将在 br0 接口而不是 eth0 上设置。)
否则,有线和无线请使用不同的子网。