web-dev-qa-db-ja.com

ブリッジングVLANとWifi

私は自分のLinuxベースのルーターを構築している最中であり、wifiとLANネットワークのブリッジングの問題に遭遇しました。ボックスは以前はpfSenseを実行していましたが、内部のWi-Fiアダプターを使用できないため、CentOS7上に独自のルーターを構築することにしました。

ボックスにはイーサネットポートが1つしかないため、マネージドスイッチをセットアップして2つのVLANを作成します。

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

Wi-Fiアクセスポイントに接続してhostapdをセットアップしましたが、デバイスがDHCPサーバーからIPをプルできないことに気付きました。ネットワークに接続されているwifiデバイスは、DHCPやDNSサービスなど、有線LAN上の他のデバイスにアクセスできる必要があります。

Enp3s0.10をwifiアダプター(wls4)でブリッジしようとしましたが、それではLANポートに外部からアクセスできなくなります。 VLANをワイヤレスアダプタでブリッジすることは可能ですか、それともこれを実現するためのより良い方法はありますか?安価なコンシューマールーターはこれをどのように実現しますか?

ネットワークトポロジ

要求に応じて(Damiano Verzulliに感謝)、ネットワークトポロジの図を追加しました。レピュテーションポイントが10未満だったため、リンクを提供する必要がありました。

ネットワークトポロジ図

注:

  • ルーターのLinuxボックス(図の「ルーター」)には、1つのイーサネットポート(enp3s0)と内部wifiアダプター(wls4)があります。
  • Enp3s0.99(ケーブルモデムからアドレス/サブネットを受信する)を除いて、LAN上の他のすべてのデバイスのアドレスは192.168.1.0/24スペースにあります。
4
Mike B

私はなんとか自分の問題を解決し、将来同様の問題に直面する可能性のある他の人と共有したいと思いました。

私のネットワーク

  • enp3s0-物理イーサネットアダプタ
  • enp3s0.10- VLAN; LANに接続します
  • enp3s0.99- VLAN; WAN(ケーブルモデム)に接続します
  • wls4-ワイヤレスアダプター

解決

  1. 各ネットワークインターフェイスを定義します(brという名前のブリッジインターフェイスを含む)

    / etc/sysconfig/network-scripts/ifcfg-enp3sの値を次のように設定します。

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

    / etc/sysconfig/network-scripts/ifcfg-brの値を次のように設定します。

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

    / etc/sysconfig/network-scripts/ifcfg-enp3s0.1の値を次のように設定します。

    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をブリッジに追加brそしてhostapdを起動します。私は次の理由でこれを行いました:

    • wls4ブリッジから散発的にドロップしますbr 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
    

結論

これが、hostapdを介してAPをホストしようとしてLANおよびWLANインターフェイスをブリッジしたい人に役立つことを願っています。

3
Mike B