Linux 中的有线到无线桥接

Linux 中的有线到无线桥接

我正在尝试使用 Debian wheezy 将我的 Raspberry Pi 设置为桥接器。我有一个hostapd.conf:(出于安全考虑更改了一些细节,是的,我知道 WEP 不好)...

interface=wlan0
bridge=br0
driver=nl80211
auth_algs=1
macaddr_acl=0
ignore_broadcast_ssid=0
logger_syslog=-1
logger_syslog_level=0
hw_mode=g
ssid=MY_SSID
channel=11
wep_default_key=0
wep_key0=MY_KEY
wpa=0

这是/etc/network/interfaces

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
auto br0
iface br0 inet dhcp
bridge-ports eth0 wlan0

一切似乎都正常,但我无法关联桥接的无线连接 - 即使 USB 棒上的闪烁指示灯表明正在交换数据包。

我读到过一些文章说不是所有的卡/设备都能在 hostap 模式下运行 - 它们不会在一个方向上传递数据包:对吗?(这个信息有点旧)- 这是我的卡:

[    3.663245] usb 1-1.3.1: new high-speed USB device number 5 using dwc_otg
[    3.794187] usb 1-1.3.1: New USB device found, idVendor=0cf3, idProduct=9271
[    3.804321] usb 1-1.3.1: New USB device strings: Mfr=16, Product=32, SerialNumber=48
[    3.816994] usb 1-1.3.1: Product: USB2.0 WLAN
[    3.823790] usb 1-1.3.1: Manufacturer: ATHEROS
[    3.830645] usb 1-1.3.1: SerialNumber: 12345

那么,我在这里犯了什么错误?

更新:因此,我进行了进一步调查,并可以建立桥接,但似乎这会破坏(有线)以太网连接,这很奇怪。例如,在 RPi 上:

启动系统...

ping 192.168.62.1 

(路由器)- 可以

尝试连接无线局域网...失败(或者更确切地说,Android 手机上的“连接有限” - 不好)

brctl showmacs br0

此时仅显示 wlan0 的 mac 和手机的 mac。

brctl addif br0 eth0 wlan0

此时我可以将手机与无线网络关联起来,但是......

ping 192.168.62.1

...失败

同样,我无法再从网络上的任何其他机器 ping 通 RasPi

跑步

ifconfig br0

表明网桥正在丢弃数据包......

有任何想法吗?

进一步更新/etc/network/interfaces文件现在(对于上述序列)的内容为:

auto lo eth0

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

答案1

轻松架设桥梁:

sourceforge 上有一个专门针对您的情况的项目。http://sourceforge.net/projects/bridger/它甚至以 deb 包的形式提供。

关于“丢弃”数据包:

  1. 您是否检查过 iptables 是否设置为默认丢弃? sudo iptables --list 对于这种类型的框,应该显示“接受、接受、接受”。如果这是问题所在,请将其关闭。

  2. 兄弟,你还在转发数据包吗?确保 /etc/sysctl.conf 中的“net.ipv4.ip_forward=1”行未被注释(默认是这样的),然后重新启动网络。

  3. 不支持混杂模式通过您的无线加密狗。(这意味着它不能接受不是发往它的数据包)

纯桥接与共享桥接:

  1. iface br0 inet dhcp表示共享桥接,意味着桥接器本身获得一个 IP,并且可以作为流量的端点。

  2. 纯净的桥梁没有获取 IP 地址,仅在两个接口之间转发流量

  3. 共享桥示例 /etc/network/interfaces 配置文件(Debian/Ubuntu)

# 此文件描述了系统上可用的网络接口
# 以及如何激活它们。有关更多信息,请参阅interfaces(5)。

# 环回网络接口
自动档
iface lo inet 环回

# eth0 和 wlan0 之间的桥接
自动 br0
iface br0 inet dhcp
  预先将 ip link 设置 eth0 关闭
  预先将 ip link 设置 wlan0 down
  预先 brctl addbr br0
  预先 brctl addif br0 eth0 wlan0
  预先设置 ip 地址 flush dev eth0
  预先设置 ip addr flush dev wlan0
  关闭后 IP 链路设置 eth0 关闭
  故障后 IP 链路设置 wlan0 关闭
  关闭后 IP 链路设置 br0 关闭
  停机后 brctl delif br0 eth0 wlan0
  后关闭 brctl delbr br0

