Raspberry Piでモバイルルーターを作成する-wvdial,hostpad, dnsmasq
Raspberry Piでモバイルルーターを作成する-wvdial,hostpad, dnsmasq

Raspberry Piでモバイルルーターを作成する-wvdial,hostpad, dnsmasq

手元にあるRaspberry Pi 2とMVNOであるIIJmioのSIMカードを利用したモバイルルーターの作成を検討している。

 

手元にある以下のパーツを使用して、モバイルルーターの作成を行う。

 

  • Raspberry Pi 2(memory 1GB)
  • WI-U2-433DM親機モードが無いため
  • WLI-UC-GNM2
  • docomo L-02C

 

価格に関しては、RPが約5,000円とL-02Cがメルカリで1,000円、WLI-UC-GMN2がメルカリで600円でした。

 

microSDカードやUSBは手持ちですので、価格は7,000以下となります。

 

「raspberry pi ZERO」シリーズを使用すれば、3,000円ほどで作れるかもしれません。

 

Rasbianのインストール

debian系列のRasbianをSDカードに書き込む

 

ダウンロードサイトはこちら

 

 

テンプレートなので、以下記録のみ

 

diskutil list
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *8.0 GB     disk2
   1:                        EFI EFI                     209.7 MB   disk2s1
   2:       Microsoft Basic Data BOOT                    7.8 GB     disk2s2


sudo diskutil eraseDisk FAT32 BOOT /dev/disk2

diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

sudo gdd bs=1M if=2020-02-13-raspbian-buster.img of=/dev/rdisk2 conv=sync status=progress
3778019328 bytes (3.8 GB, 3.5 GiB) copied, 246 s, 15.4 MB/s
3612+0 records in
3612+0 records out
3787456512 bytes (3.8 GB, 3.5 GiB) copied, 246.827 s, 15.3 MB/s

 

WI-U2-433DM用ドライバーをインストール

rasbianでは、「WI-U2-433DM」を使用することができないのでドライバーをインストールする必要がある。

 

現在のカーネル情報

 

 uname -a
Linux raspberrypi 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l GNU/Linux

 

ドライバーのダウンロード

 

sudo apt-get install linux-image-rpi-rpfv linux-headers-rpi-rpfv raspberrypi-kernel-headers dkms build-essential bc
cd /usr/src
sudo git clone https://github.com/abperiasamy/rtl8812AU_8821AU_linux.git

 

cloneしたフォルダにあるMakefileを以下の箇所をyとnを入れ替える。

 

  • CONFIG_PLATFORM_I386_PC = n
  • CONFIG_PLATFORM_ARM_RPI = y

 

makeしてインストールを行う。

 

sudo make
sudo make install
sudo modprobe -a rtl8812au

 

WI-U2-433DMをRaspberry Piへ差し込み、「ifconfig」と入力すると「wlan0」が存在してることがわかる。

 

 

LTE接続を行う

外部通信を行うために「wvdial」をインストールする。

 

sudo apt-get install wvdial

 

今回使用する「L-02C」ですが、稀にストレージディバイスとして認識されてしまうようです。

この場合、固定ディバイス化する必要がありますが、今回はその必要がありませんでした。

 

「ls -l /dev」でttyUSB*が表示されることを前もって確認しましょう。

 

通信するに当たり、「/etc/wvdial.conf」をiijmioとして書き込みを行います。

 

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 
Init3 = AT+CGDCONT=1,"IP","iijmio.jp"
Dial Attempts = 3
Stupid Mode = 1
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
APN = iijmio.jp
Modem = /dev/ttyUSB2
ISDN = 0
Phone = *99#
Password = iij
Username = mio@iij
Carrier Check = no

「sudo wvdial」で通信を行い、CONNECTの文字が表示されることを確認しましょう。

また、ifconfigを行うと「ppp0」が表示されるはずです。

 

終了する場合は、「Ctrl-C」です。

 

自動起動のために「/etc/systemd/system/wvdial.service」を作成します。

 

[Unit]
Description=wvdial service
Wants=network.target

[Service]
ExecStart=/usr/bin/wvdial
ExecStop=/bin/kill -HUP $MAINPID
Type=simple
Restart = always

[Install]
WantedBy=multi-user.target

 

以下のコマンドでスタートとステータスを確認しつつ、自動起動とする

 

sudo systemctl start wvdial.service
sudo systemctl status wvdial.service
sudo systemctl enable wvdial.service

 

以上で、LTE接続まで完了

 

Wi-Fiスポットを作成

まだapt installをすることがあるので、パケット通信に上限がある方は有線接続を継続することをおすすめします。

 

wi-fiのアクセスポイントサービスをインストールするためにhostapdをインストールします。

起動設定まで確保してしまいます。

 

sudo apt install hostapd
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo apt install dnsmasq

 

ここでインストールした2つのサービスには以下の役割があります。

 

  • hostapd:Wi-Fiアクセスポイントとしてサービスを提供
  • dnsmasq:IPアドレスの振り分けなどネットワーク関連のサービスを提供

 

