Aar*_*onD 2 networking wifi ethernet bridge
我见过很多将桥接机变成另一个具有自己的 DHCP 服务器的路由器的示例,等等。但我想使用有线设备,就好像它直接连接到原始路由器一样。桥接机自行连接 WiFi 时没有任何问题。
这个答案似乎很接近我想要的,但它也说,The wlan0 interface also has to be condigured to connect to your remote AP so this configuration is not be used verbatim.
正如警告所述,它本身无法工作 - 找不到 WiFi 适配器,因此无法连接 - 但它没有说明如何重新建立原始的工作连接。我怎么做?
/etc/wpa_supplicant/wpa_supplicant.conf是:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US
network={
ssid="MyNetwork"
psk="MyPassword"
key_mgmt=WPA-PSK
}
Run Code Online (Sandbox Code Playgroud)
当 WiFi 工作时,/etc/network/interfaces默认为:
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
Run Code Online (Sandbox Code Playgroud)
结果是ifconfig:
pi@FCC-FOH:~ $ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:4c:6c:a7 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.43.35 netmask 255.255.255.0 broadcast 192.168.43.255
inet6 fe80::c39b:c8ac:86c9:1f0e prefixlen 64 scopeid 0x20<link>
inet6 2600:100a:b02f:8196:b8ae:3d20:c4d0:817c prefixlen 64 scopeid 0x0<global>
ether 00:f0:00:36:1f:1a txqueuelen 1000 (Ethernet)
RX packets 17 bytes 1955 (1.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 52 bytes 7956 (7.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
pi@FCC-FOH:~ $
Run Code Online (Sandbox Code Playgroud)
当我尝试启用桥时,/etc/network/interfaces是:
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto eth0
allow-hotplug eth0
iface eth0 inet manual
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0
Run Code Online (Sandbox Code Playgroud)
结果是ifconfig:
pi@FCC-FOH:~ $ ifconfig
br0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:4c:6c:a7 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:4c:6c:a7 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:f0:00:36:1f:1a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
pi@FCC-FOH:~ $
Run Code Online (Sandbox Code Playgroud)
好的,我认为这里的主要问题是通信问题:您使用的术语在网络中具有非常具体的含义(将 WLAN 桥接到 LAN),而不是描述所需的结果(我有一个没有 WLAN 的设备 A,我想通过第二个设备将其连接到我的 WLAN 路由器,以便可以从 WLAN 上的所有其他设备访问该路由器,反之亦然)。然后,您当然会得到一个符合具有特定含义的术语的答案(XY 问题中的 Y)),这不是您想要的(您的 X)。
这就是 XY 问题的全部内容:如果您询问 X 而不是 Y,您会得到正确的答案。如果你问Y,人们无法正确回答。
那么,让我们做一些网络基础知识。OSI 模型描述了网络的多个层。第 2 层是以太网/Wifi 层:设备通过 MAC 地址进行标识,有一个网段(也称为广播域),所有设备都可以在该网段中看到彼此,并可以向该网段上的所有其他设备发送消息。另一方面,第 3 层使用 Internet (IP) 地址。
桥接意味着连接两个第 2 层段,使它们显示为单个第 2 层段(因此在前面的两个段中都会看到第 2 层广播)。路由是指通过在第 3 层上查找数据包的下一个目的地,然后将该数据包转发到第 2 层上的该目的地来连接两个第 2 层网段。
现在 WLAN 被设计为允许第二层网段上有多个接入点(称为分布系统(DS)):
<--- SEGMENT (DS) ---> <- SEGMENT ->
LAN WLAN LAN
|
| .....C1------------D
|---- B1 ....
A----| .....C2
|
|---- B2 ..
|
Run Code Online (Sandbox Code Playgroud)
A 是 DS 的网关,B1 和 B2 是接入点(AP),C1 和 C2 是工作站(STA),D 是通过 LAN 连接到 C1 的计算机。
稍微简化一下,通过 WLAN 发送的“数据包”(802.11 帧)包含 A、B 和 C 的 MAC 地址(3 地址模式)。因此,AP 可以桥接 WLAN 和 LAN 适配器,形成单个网段:如果 C 想要直接向 A 发送第 2 层数据包,它知道它与 B 关联,因此它可以将地址(A、B、C )到数据包中。当 B 收到数据包时,它看到最终目的地是 A,因此它可以在桥接 LAN 接口上再次将其发送出去。另一个方向也是如此。
现在,如果 STA C 尝试做同样的事情,桥接 LAN 和 WLAN,会发生什么?那么当D向A发送二层数据包时,C应该在WLAN数据包中放入哪些地址呢?它可以放入(A,B,D)。如果通信未加密,则 AP B 会说“嘿,该数据包来自 D,但我与 D 没有关联。所以该数据包一定出了问题,让我们丢弃它”。更糟糕的是,如果通信被加密(这应该成为当今的标准),密钥将在 AP 和 STA 之间协商。但C只有钥匙<B,C>,没有<B,D>钥匙。所以这个数据包无法被正确加密。
如果C只输入自己的MAC地址怎么办?然后,对于发送至D 的数据包,它们最终也会被发送至 C。因此,C 必须决定如何区分将数据包转发到 D 和自己接受这些数据包。这很难做到,因为在第 2 层上没有太多信息可以作为此决策的基础。这就是为什么在这种情况下,最终 C “消失”,而 D 似乎直接连接到 B。这就是 WLAN_KABEL 实现的解决方案。此决定的变体确实基于所使用的(第 3 层)端口等。
另一种选择是仅输入所有涉及的地址(A、B、C、D),而不是仅输入(A、B、C)。这称为 4 地址模式,有时也称为无线分布式系统(WDS;小心,WDS 也用于其他专有方式来执行类似的操作)。
现在您知道为什么可以在 STA 上桥接 LAN 和 WLAN 了。
如果您不想桥接,而只是保留如图所示的段,那么一切都会变得简单:您路由,只需在 A 和所有 B 上为 D 添加适当的(静态)路由表,就像这样,它变得可达。由于三层IP地址是按段分配的,所以它只会有一个不同范围的地址。例如,WLAN网段为192.168.23.0/24,假设A为192.168.23.1,B1为192.168.23.2,B2为192.168.23.3,C1为192.168.23.100,C2为192.168.23.101;C1和D之间的LAN网段C1为10.0.0.1,D为10.0.0.2。然后 C2 可以只说“发送第 3 层数据包到 10.0.0.2”,它就会正常到达。无需 NAT。
请注意,在大多数家庭网络上,只有一个 AP(很少有人知道如何正确设置多个 AP,如果他们想要多个 AP,就会做一些可怕的事情,例如双 NAT),并且您的家庭路由器将 A 和 B 组合成一个设备。但协议仍然如上所述。
您会发现多个 AP 的设置与酒店等场所中描述的一样,由专业人员进行安装。
| 归档时间: |
|
| 查看次数: |
10622 次 |
| 最近记录: |