![Linux 以太网/无线桥接](https://linux22.com/image/794989/Linux%20%E4%BB%A5%E5%A4%AA%E7%BD%91%2F%E6%97%A0%E7%BA%BF%E6%A1%A5%E6%8E%A5.png)
我所从事的产品的一个新要求是支持以太网到无线桥接。假设我们有两个网络接口:eth0 和 ath0(我们使用 Madwifi 驱动程序)。我可以使用哪些选项来允许连接到 eth0 的计算机访问无线网络?
我首先尝试的是brctl
实用程序。这似乎正是我想要的。而且,在有线网络上,它确实如此。但在无线网络上,它不太管用。一些 Wiresharking 显示,桥接数据包的源 MAC 被(正确地)设置为桥接后面的计算机。但是,AP 从未见过该 MAC 关联,因此会丢弃数据包。如果我启用 WDS 数据包(iwpriv ath0 wds 1
),则数据包会与发送方和接收方地址一起发送,但 AP 似乎不允许这样做(它非常旧,我们无法更改它)。并非所有 AP 都必须接受 WDS,对吗?
因此,我想知道我们是否必须进行某种以太网 NATing 或类似操作。但是,我不知道它如何工作——一个 MAC 地址如何在 n 台计算机之间共享?这ebtables
似乎太低级了。简单地在出去和回来的路上重写 MAC 地址会使桥接计算机无法使用网络。另外,它如何知道传入数据包的最终目的地?您至少需要来自 IP 和 TCP/UDP 层的详细信息。
答案1
是的,桥接不适用于 wifi。最简单的解决方案是使用路由。您可以设置一个“透明路由器”,感觉就像一座桥梁,但实际上它是路由数据包。为此,将一个网络设为另一个网络的子集。
例如,如果您的有线局域网是192.168.183.0/24
,则您可以让无线局域网使用192.168.183.192/26
。
您可能还必须打开“代理 arp”。只需将 添加echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
到某些启动脚本即可。
答案2
这样的配置对于桥接两个网络接口来说非常好用
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.10
network 192.160.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 212.27.39.2
dns-search home
auto eth0
iface wlan0 inet static
address 192.168.0.9
network 192.160.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 212.27.39.2
dns-search home
wireless_keymode open
wireless_mode managed
wireless_nick srvolivier
wireless-essid SMC2870
wireless-key wepkey
auto wlan0
iface br0 inet static
address 192.168.0.8
network 192.160.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 212.27.39.2
dns-search home
bridge_ports eth0 wlan0
auto br0
答案3
我编写了一个中继器程序,它读取一侧并将其发送到另一侧,了解桥接器后面的 PC 的 MAC 并在必要时使用它重写 src/dst MAC,但这让我感到很意外。
答案4
不知道“普通”桌面发行版,但在 netgear 路由器上的 dd-wrt 上,我可以轻松地将无线(虚拟)接口与以太网和 vlan 接口桥接起来。喜欢
brctl addif br0 wl0.1
brctl addif br0 vlan1
brctl addif br1 wl0.2
brctl addif br1 eth0
所以我有一个桥接至 wan eth 端口的无线“WAN”和一个桥接至 4 端口交换机(eth0)的无线“LAN”。