最後に「netfilter-persistent」とそのプラグインである「iptables-presistent」をインストールします。

 

sudo DEBIAN_FRONTEND=noninteractive apt install -y netfilter-persistent iptables-persistent

 

 

ネットワークを設定

ワイヤレスネットワーク用のDHCPサーバーを構築します。

そのため、無線側であるwlan0へ静的IP構成が必要となります。

 

古いRasbianであれば「/etc/network/interfaces」へDHCPの設定を行いますが、新しい 場合は「/etc/dhcpcd.conf」が推奨されております。

 

/etc/dhcpcd.confを以下のように変更し、静的IPを設定します。

 

 interface wlan0
    static ip_address=192.168.4.1/24
    nohook wpa_supplicant

 

ルーティングとIPマスカレードを設定

ルーティングにより、Rasbianのネットワークから別のネットワークへトラフィックを流れるようにするための設定はこちらです。

/etc/sysctl.d/routed-ap.conf

# https://www.raspberrypi.org/documentation/configuration/wireless/access-point-routed.md
# Enable IPv4 routing
net.ipv4.ip_forward=1

 

このルーティング設定によって、ネットワーク「192.168.4.0/24」からメインルーターにインターネット接続ができるようになります。

 

次に以下のプロセスをファイヤーウォールルールへ設定します。

 

  • メインルーターは、無線クライアントからのすべての発信トラフィックをRaspberry Piからのトラフィックとして認識し、インターネットとの通信を可能にします。
  • Raspberry Piはすべての着信トラフィックを受信し、IPアドレスを置き換え、トラフィックを元のワイヤレスクライアントに転送します。

 

これを実現するための設定方法はこちらです。

 

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

 

単純なwi-fiルーターを構築したい場合は、「ppp0」を「eth0」へ変更するだけです。

 

次にIPv4のファイアウォールルールとIPv6を保存して、起動時に「netfilter-persistent」サービスによってロードされるようにします。

 

sudo netfilter-persistent save

 

これで、ファイアウォールルールが自動化され舞うが、変更をこない場合は、将来的に注意が必要となります。

 

ワイヤレスネットワークのDHCPおよびDNSサービスを構成

DHCPおよびDNSサービスは、「dnsmasq」によって実現できます。

 

デフォルトのテンプレートをバックアップして、ファイルの修正を行います。

 

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

 

ファイルの中身は以下のようにします。

 

interface=wlan0 # Listening interface
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h
                # Pool of IP addresses served via DHCP
domain=wlan     # Local wireless DNS domain
address=/gw.wlan/192.168.4.1
                # Alias for this router

これにより、DHCPで192.168.4.2~192.168.4.20までのIPアドレスを提供できます。

 

ワイヤレスアクセスポイントを設定

接続したwi-fiドングルが、ハードウェアとソフトウェアでロックがかかっていないか見る必要があります。

 

sudo rfkill unblock wlan

 

hostapdでアクセスポイントを設定する方法は、「/etc/hostapd/hostapd.conf」で行います。

 

country_code=JP
interface=wlan0
ssid=ras-wifi
hw_mode=g
channel=7
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=raspberry
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

 

以外にも最も重要な設定値は、「country_code」だったりします。

 

本設定では、SSIDが「ras-wifi」として表示され、パスワードは「raspberry」となります。

「hw-mode=g」とは、「IEEE 802.11g」を指します。

これは、使用しているwi-fiドングルにも依存する保で注意が必要です。

 

  • a = IEEE 802.11a(5 GHz)
  • b = IEEE 802.11b(2.4 GHz)
  • g = IEEE 802.11g(2.4 GHz)
  • ad = IEEE 802.11ad(60 GHz)

 

ここまで完了したら、rasbianの再起動を行いましょう。

 

sudo systemctl reboot

 

手持ちのスマートフォンなどでSSIDが表示され、ネットワーク接続が可能であることを確認しましょう。

 

さいごに

最初は、「WI-U2-433DM」というwi-fiドングルを使用していたのですが、SSIDが表示されるが「パスワードが違います」と表示されてしまいました。

syslogを見ても、DHCPサーバーでエラーが起きているようにも見えず、3日ほど悩みました。

理由は単純で、「WI-U2-433DM」はそもそもホットスポットという親機モードに対応していないことが原因でした。

他の技術ブログでは、「WI-U2-433DM」で設定したがDHCPの設定がうまく行かないという理由はこのためです。

 

親機モードが使える「WLI-UC-GNM2」を差してみたところ、正常にwi-fiへ接続され、ネットワークへのアクセスも確認できました。

(ドライバーが一緒なので、そのまま使えます。)

 

しかし、acモードで接続できないため、当初の想定よりも通信速度が遅くなってしまいました。

wi-fi接続による通信速度ですが、上がりも下りも10Mbpsを超えるくらいでした。

 

なお「WLI-UC-GNM2」の最新版である「WLI-UC-GNM2S」ですと、使用できない口コミがありましたので、あえて「WLI-UC-GNM2」使用しておりました。

[Setting up a Raspberry Pi as a routed wireless access point]

  • .