Edited at

ラズパイ+3GPiをufw/hostapd/dnsmasqでモバイルWi-Fiルータにして格安SIMで使う

More than 1 year has passed since last update.

タイトル通りですが、ラズパイ+メカトラックス様の「3GPi」を、ufw/hostapd/dnsmasqでモバイルWi-Fiルータ化し、格安SIMで使ってみます。


何ができるの?


参照サイト

※何故かdnsmasqの代わりにisc-dhcp-serverが多いようですが、元記事に従ってdnsmasqを使い、DHCP兼DNSサーバにします。


ネットワーク構成

Internet --(3G回線)-- <ppp0>[3GPi+格安SIM]+[RPi]<wlan0> --(無線LAN)-- [制御機器、Google Home等]


準備するもの


  • Raspberry Pi 3 Model B(またはRPi2とUSB無線LANドングルの組み合わせ+追加設定)


  • 3GPi+同梱Raspbian(3gpi2-jessie-20170904)(またはUSBモデム+追加設定)

  • 3GPiで使える格安SIM

  • 無線LAN機器(スマートフォン、タブレット、制御機器、Google Home等)


構築手順


  1. ラズパイ+3GPiをNATルータにします [ufw]

  2. ラズパイを無線LANのAP(アクセスポイント)にします [hostapd]

  3. ラズパイをDHCPサーバ・DNSサーバにします [dnsmasq]

※今回ラズパイの有線LANは利用しません。(無線LANとブリッジする、別LANで使う、などの応用は可能です)


ufwでラズパイ+3GPiをNATルータに



  1. ufwのインストール、初期設定

    インストール

    sudo apt-get install ufw
    

    IPv6無効

    sudo vi /etc/default/ufw
    


    /etc/default/ufw

    #IPV6=yes
    
    IPV6=no

    全ての接続を拒否

    sudo ufw default deny
    

    default denyでもpingには応答してしまうので、ppp0(SIM側)のみ拒否

    sudo vi /etc/ufw/before.rules
    


    /etc/ufw/before.rules

    #「# ok icmp codes」の直前
    
    # ppp0
    -A ufw-before-input -p icmp -i ppp0 --icmp-type echo-request -j DROP

    ufw有効化、状態確認

    sudo ufw enable
    
    sudo ufw status



  2. 格安SIMのAPN設定

    sudo nmcli con add type gsm ifname "*" con-name [名称] apn [APN名] user [ID] password [Password]
    



  3. IPv4フォワーディングを有効に変更(コメントアウトを外す)

    sudo vi /etc/sysctl.conf
    


    /etc/sysctl.conf

    net.ipv4.ip_forward=1
    




  4. ufwのNAPT設定

    IPv4フォワードポリシーを有効に変更

    sudo vi /etc/default/ufw
    


    /etc/default/ufw

    #DEFAULT_FORWARD_POLICY=”DROP”
    
    DEFAULT_FORWARD_POLICY=”ACCEPT"

    NAPT(MASQUERADE)を設定

    sudo vi /etc/ufw/before.rules
    


    /etc/ufw/before.rules

    #「# Don't delete these required lines, otherwise there will be errors」の直前に追加
    
    # NAPT
    *nat
    :POSTROUTING ACCEPT [0:0]
    -A POSTROUTING -s 192.168.168.0/24 -o ppp0 -j MASQUERADE
    COMMIT




