Decentralization? We're still early!

USB 无线网卡 + Linux:把笔记本电脑改造成 WiFi 路由器

  • USB 无线网卡 + Linux:把笔记本电脑改造成 WiFi 路由器

    發布人 Brave 2026-05-23 14:44

    一台 Linux 笔记本电脑内置一张 WiFi 网卡用于连接上游网络(手机热点、家用路由),再插入一张 USB WiFi 网卡创建接入点(AP),其他设备连接后即可共享上游网络。笔记本同时承担路由、NAT、防火墙、VPN 等任务,功能远超普通家用路由器。

    手机热点/家用路由 ←内置WiFi(STA)── Linux ──USB WiFi(AP)→ 其他设备
                                    ↕
                                VPN/策略路由/防火墙

    核心概念

    为什么需要两张 WiFi 网卡?

    802.11 标准规定一张物理网卡在同一时间只能处于一种工作模式:

    模式作用
    Station(STA)连接别人的热点,作为客户端上网
    Access Point(AP)发射热点,让其他设备连接
    Monitor监听空中无线帧,用于抓包分析

    内置 WiFi 在连接手机热点时已处于 STA 模式,无法同时做 AP。因此需要第二张网卡专门做 AP。

    Linux 如何变成路由器

    组件作用
    IP 转发允许内核在不同网口间转发数据包
    NAT / MasqueradeAP 侧流量伪装后经上游出口发出
    DHCP 服务器给下游设备分配 IP 地址
    iptables / nftables防火墙、访问控制、端口转发

    这些组件全部是 Linux 内核自带功能,无需额外软件。


    硬件选购

    USB WiFi 网卡选购要点

    最关键的参数不是品牌或型号,而是芯片型号。Linux 对无线网卡的兼容性由芯片决定。

    芯片方案对比

    芯片频段理论速率Linux 驱动AP 模式价格
    RTL8188EU2.4GHz150Mbps内核自带¥20-30
    RTL8821CU / RTL8811CU2.4+5GHz150+433Mbps内核 6.14+ 自带¥25-40
    RTL8812AU2.4+5GHz300+867Mbps第三方驱动¥60-100
    AR92712.4GHz150Mbps主线内核,驱动+固件全开源¥30-50
    MT7921au2.4+5GHz WiFi 6574+1201Mbps主线内核 5.19+¥50-100

    避雷指南

    • 不要买 Broadcom 芯片的 USB 网卡(如 BCM43143、BCM4323)。Linux 驱动极度不成熟,AP 模式几乎不可用。
    • 不要买宣称 "免驱" 的网卡。这些 "免驱" 通常指 Windows 内置驱动,Linux 上无意义。
    • 优先买 USB-A 接口。USB-C 接口的 WiFi 网卡极少,选择空间小。买 USB-A 网卡 + 几块钱的转接头即可。

    芯片确认方法

    购买前问卖家芯片型号,或到手后插 Linux 上运行:

    lsusb
    # 输出如:ID 0bda:c811 Realtek Semiconductor Corp.
    # 0bda:c811 即 RTL8811CU
    
    # 确认 AP 模式支持
    iw list | grep -A 10 "Supported interface modes"
    # 输出包含 * AP 即为支持

    网络方案

    基本路由

    上游网络 ← 内置WiFi(WAN) ── Linux(192.168.100.1) ── USB网卡(AP) → 下游设备
                                                            ↑
                                                       DHCP: 192.168.100.x

    加 VPN 网关

    上游网络 ← 内置WiFi(WAN) ── Linux ── VPN隧道 ── USB网卡(AP) → 下游设备全走VPN

    策略路由

    上游网络 ← 内置WiFi ── Linux ── USB网卡(AP) → 设备A走VPN
                                  ↕                      → 设备B走直连
                              ip rule + iptables mark

    配置方法

    方法一:NetworkManager 一键热点(最简单)

    # 查看接口名
    iw dev
    
    # 开热点
    nmcli dev wifi hotspot ifname wlx... ssid MyRouter password 12345678
    
    # 设为持久连接
    nmcli connection add type wifi ifname wlx... mode ap ssid MyRouter \
      wifi-sec.key-mgmt wpa-psk wifi-sec.psk 12345678 \
      ipv4.method shared ipv6.method disabled

    优点:一行命令。缺点:ipv4.method shared 的网段不可控,且与自定义 iptables 策略可能冲突。

    方法二:hostapd + dnsmasq(灵活可控)

    1. 安装

    sudo apt install hostapd dnsmasq

    2. hostapd 配置(AP)

    sudo tee /etc/hostapd/hostapd.conf << 'EOF'
    interface=wlx000000000001
    driver=nl80211
    ssid=MyRouter
    hw_mode=g
    channel=7
    wpa=2
    wpa_passphrase=12345678
    wpa_key_mgmt=WPA-PSK
    rsn_pairwise=CCMP
    EOF

    参数说明:

    参数说明
    interface网卡接口名
    driver=nl80211Linux 标准无线驱动接口
    hw_mode=g2.4GHz(a=5GHz,g=2.4GHz)
    channel信道,2.4GHz 用 1-11,5GHz 用 36-165

    3. dnsmasq 配置(DHCP)

    sudo tee /etc/dnsmasq.d/router-lan.conf << 'EOF'
    port=0
    bind-interfaces
    interface=wlx000000000001
    dhcp-range=192.168.100.50,192.168.100.200,12h
    dhcp-option=3,192.168.100.1
    dhcp-option=6,192.168.100.1
    EOF

    port=0 关闭 dnsmasq 的 DNS 功能,避免端口冲突。dhcp-option=3 把网关指向路由器本身。

    4. 启动

    # 先配 IP
    sudo ip addr flush dev wlx000000000001
    sudo ip addr add 192.168.100.1/24 dev wlx000000000001
    sudo ip link set wlx000000000001 up
    
    # 启 AP
    sudo hostapd -B /etc/hostapd/hostapd.conf
    sleep 2
    
    # 启 DHCP
    sudo systemctl restart dnsmasq
    
    # 开转发 + NAT
    sudo sysctl -w net.ipv4.ip_forward=1
    sudo iptables -t nat -A POSTROUTING -o wlp2s0 -j MASQUERADE
    sudo iptables -A FORWARD -i wlx000000000001 -o wlp2s0 -j ACCEPT
    sudo iptables -A FORWARD -i wlp2s0 -o wlx000000000001 -m state --state RELATED,ESTABLISHED -j ACCEPT

    其中 wlp2s0 是上游 WiFi 接口,wlx000000000001 是 USB 网卡接口。

    方法三:单脚本管理(推荐)

    将所有步骤封装为一个管理脚本,用法:

    sudo ./router setup    交互式配置向导
    sudo ./router start    一键启动
    sudo ./router stop     一键停止
    sudo ./router status   查看状态

    脚本核心流程:

    start:
      1. setup_lan()    → 清旧IP、设固定IP、UP接口
      2. start_ap()     → 杀旧hostapd、启新hostapd、等待就绪
      3. start_dhcp()   → 启dnsmasq(失败重试)
      4. enable_fwd()   → sysctl ip_forward=1
      5. apply_rules()  → iptables NAT + 转发 + 安全规则

    安全增强

    Kill Switch

    VPN 断线时,阻止下游设备通过上游 WiFi 直连互联网:

    iptables -A FORWARD -i wlx... -o wlp2s0 -j DROP

    DNS 劫持

    强制下游 DNS 请求走指定服务器:

    iptables -t nat -A PREROUTING -i wlx... -p udp --dport 53 \
        -j DNAT --to-destination 指定DNS地址

    MSS Clamping

    VPN 隧道有额外开销,不做处理会导致 TCP 分片:

    iptables -t mangle -A FORWARD -o 隧道接口 -p tcp \
        --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

    故障排查

    hostapd 启动后接口状态 NO-CARRIER

    信道不兼容。换信道:

    sudo sed -i 's/channel=7/channel=1/' /etc/hostapd/hostapd.conf
    sudo pkill hostapd && sudo hostapd -B /etc/hostapd/hostapd.conf

    dnsmasq 启动失败

    常见原因:

    错误原因解决
    Address already in use端口 53 被占用配置加 port=0
    unknown interface接口未就绪先确认 hostapd 运行中,加启动延时/重试

    下游设备连上但无法上网

    排查顺序:

    # 1. 确认上游有网
    ping -c 2 1.1.1.1
    
    # 2. 确认转发开启
    cat /proc/sys/net/ipv4/ip_forward
    
    # 3. 确认 iptables 有流量计数
    iptables -L FORWARD -n -v
    
    # 4. 确认下游设备 IP 正确(在设备上查)
    # 网关 = 192.168.100.1,IP 在同一网段

    SSH 断连(Broken Pipe)

    原因:SSH 连接建立在上游 WiFi 接口上,上游断线后连接立即中断。

    解决:从下游侧 SSH 管理:

    # 手机/笔记本连 AP 热点
    ssh user@192.168.100.1

    这样管理路径独立于上游网络。


    macOS 方案

    macOS 也可以实现类似功能,但受限较多:

    # 开启转发
    sudo sysctl -w net.inet.ip.forwarding=1
    
    # pf 做 NAT
    echo "nat on en0 from 192.168.2.0/24 to any -> (en0)" | sudo pfctl -ef -
    
    # DHCP
    sudo /usr/libexec/bootpd -D

    macOS 的限制:

    • USB WiFi 网卡驱动极少(多数只支持 macOS 内置的 Broadcom 卡)
    • AP 模式需要额外驱动(如 macOS 自带的互联网共享功能可用)
    • VPN 策略路由不如 Linux 灵活

    适合轻度使用,重度路由场景建议用 Linux。


    小结

    场景推荐方案投入成本
    临时用nmcli 一行命令开热点¥25-40(USB 网卡)
    日常用hostapd + dnsmasq + iptables¥25-40
    长期稳定单脚本管理 + systemd 自启¥25-80
    高性能MT7921au 双频 WiFi 6¥50-100

    核心思路:一张 USB WiFi 网卡 + Linux 内核 = 完整软件路由器,比硬件路由更灵活,比软路由更低成本。

    Brave 回复 2 weeks, 6 days ago 1 成員 · 0 回复
  • 0 回复

歡迎留言回复交流。

Log in to reply.

讨论開始
00 回复 2018 年 6 月
現在