重新启动网络:sudo /etc/init.d/networking restart在进行复杂的网络配置更改后,只需重新启动就更容易,而不是确保重新启动时一切都正确重新启动。

您认为存在路由问题:

  1. 消除 DNS 作为原因通过测试ping 8.8.8.8。如果成功,则您的网络可能存在 DNS 问题。

  2. 检查网关希望sudo ip route您能看到default via 192.168.1.1 dev br0 proto dhcp(假设您的网关是 192.168.1.1)。如果缺失或错误,请修复它sudo ip route add default via 192.168.1.1。再次测试:ping 8.8.8.8

  3. 更新共享桥接 IPdhclient br0重新测试ping 8.8.8.8

  4. 检查你的“从属”接口ifconfig确保 eth0 和 wlan0 没有 IP 地址。它们现在是网桥的一部分。如果有,请确保从所有配置文件中删除它们,将它们设置为静态 0.0.0.0 或其他。

如果这些都不起作用,请尝试使用 Debian 桥接应用程序,如果它不起作用,则说明您的无线加密狗不支持混杂模式。(参见上文)

如果它在此处的任何时候起作用,请重新启动并确保它仍然起作用。

答案2

我有一些在 Debian Linux 和 Openwrt 上运行的无线网桥,所以我对这个问题非常熟悉。

您漏掉了一个重要命令:您忘记告诉无线驱动程序传输 4 地址帧(有时不恰当/历史上称为 WDS),这是 802.11/无线桥接所必需的。使用命令“iw dev wlan0 set 4addr on”执行此操作。在桥接器上使用 Debian 接口文件中的“pre-up”语句在启动桥接器之前应用它。请注意,4 地址帧模式需要驱动程序支持,一些旧的糟糕的 802.11 驱动程序或硬件可能不支持它。

我还强烈怀疑您的问题可能由于 Linux 内核中的一个错误而变得复杂,该错误特别影响桥接接口。我自己也遇到了这个错误,并且不得不从源代码编译我自己的 wpa_supplicant,因为 Debian 中的版本很旧并且受到影响。wpa_supplicant 和 hostapd 共享一个通用的代码库,但我不能完全确定这是否影响了 hostapd 和 wpa_supplicant。

这里有一个解决该问题的方法:

https://w1.fi/cgit/hostap/commit/?id=e6dd8196e5daf39e4204ef8ecd26dd50fdca6040

我印象中这是在 2.5 版本中,我知道它在当前的 2.6 源中。当前的 Debian 版本是 2.4,它有问题。请催促 Debian 项目更新他们的 wpasupplicant 和 hostapd 包。

以下是使用 WPA/WPA2 的无线桥接客户端的示例配置,在接口 wlan0 和 eth0 之间有无线桥接,主机在 br0 接口上获取 DHCP 地址(将“dhcp”替换为“manual”,表示没有 IP 地址)。对于您想要成为 AP 的情况,请在 hostapd.conf 中包含 interface= 和 bridge= 命令,并省略下面的 wpa-* 命令。

在您的 /etc/network/interfaces 文件中:

allow-auto br0
iface br0 inet dhcp
    bridge_ports wlan0 eth0
    bridge_stp off
    bridge_waitport 5
    bridge_fd 0
    wpa-ssid mynetwork
    wpa-psk abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123
    wpa-iface wlan0
    wpa-bridge br0
    pre-up iw dev wlan0 set 4addr on
    post-down iw dev wlan0 set 4addr off

并确保你的 wpa_supplicant 是 2.5 或更高版本。它不适用于 wpa_supplicant 2.4 和当前内核版本。

我还应该指出,ifup 中目前存在一个竞争错误,桥接接口可能无法在启动时启动,但这是另一个问题。

答案3

你似乎需要 IP 转发。

尝试cat /proc/sys/net/ipv4/ip_forward

如果是0问题:echo 1 > /proc/sys/net/ipv4/ip_forward

答案4

配置 wlan0

vi /etc/网络/接口

iface eth0 inet static
address 192.168.2.1
network 192.168.2.0
netmask 255.255.255.0
broadcast 192.168.2.255

六、/etc/sysctl.conf

net.ipv4.ip_forward=1

六、/etc/rc.local

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o wlan0 -j MASQUERADE

相关内容