hostapdでラズパイを無線APに



  1. wlan0(無線LAN I/F)をDHCPから固定IPアドレスに変更

    wlan0をDHCPクライアントの対象から除外

    sudo vi /etc/dhcpcd.conf
    


    /etc/dhcpd.conf

    #(最終行に追加)
    
    denyinterfaces wlan0

    wlan0にIPアドレスを指定(このIPアドレスが無線LAN機器のdefault gwになります)

    sudo vi /etc/network/interfaces
    


    /etc/network/interfaces

    #iface wlan0 inet manual
    
    # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    iface wlan0 inet static
    address 192.168.168.1
    netmask 255.255.255.0
    network 192.168.168.0
    broadcast 192.168.168.255

    DHCPクライアントの再起動、wlan0のdown/up

    sudo service dhcpcd restart
    
    sudo ifdown wlan0; sudo ifup wlan0

    wlan0の確認


    ifconfig

    $ ifconfig wlan0
    
    wlan0 Link encap:Ethernet HWaddr b8:27:eb:xx:xx:xx
    inet addr:192.168.168.1 Bcast:192.168.168.255 Mask:255.255.255.0
    UP BROADCAST MULTICAST MTU:1500 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)




  2. hostapdのインストール、設定

    インストール

    sudo apt-get install hostapd
    

    設定ファイルを新規作成

    sudo vi /etc/hostapd/hostapd.conf
    


    /etc/hostapd/hostapd.conf

    # This is the name of the WiFi interface we configured above
    
    interface=wlan0

    # Use the nl80211 driver with the brcmfmac driver
    driver=nl80211

    # This is the name of the network ※SSID名
    ssid=RPi

    # Use the 2.4GHz band
    hw_mode=g

    # Use channel 6 ※チャンネル
    channel=6

    # Enable 802.11n
    ieee80211n=1

    # Enable WMM
    wmm_enabled=1

    # Enable 40MHz channels with 20ns guard interval
    ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

    # Accept all MAC addresses
    macaddr_acl=0

    # Use WPA authentication
    auth_algs=1

    # Require clients to know the network name
    ignore_broadcast_ssid=0

    # Use WPA2
    wpa=2

    # Use a pre-shared key
    wpa_key_mgmt=WPA-PSK

    # The network passphrase ※WPAパスワード
    wpa_passphrase=***

    # Use AES, instead of TKIP
    rsn_pairwise=CCMP


    ブート時の設定ファイルを指定

    sudo vi /etc/default/hostapd
    


    /etc/default/hostapd

    #DAEMON_CONF=""
    
    DAEMON_CONF="/etc/hostapd/hostapd.conf"




  3. hostapdの動作確認

    hostapdをフロントでテスト起動

    sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
    

    無線LAN機器からSSIDが見えること、および無線LAN機器にIPアドレス等を以下の通り手動設定して接続


    IPアドレス:192.168.168.2

    ネットマスク:255.255.255.0

    ゲートウェイ:192.168.168.1


    無線LAN機器上で疎通を確認


    無線LAN機器で実行

    ping 192.168.168.1
    
    ping 8.8.8.8




dnsmasqでラズパイをDHCP/DNSサーバに



  1. /etc/hostsにwlan0のIPアドレスとホスト名を追加(dnsmasqのwarning対策)

    sudo vi /etc/hosts
    


    /etc/hosts

    192.168.168.1   rpi3
    




  2. dnsmasqのインストール、設定

    インストール

    sudo apt-get install dnsmasq
    

    デフォルト設定ファイルをリネーム、設定ファイルを新規作成

    sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig  
    
    sudo vi /etc/dnsmasq.conf


    /etc/dnsmasq.conf

    interface=wlan0      # Use interface wlan0
    
    listen-address=192.168.168.1 # Explicitly specify the address to listen on
    bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
    domain-needed # Don't forward short names
    bogus-priv # Never forward addresses in the non-routed address spaces.
    dhcp-range=192.168.168.11, 192.168.168.20, 24h # Assign IP addresses between 192.168.168.11 and 192.168.168.20 with a 24 hour lease time

    server=8.8.8.8 # Forward DNS requests to Google DNSは指定しません。




  3. dnsmasqの動作確認

    無線LAN機器を手動設定からDHCPに戻して再接続し、以下のようにIPアドレス等が割り当てられていることを確認


    IPアドレス:192.168.168.11 ~ 192.168.168.20のいずれか

    ネットマスク:255.255.255.0

    ゲートウェイ:192.168.168.1

    DNSサーバ:192.168.168.1


    Wi-Fiルータとして使えることを確認


    無線LAN機器で実行

    ping 192.168.168.1
    
    ping 8.8.8.8
    ping www.google.co.jp




  4. 【参考】DHCPでしか動作しない機器1に対し、常に同一のIPアドレスを割り当てる設定

    対象機器のMACアドレスを調べる(例:arpコマンド)

    arp -na
    

    dnsmasq.confに、MACアドレスとIPアドレスを指定する(IPアドレスはdhcp-rangeの範囲外でOK)


    /etc/dnsmasq.conf

    dhcp-host=XX:XX:XX:XX:XX:XX, GoogleHome, 192.168.168.2, infinite
    




実際に接続してみて

無線LAN機器がつながってしまえば、ラズパイを意識することはありません。当然ですが、それだけの用途であればHT100LNなどを利用する方が楽です。やはり、無線APがラズパイである、(DDNSやsshトンネルをうまく使ったり、固定IPアドレスSIMと組み合わせるなどして)Internet側からラズパイ自身や配下の無線LAN機器が制御できる、といった利点を活かすことができるかが鍵になると思います。





  1. Google Homeとか。