Construindo uma ponte sobre VLAN e Wifi


4

Estou no processo de construção do meu próprio roteador baseado em Linux e deparei-me com um problema de ponte entre as redes wifi e LAN. A caixa executava o pfSense anteriormente, mas devido à sua incapacidade de usar meu adaptador wifi interno, decidi construir meu próprio roteador sobre o CentOS 7.

A caixa possui apenas uma porta Ethernet, portanto, configurei um switch gerenciado para criar duas VLANs:

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

Eu configurei o hostapd, conectado ao ponto de acesso wifi, mas notei que meu dispositivo não conseguiu obter um IP do meu servidor DHCP. Os dispositivos wifi conectados à minha rede precisarão acessar outros dispositivos na LAN com fio, como meus serviços DHCP e DNS.

Eu tentei fazer uma ponte entre o enp3s0.10 e o adaptador wifi (wls4), mas isso só faz com que minha porta LAN fique inacessível externamente. É possível conectar uma VLAN a um adaptador sem fio ou existe uma maneira melhor de fazer isso? Como os roteadores de consumo baratos conseguem isso?

Topologia de rede

Conforme solicitado (obrigado Damiano Verzulli), adicionei um diagrama da minha topologia de rede. Por ter menos de 10 pontos de reputação, fui forçado a fornecer um link.

Diagrama de topologia de rede

Notas:

  • A caixa do roteador Linux ("Roteador" no diagrama) possui uma porta Ethernet (enp3s0) e um adaptador wifi interno (wls4)
  • Com exceção do enp3s0.99 (que recebe seu endereço / sub-rede do meu modem a cabo), todos os outros dispositivos na minha LAN têm um endereço no espaço 192.168.1.0/24

Sophos UTM é um aparelho roteador livre para uso doméstico, que funcionam bem, ele tem toda a característica enteprise
yagmoth555

obrigado, mas estou mais interessado em aprender como fazer isso funcionar.

1
Por favor, você pode detalhar sua topologia de rede? Por exemplo: como o seu AP está conectado à sua LAN? Está realmente agindo como um AP idiota e não como um roteador wifi? Qual dispositivo está atuando como servidor DHCP? Qual sub-rede / endereços IP você está usando em suas interfaces / dispositivos? Além disso, seria útil um esquema de rascunho (mesmo um feito à mão anexado como imagem) de toda a rede.
Damiano Verzulli

@DamianoVerzulli Adicionei um diagrama de topologia de rede. Esta é a minha primeira tentativa de criar um; portanto, se estiver faltando alguma coisa, informe-me para que eu possa atualizá-lo. Meu AP é criado através do serviço hostapd em execução na mesma caixa e aponta para o adaptador wifi interno (wls4). Com exceção do enp3s0.99 (obtém IP / sub-rede do modem a cabo), todos os dispositivos na minha LAN pertencem a 192.168.1.0/24.

Respostas:


3

Consegui resolver o meu problema e queria compartilhar com outras pessoas que possam enfrentar um problema semelhante no futuro.

Minha rede

  • enp3s0 - Adaptador físico de Ethernet
  • enp3s0.10 - VLAN; conecta à LAN
  • enp3s0,99 - VLAN; conecta-se à WAN (modem a cabo)
  • wls4 - adaptador sem fio

Solução

  1. Defina cada interface de rede (incluindo uma interface de ponte chamada br0 )

    Defina o valor de / etc / sysconfig / network-scripts / ifcfg-enp3s0 como:

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

    Defina o valor de / etc / sysconfig / network-scripts / ifcfg-br0 para:

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

    Defina o valor de /etc/sysconfig/network-scripts/ifcfg-enp3s0.10 como:

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

    Defina o valor de /etc/sysconfig/network-scripts/ifcfg-enp3s0.99 como:

    DEVICE=enp3s0.99
    BOOTPROTO=dhcp
    ONBOOT=yes
    VLAN=Yes
    
  2. Reinicie a rede

    [admin@router ~]$ sudo service network start
    
  3. Configuração hostapd

    Defina o valor de /etc/hostapd/hostapd.conf para:

    #
    # 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. Crie um serviço systemd para adicionar wls4 à bridge br0 e inicie o hostapd. Fiz isso pelos seguintes motivos:

    • O wls4 caiu esporadicamente da ponte br0 quando adicionei a declaração da ponte no hostapd.conf
    • Antes que o hostapd possa ser iniciado com sucesso, eu precisava primeiro chamar rfkill unblock wlan
  5. Crie /root/launch_hostapd.sh (deve ser feito como 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. Tornar /root/launch_hostapd.sh executável

    [admin@router ~]$ sudo chmod +x /root/launch_hostapd.sh
    
  7. Crie /etc/systemd/system/launch_hostapd.service (deve ser feito como 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. Recarregar daemon systemctl

    [admin@router ~]$ sudo systemctl daemon-reload
    
  9. Ativar / iniciar o serviço launch_hostpad

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

Conclusão

Espero que isso ajude qualquer pessoa que queira conectar suas interfaces LAN e WLAN na tentativa de hospedar um AP via hostapd.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.