Help us understand the problem. What is going on with this article?

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

More than 3 years have 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とか。 

ipsim_net
固定IPアドレスMVNO【イプシム】の中の人。
https://ipsim.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away