在 Ubuntu 上桥接 Wifi 到以太网不起作用

在 Ubuntu 上桥接 Wifi 到以太网不起作用

在运行 Windows 时,我能够通过笔记本电脑的以太网连接桥接我的 wifi 连接,因此一系列仅支持以太网的设备可以搭载我的 wifi(Raspberry Pi、Xbox 等)。我现在正尝试在 Ubuntu 中执行相同操作,即设置如下:

无线路由器 ---> 笔记本电脑上的 Wifi ---> 桥接至以太网 ---> 需要互联网的设备插入以太网端口

现在我一直在尝试使用 brctl 在 Ubuntu 中运行它

我使用了以下命令:

sudo brctl addif br0 eth0 wlan0

并出现以下错误:

can't add wlan0 to bridge br0: Operation not supported

我希望有人能帮助我,因为我不相信在 Windows 上可以轻松完成的事情在 Linux 上却无法完成。

如果您需要更多信息,请告诉我。谢谢

答案1

这不可能。您无法桥接 WiFi 客户端连接。如果可以的话,我们就不需要 WDS,我们只需要桥接即可。

问题很简单——WiFi 规范禁止接入点在 WiFi 网络上广播流量,除非获得授权。这在很大程度上是 WiFi 网络速度非常慢且安全性很差(甚至根本没有)的时代的遗留问题。

网桥与接入点之间只有客户端连接。这仅授权接入点传输发往网桥的流量。由于连接到网桥的任何机器都不是接入点的客户端,因此接入点没有理由通过 WiFi 链接发送发往它们的流量。所以它不会这样做。

不幸的是,WiFi 与以太网非常相似,因此很容易期望它像以太网一样工作。但它的差异足以让你感到困惑。

WDS 配置是授权接入点发送不绑定到其任何客户端的流量的特定权限。当两端都支持 WDS 时,它们包括桥接端点的地址以及目标的地址,授权接入点发送流量。

您必须使用除桥接之外的其他方法来实现这一点。例如,使用 NAT 进行路由。如果 WiFi 链路的两端都支持四地址模式,您也可以使用四地址模式。

答案2

我在使用 LXC 时也遇到过类似的问题,我解决了 wifi 设备中的桥接问题。首先,您需要在计算机上安装一个备用以太网设备。诀窍是从以太网设备到 wifi 创建路由。

在服务器文件中,更改 /etc/network/interfaces,为虚拟主机选择一个未使用的网络,即 10.0.0.0。为备用以太网接口分配一个 IP,这里是 eth0,像这样桥接它:

auto br0
iface br0 inet static
    address 10.0.0.1
    netmask 255.255.255.0
    bridge_ports eth0
    bridge_fd 0
    bridge_maxwait 0

一旦完成,您就可以按照 Kostyantyn 之前在这里回答的 MASQUERADE 方式进行操作。这些应该在 rc.local 中或在您必须在启动时或启动虚拟域之前运行的脚本中:

# iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
# echo "1" > /proc/sys/net/ipv4/ip_forward

在虚拟服务器中,在 /etc/network/interfaces 中配置静态 IP。我使用的是网络 10.0.0.0,我将从 .2 开始使用,当您创建更多虚拟主机时,您可能会使用 3,依此类推。如果您有许多虚拟主机,您可以考虑为它们安装 dhcp 服务器。.1 是网关,如之前配置的那样。

auto eth0
iface eth0 inet static
    address 10.0.0.2
    netmask 255.255.255.0
    broadcast 10.0.0.255
    gateway 10.0.0.1

还要配置 DNS 服务器,我的是网络路由器,在 /etc/resolv.conf 中:

nameserver 192.168.1.1

希望这可以帮助

答案3

我认为你真正需要的不是桥梁,而是:

  • SNAT(如果 WLAN 有静态 IP)(请参阅这一页

或者

  • MASQUERADE(如果 WLAN 具有动态 IP - 即 IP 发生变化)

1)创建forwarding_enable_file.sh以下内容:

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

2)运行文件:

sudo ./forwarding_enable_file.sh

3) 在其余主机上指定你的 Ubuntu 盒子作为网关注意:如果一些盒子也运行 Linux,你可以使用以下命令执行此操作:

sudo ip route add default via ubuntu-ip

在哪里ubuntu-ip应该替换为你的 ubuntu-box IP 地址,即 192.168.1.10

4)尝试从其他主机 ping 某个 IP,例如 8.8.8.8:

ping 8.8.8.8

5)通过 ping 某些域来检查您的 DNS 设置,例如:

ping slivkoed.ru

6) 如果步骤 4) 有效而步骤 5) 无效,则说明您的 DNS 设置存在问题。在这种情况下,请以 root 权限运行:

# echo "nameserver 8.8.8.8" > /etc/resolv.conf

再次运行步骤5)。

有关 resolv.conf 的更多信息,请参见这里

答案4

sudo iw dev wlan1 set 4addr on

相关内容