4

Я нахожусь в процессе создания своего собственного маршрутизатора на основе Linux и столкнулся с проблемой, соединяющей сети Wi-Fi и LAN. Раньше на устройстве работал pfSense, но из-за невозможности использовать мой внутренний адаптер Wi-Fi я решил построить свой собственный маршрутизатор поверх CentOS 7.

Коробка имеет только один порт Ethernet, поэтому я настроил управляемый коммутатор для создания двух VLAN:

  • enp3s0.10: LAN
  • enp3s0.99: WAN

Я установил hostapd, подключенный к точке доступа Wi-Fi, но заметил, что моему устройству не удалось получить IP-адрес с моего DHCP-сервера. Устройства Wi-Fi, подключенные к моей сети, должны иметь доступ к другим устройствам в проводной локальной сети, таким как мои службы DHCP и DNS.

Я попытался соединить enp3s0.10 с адаптером Wi-Fi (wls4), но это только привело к тому, что мой порт LAN стал недоступен извне. Можно ли соединить VLAN с помощью беспроводного адаптера или есть лучший способ сделать это? Как это делают недорогие потребительские маршрутизаторы?

Топология сети

В соответствии с просьбой (спасибо Дамиано Верзулли) я добавил диаграмму топологии своей сети. Из-за того, что у меня было менее 10 очков репутации, я был вынужден предоставить ссылку.

Диаграмма топологии сети

Заметки:

  • Блок Linux для маршрутизатора (на схеме "Router") имеет один порт Ethernet (enp3s0) и внутренний адаптер Wi-Fi (wls4)
  • За исключением enp3s0.99 (который получает свой адрес / подсеть от моего кабельного модема), все другие устройства в моей локальной сети имеют адрес в пространстве 192.168.1.0/24

1 ответ1

3

Мне удалось решить мою проблему, и я хотел поделиться с другими, которые могут столкнуться с подобной проблемой в будущем.

Моя сеть

  • enp3s0 - физический сетевой адаптер
  • enp3s0.10 - VLAN; подключается к локальной сети
  • enp3s0.99 - VLAN; подключается к WAN (кабельный модем)
  • wls4 - беспроводной адаптер

Решение

  1. Определите каждый сетевой интерфейс (включая мостовой интерфейс с именем br0)

    Установите значение /etc/sysconfig/network-scripts/ifcfg-enp3s0 в:

    TYPE=Ethernet
    BOOTPROTO=none
    DEVICE=enp3s0
    ONBOOT=yes
    

    Установите значение /etc/sysconfig/network-scripts/ifcfg-br0 в:

    DEVICE=br0
    TYPE=Bridge
    IPADDR=192.168.1.1
    NETMASK=255.255.255.0
    ONBOOT=yes
    BOOTPROTO=none
    

    Установите значение /etc/sysconfig/network-scripts/ifcfg-enp3s0.10 в:

    DEVICE=enp3s0.10
    BOOTPROTO=none
    ONBOOT=yes
    BRIDGE=br0
    VLAN=yes
    

    Установите значение /etc/sysconfig/network-scripts/ifcfg-enp3s0.99 в:

    DEVICE=enp3s0.99
    BOOTPROTO=dhcp
    ONBOOT=yes
    VLAN=Yes
    
  2. Перезагрузите сеть

    [admin@router ~]$ sudo service network start
    
  3. Настройка hostapd

    Установите значение /etc/hostapd/hostapd.conf в:

    #
    # For more information:
    #
    # https://wireless.wiki.kernel.org/en/users/Documentation/hostapd
    # https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf
    #
    
    # Wireless Interface
    interface=wls4
    driver=nl80211
    
    # Wireless Environment
    ssid=[router_ssid_here]
    hw_mode=g
    channel=1
    
    # Authentication and Encryption
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0
    wpa=2
    wpa_passphrase=[ap_password_here]
    wpa_key_mgmt=WPA-PSK
    wpa_pairwise=TKIP
    rsn_pairwise=CCMP
    
    # Country
    country_code=US
    ieee80211d=1
    
    # IEEE 802.11ac (req hw_mode=a)
    # ieee80211ac=1
    
    # IEEE 802.11n
    ieee80211n=1
    
    # WMM
    wmm_enabled=1
    
  4. Создайте сервис systemd для добавления wls4 к мосту br0 и запустите hostapd. Я сделал это по следующим причинам:

    • wls4 время от времени удалялся с моста br0, когда я добавлял объявление моста в hostapd.conf
    • Перед успешным запуском hostapd мне сначала нужно было вызвать rfkill unblock wlan
  5. Создайте /root/launch_hostapd.sh (должен быть от имени root)

    #!/bin/bash
    
    # Set 4addr on wifi adapter
    iw dev wls4 set 4addr on
    
    # Add wifi adapter to bridge br0
    ip link set wls4 master br0
    
    # Unblock wlan
    rfkill unblock wlan
    
    # Launch hostapd
    systemctl start hostapd
    
  6. Сделайте /root/launch_hostapd.sh исполняемым

    [admin@router ~]$ sudo chmod +x /root/launch_hostapd.sh
    
  7. Создайте /etc/systemd/system/launch_hostapd.service (необходимо выполнить от имени пользователя root)

    [Unit]
    Description=Runs "rfkill unblock wlan" and then launches hostapd
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/root/launch_hostapd.sh
    TimeoutStartSec=0
    
    [Install]
    WantedBy=default.target
    
  8. Перезагрузить демон systemctl

    [admin@router ~]$ sudo systemctl daemon-reload
    
  9. Включить / запустить сервис launch_hostpad

    [admin@router ~]$ sudo systemctl enable launch_hostapd
    [admin@router ~]$ sudo systemctl start launch_hostapd
    

Заключение

Я надеюсь, что это поможет всем, кто захочет соединить свои интерфейсы LAN и WLAN в попытке разместить AP через hostapd.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .