透明地桥接(而不是路由)有线连接以充当另一个无线 AP

透明地桥接(而不是路由)有线连接以充当另一个无线 AP

我新买的、闪亮的家用 NAS 电脑运行着 Ubuntu 20.04,具有千兆有线连接和 ath-9k 芯片组双频(2.5/5 GHz)wifi 卡。我当前的无线 AP 只有一个 2.5 GHz 无线电,而在我所在的地区,2.5 GHz 相当拥挤。我想使用新电脑从局域网桥接到新的 5 GHz 无线网络,但目前使用与局域网/Wifi 相同的 DHCP 服务器/默认网关/DNS 服务器。这是因为我有一台单板计算机作为默认网关,透明地拦截广告(以及其他功能)。我只需禁用 ISP 提供的路由器上的 DHCP 服务器并使用我自己的服务器(它也是网关,将数据包路由到路由器作为其上唯一的设备)即可实现此目的

以下是我所拥有内容的简短 ascii-art 描述:

+----+      +------------------+
| WAN+------+ISP Router        |
+----+      +------------------+         +--------------------+
            |1000-Base-T       +---------+LAN                 |
            |2.4 GHz (WPA2/PSK)+-------+ +--------------------+    +-----------------+
            +------------------+       | |SBC DHCPd / DNS / GW+----+Wired clients (*)|
                                       | +--------------------+    +-----------------+
                                       |
                                       | +-----------------------+
                                       +-+2.4GHz Wireless clients|
                                         +-----------------------+

我认为我想将计算机配置为有线连接和 wifi 之间的第 2 层桥接器。我不想使用它,hostapd因为我不想让它进行 NAT 和路由——我可能想从有线设备 ssh 到可能与其关联的无线设备。我还希望设备能够在 2.4 GHz 和 5 GHz 之间无缝切换——我相信这样做就像拥有相同的 SSID、身份验证方法(即 WPA2/PSK)和密钥一样简单。

简而言之,我认为我想改变上面的图表以在标记 (*) 的节点处包含“5 GHz 无线客户端”。

我的卡支持 AP 模式和很多其他功能:这是的输出lshw和(非常长的!)的输出iw list

     *-network
                          description: Wireless interface
                          product: AR93xx Wireless Network Adapter
                          vendor: Qualcomm Atheros
                          physical id: 0
                          bus info: pci@0000:03:00.0
                          logical name: wlp3s0
                          version: 01
                          serial: 14:cc:20:10:a6:fa
                          width: 64 bits
                          clock: 33MHz
                          capabilities: pm msi pciexpress bus_master cap_list rom ethernet physical wireless
                          configuration: broadcast=yes driver=ath9k driverversion=5.4.0-39-generic firmware=N/A latency=0 link=no multicast=yes wireless=IEEE 802.11
                          resources: irq:101 memory:fc900000-fc91ffff memory:fc920000-fc92ffff
      ----
# iw list
Wiphy phy0
    max # scan SSIDs: 4
    max scan IEs length: 2257 bytes
    max # sched scan SSIDs: 0
    max # match sets: 0
    max # scan plans: 1
    max scan plan interval: -1
    max scan plan iterations: 0
    Retry short limit: 7
    Retry long limit: 4
    Coverage class: 0 (up to 0m)
    Device supports RSN-IBSS.
    Device supports AP-side u-APSD.
    Device supports T-DLS.
    Supported Ciphers:
        * WEP40 (00-0f-ac:1)
        * WEP104 (00-0f-ac:5)
        * TKIP (00-0f-ac:2)
        * CCMP-128 (00-0f-ac:4)
        * CCMP-256 (00-0f-ac:10)
        * GCMP-128 (00-0f-ac:8)
        * GCMP-256 (00-0f-ac:9)
        * CMAC (00-0f-ac:6)
        * CMAC-256 (00-0f-ac:13)
        * GMAC-128 (00-0f-ac:11)
        * GMAC-256 (00-0f-ac:12)
    Available Antennas: TX 0x7 RX 0x7
    Configured Antennas: TX 0x7 RX 0x7
    Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * monitor
         * mesh point
         * P2P-client
         * P2P-GO
         * outside context of a BSS
    Band 1:
        Capabilities: 0x11ef
            RX LDPC
            HT20/HT40
            SM Power Save disabled
            RX HT20 SGI
            RX HT40 SGI
            TX STBC
            RX STBC 1-stream
            Max AMSDU length: 3839 bytes
            DSSS/CCK HT40
        Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
        Minimum RX AMPDU time spacing: 8 usec (0x06)
        HT TX/RX MCS rate indexes supported: 0-23
        Bitrates (non-HT):
            * 1.0 Mbps
            * 2.0 Mbps (short preamble supported)
            * 5.5 Mbps (short preamble supported)
            * 11.0 Mbps (short preamble supported)
            * 6.0 Mbps
            * 9.0 Mbps
            * 12.0 Mbps
            * 18.0 Mbps
            * 24.0 Mbps
            * 36.0 Mbps
            * 48.0 Mbps
            * 54.0 Mbps
        Frequencies:
            * 2412 MHz [1] (20.0 dBm)
            * 2417 MHz [2] (20.0 dBm)
            * 2422 MHz [3] (20.0 dBm)
            * 2427 MHz [4] (20.0 dBm)
            * 2432 MHz [5] (20.0 dBm)
            * 2437 MHz [6] (20.0 dBm)
            * 2442 MHz [7] (20.0 dBm)
            * 2447 MHz [8] (20.0 dBm)
            * 2452 MHz [9] (20.0 dBm)
            * 2457 MHz [10] (20.0 dBm)
            * 2462 MHz [11] (20.0 dBm)
            * 2467 MHz [12] (20.0 dBm)
            * 2472 MHz [13] (20.0 dBm)
            * 2484 MHz [14] (disabled)
    Band 2:
        Capabilities: 0x11ef
            RX LDPC
            HT20/HT40
            SM Power Save disabled
            RX HT20 SGI
            RX HT40 SGI
            TX STBC
            RX STBC 1-stream
            Max AMSDU length: 3839 bytes
            DSSS/CCK HT40
        Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
        Minimum RX AMPDU time spacing: 8 usec (0x06)
        HT TX/RX MCS rate indexes supported: 0-23
        Bitrates (non-HT):
            * 6.0 Mbps
            * 9.0 Mbps
            * 12.0 Mbps
            * 18.0 Mbps
            * 24.0 Mbps
            * 36.0 Mbps
            * 48.0 Mbps
            * 54.0 Mbps
        Frequencies:
            * 5180 MHz [36] (23.0 dBm)
            * 5200 MHz [40] (23.0 dBm)
            * 5220 MHz [44] (23.0 dBm)
            * 5240 MHz [48] (23.0 dBm)
            * 5260 MHz [52] (23.0 dBm) (no IR, radar detection)
            * 5280 MHz [56] (23.0 dBm) (no IR, radar detection)
            * 5300 MHz [60] (23.0 dBm) (no IR, radar detection)
            * 5320 MHz [64] (23.0 dBm) (no IR, radar detection)
            * 5500 MHz [100] (disabled)
            * 5520 MHz [104] (disabled)
            * 5540 MHz [108] (disabled)
            * 5560 MHz [112] (disabled)
            * 5580 MHz [116] (disabled)
            * 5600 MHz [120] (disabled)
            * 5620 MHz [124] (disabled)
            * 5640 MHz [128] (disabled)
            * 5660 MHz [132] (disabled)
            * 5680 MHz [136] (disabled)
            * 5700 MHz [140] (disabled)
            * 5745 MHz [149] (30.0 dBm)
            * 5765 MHz [153] (30.0 dBm)
            * 5785 MHz [157] (30.0 dBm)
            * 5805 MHz [161] (30.0 dBm)
            * 5825 MHz [165] (30.0 dBm)
    Supported commands:
         * new_interface
         * set_interface
         * new_key
         * start_ap
         * new_station
         * new_mpath
         * set_mesh_config
         * set_bss
         * authenticate
         * associate
         * deauthenticate
         * disassociate
         * join_ibss
         * join_mesh
         * remain_on_channel
         * set_tx_bitrate_mask
         * frame
         * frame_wait_cancel
         * set_wiphy_netns
         * set_channel
         * set_wds_peer
         * tdls_mgmt
         * tdls_oper
         * probe_client
         * set_noack_map
         * register_beacons
         * start_p2p_device
         * set_mcast_rate
         * connect
         * disconnect
         * channel_switch
         * set_qos_map
         * set_multicast_to_unicast
    Supported TX frame types:
         * IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         * managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         * AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         * AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         * mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         * P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         * P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         * P2P-device: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
    Supported RX frame types:
         * IBSS: 0x40 0xb0 0xc0 0xd0
         * managed: 0x40 0xd0
         * AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
         * AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
         * mesh point: 0xb0 0xc0 0xd0
         * P2P-client: 0x40 0xd0
         * P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
         * P2P-device: 0x40 0xd0
    software interface modes (can always be added):
         * AP/VLAN
         * monitor
    valid interface combinations:
         * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1,
           total <= 2048, #channels <= 1, STA/AP BI must match
    HT Capability overrides:
         * MCS: ff ff ff ff ff ff ff ff ff ff
         * maximum A-MSDU length
         * supported channel width
         * short GI for 40 MHz
         * max A-MPDU length exponent
         * min MPDU start spacing
    Device supports TX status socket option.
    Device supports HT-IBSS.
    Device supports SAE with AUTHENTICATE command
    Device supports low priority scan.
    Device supports scan flush.
    Device supports AP scan.
    Device supports per-vif TX power setting
    P2P GO supports CT window setting
    Driver supports full state transitions for AP/GO clients
    Driver supports a userspace MPM
    Device supports active monitor (which will ACK incoming frames)
    Driver/device bandwidth changes during BSS lifetime (AP/GO mode)
    Device supports configuring vdev MAC-addr on create.
    Supported extended features:
        * [ RRM ]: RRM
        * [ FILS_STA ]: STA FILS (Fast Initial Link Setup)
        * [ CQM_RSSI_LIST ]: multiple CQM_RSSI_THOLD records
        * [ CONTROL_PORT_OVER_NL80211 ]: control port over nl80211
        * [ TXQS ]: FQ-CoDel-enabled intermediate TXQs
        * [ AIRTIME_FAIRNESS ]: airtime fairness scheduling

