如何通过 WiFi 将路由器桥接到有线 LAN?

如何通过 WiFi 将路由器桥接到有线 LAN?

我有一个连接到 WiFi 路由器的有线调制解调器。我已将路由器配置为提供 DHCP。由于我家的布局,我无法将家用有线 LAN 物理连接到路由器。我希望使用带有 WiFi 适配器和以太网的 Raspberry Pi 作为有线网络、无线网络和路由器之间的桥梁。

一些目标:

  1. 无线和有线设备可以相互连接。
  2. 无线和有线设备都可以看到互联网。
  3. 所有设备都通过路由器的 DHCP 获取其 IP 地址。
  4. 重启后会自动出现正确的配置。

我的基本问题是,我该如何配置我的设备来实现这些目标?

我在 Raspberry Pi 上安装并运行了 bridge-utils。如果我在 /etc/network/interfaces 中启用桥接,那么 Raspberry Pi 会徒劳地寻找 DHCP 服务器,并且无法获得 IP 地址。如果我禁用桥接,那么 Raspberry Pi 会毫无困难地从路由器获得 DHCP 响应,获得 IP 地址,并可以访问互联网。

有线 LAN 上还有一台 Synology DiskStation,它可以提供 DHCP,因此如果有帮助的话,我很乐意启用它。但是那样的话,我就有两个 DHCP 服务器,因此我可能需要两个子网以及它们之间的一些路由。如果可能的话,我希望让事情变得更简单。

这是我的 /etc/network/interfaces 文件:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
        wpa-ssid "MySSID"
        wps-psk "MyPassword"

auto br0
iface br0 inet manual
        pre-up iwconfig wlan0 essid "MySSID"
        bridge_hw 12:34:56:78:90:ab
        bridge_ports wlan0 eth0
        bridge_stp off
        bridge_maxwait 5
        bridge_fd 0

bridge_hw 行包含 Raspberry Pi 上 WiFi 适配器的 MAC 地址。我还尝试了类似这样的 br0 节(发现这里),但它也不起作用:

auto br0
iface br0 inet dhcp
  pre-up ip link set eth0 down
  pre-up ip link set wlan0 down
  pre-up brctl addbr br0
  pre-up brctl addif br0 eth0 wlan0
  pre-up ip addr flush dev eth0
  pre-up ip addr flush dev wlan0

我在 /etc/sysctl.conf 中启用了 net.ipv4.ip_forward,但似乎没有帮助。我查看了系统日志,但没有发现任何明显的问题。

我读了很多关于桥接,DHCP,已删除dhcre中继/etc/网络/接口系统配置,但我不清楚如何配置我的系统,以便 wlan0 首先在 Raspberry Pi 上启动,从路由器获取 DHCP 信息,然后网桥启动,然后 eth0 在 Raspberry Pi 上启动,通过网桥获取其 DHCP,然后其他有线设备也可以,无线设备可以看到有线设备。如果这有帮助的话,我很乐意在 Raspberry Pi 上切换到静态 IP。

答案1

你不能轻易桥接 wifi 接口,请参阅这里以获得更好的解释。有很多方法可以解决这个问题(例如,VirtualBox 开箱即用),我将向您展示一种方法。

如果您无法桥接wlan0eth0则可以通过 来在它们之间中继 IP 流量ip_forward,但这会遗漏两种重要的流量,即 DHCP(使用原始套接字)和 ARP(这是第 2 层协议,因此不在 ip-forward 的范围内)。我们通过设置自己的 DHCP 服务器来解决第一个问题,该服务器eth0仅在接口上应答查询;要使它正常工作,我们必须确保您的路由器和 RPi 上的 dnmasq 分配的 IP 地址范围不是重叠。我们通过启用代理arp

最简单的方法是忽略parprouteddhcrelay,但这会带来不必要的麻烦。我们将改用proxy-arp

  1. 选择您的路由器所处的 LAN 中的子网不是用于分配 IP 地址,例如192.168.1.160/27,并将其第一个地址分配192.168.1.161给您的eth0接口:

    ip addr add 192.168.1.161/32 dev eth0
    
  2. 告诉内核可以在eth0接口上找到这个子网:

    ip route add 192.168.1.160/27 dev eth0
    
  3. 启用代理arp和ip_forwarding:

    echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
    echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
    echo 1 > /proc/sys/net/ipv4/ip_forward 
    
  4. 下载并安装 dnsmasq 以在 eth0 接口上执行 DHCP:

    apt-get install dnsmasq
    

    然后创建一个文件,/etc/dnsmasq.conf内容如下:

    domain-needed
    bogus-priv
    dhcp-authoritative
    interface=eth0
    local=/YourDomainName.lan/
    server=8.8.8.8
    server=8.8.4.4
    expand-hosts
    domain=YourDomainName.lan
    dhcp-range=192.168.1.162,192.168.1.190,12h
    
  5. 重新启动dnsmasq,您就完成了。

在启动时启动上述所有内容应该很简单,如果不是,请告诉我。

相关内容