我尝试过这样做bridge-utils,即通过直接桥接接口:

   $ brctl addbr br0
   $ brctl addif br0 enp4s0 wlp3s0

不幸的是,这导致计算机上的所有 DNS 解析停止(!)并导致一些我无法理解的“有趣”路由错误:例如,我可以ping 8.8.8.8但不能dig @8.8.8.8 google.com。即使这样做

   $ brctl br0 down
   $ brctl delbr br0

仍然导致重新启动/etc/init.d/networking

我不明白为什么这不起作用。我也尝试过使用 Ubuntu 的网络管理器 GUI,创建一个新的“共享”AP——它只是打开了hostapd,也广泛搜索了谷歌,但找不到明确的答案。我知道具有多个无线网桥的网络拓扑确实存在——配置它的最简单方法是什么?

答案1

有几个复杂因素值得考虑。

最简单的一个是?hostapd 不执行路由或 DHCP,并且可能可以自行顺利运行。

最简单、最小的 hostapd 配置文件如下所示

#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=test
channel=1

全部它关心的是 wifi,由于各种原因我记得的唯一的低级网络选项是 vlan 标记。

关于如何运行整个堆栈,我有一个很长的答案,并且您实际上有不同的工具来执行 nat masqurade(您的防火墙)、DNS(如果您很厉害,则使用 Bind9,如果您很懒,则使用 DNSMASQ)、DHCP(DHCPd 或 DNSMASQ)、桥接(在您的情况下,是网络管理器,但 systemd/networkd - 可以使用 netplan 作为可选工具来配置,也可以使用 bridgectl 进行经典网络设置...)。ip 可以进行路由,但我从未明确触及过它。

实际上,每种情况都有 2-3 种工具,它们都是可选的,并且可以在同一个盒子上运行,也可以不运行。

但简单的答案是打开带有网络管理器 GUI 的共享 AP 就可以了,并且大概会选择您正在运行的 dns 和 dhcp 堆栈。

答案2

经过一个多月的试验,我想发布我(作为 OP)如何设法找到解决方案。我发现的主要问题是许多基于网络管理器的 GUI 工具会尝试在绑定接口上启动 DHCP 服务器,而我发现“自动”会做什么的解释非常不清楚。

最终,以下方法奏效了。

物理层

首先,我创建了一个适当修改的hostapd配置文件,以便创建一个无线接入点:

cp /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/hostapd.conf

对于我的 TP-Link TL-WDN4800 N900 PCI-e 卡,这需要modprobe-ingath9k驱动程序(如果尚未),然后调整(非常详细!)关于接口的配置文件(wlp3s0对我来说),明确告知它我们想要创建一个桥接器(bridge=br0)并设置country_codessidhw_mode=a5 GHz 802.11ac(如果启用了 VHT,则在下面)。通过启用 VHT、80 MHz 通道和各种其他设置,我实际上已经设法获得了 780 MiB/s 的链接速度(在附近的 MacbookPro 上),超过了盒子宣传的链接速度。如果它对其他人有帮助,我将整个文件作为要点这里

整个过程都需要运行,最好是在启动时运行,因此,我们需要明确启用它(如果你愿意的话!一个更“手动”的选项是在 shell 中调用它,或者使用-B守护进程选项):

sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

到目前为止,正如 Journeyman Geek 所说,您有一个广播 SSID,设备可以对其进行身份验证。但是,它们的数据包无处可去。

创建桥梁

经过一番折腾,我最终意识到我之前的“困境”如下:(a)我没有意识到网桥本身需要在两个网段上具有相同的 IP(显然),此外,各个物理接口也需要因此关闭(b)由于某些我无法理解的原因,systemd-resolvconf未能解决任何事物一旦桥建好。

让我们偷懒并使用过时但方便的brutils包:

apt install bridge-utils #If required 
brctl addbr br0 #Create the bridge 
brctl addif br0 enp4s0 #Add interfaces to it 
brctl addif br0 wlp3s0

然后,我们为网桥分配一个 IP(10.0.0.105在我的网络上),并将其从其他接口中删除:

ifconfig br0 10.0.0.105 netmask 255.255.255.0
ifconfig enp4s0 0.0.0.0
ifconfig wlp3s0 0.0.0.0

最后,启动网桥:对我来说,这会破坏默认路由表,因为默认路由信息与硬件enp4s0接口相关联。因此,让我们直接重新添加它和路由器(10.0.0.130):

ifconfig br0 up
route add default gateway 10.0.0.130

现在,到了这一步,一切——正如我之前所想的——应该可以工作,但令人恼火的是,呃,没有。剩下什么?路由(正确)和 DNS。路由很简单:我们需要明确启用它,然后添加一些iptables规则来强调这一点:

echo 1 > /proc/sys/net/ipv4/ip_forward 
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i enp4s0 -j ACCEPT
iptables -A INPUT -i wlp3s0 -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

DNS 问题更大。尽管我花了很长时间研究 systemd-resolvconf,但我的所有 DNS 查询都会神秘地消失在以太中,就好像它正在向(现在不起作用的)硬件 enp4s0 接口发送数据包一样。

到目前为止,对我来说最快的事情是禁用 systemd-resolve(systemctl disable systemd-resolve),然后编辑/etc/resolv.conf为一个文件(而不是符号链接),其中包含我本地网络的 DNS 服务器(也是10.0.0.130)和域信息。

突然,一切都正常了!我有一个快速、可配置、透明的无线桥接“范围扩展器”(利用我的千兆网络)。

为了方便以后参考,这是对 Linux 中存在的各种虚拟网络形式的一个很好的介绍——其中一个很好的概述是这里(archive.org链接)希望它能给地球上的其他人带来些许帮助。

相关内容