ブログ

Armadillo-IoT(G3):無線LANルーターのように動かす(dnsmasqで実現:buster版)

at_kazutaka.bito
2021年6月28日 10時25分

Armadillo-IoT(G3)を無線LANルーターのように動かす方法です。
ここでは、dnsmasqのDHCPサーバーとDNSキャッシュの機能を使って実現します。

補足)
Armadillo-IoT(G3)は、複数のディストリビューションに対応しています。
本ブログでは、Debian GNU/Linux 10 (buster) の方法になります。

Debian GNU/Linux 9 (stretch)の方法については、下記を参考ください。
Armadillo-IoT(G3):無線LANルーターのように動かす(dnsmasqで実現)

ネットワーク構成

本手順は、下記構成でネットワーク端末からインターネットにアクセスすることを想定した例です。

ネットワーク端末--(無線LAN)--Armadillo-IoT(G3)--(3G/LTE)--インターネット

補足1)
 Armadillo-IoT(G3)の無線LANはアクセスポイントモードで動作します。
 ネットワーク端末からは、下記SSIDとパスフレーズで接続します。
  SSID:testssid
  パスフレーズ:testpassphrase

補足2)
下記手順では、ネットワーク端末の無線LANのIPアドレスは、DHCPサーバーから自動取得する設定であることを想定しています。
Armadillo-IoT(G3)のDHCPサーバーからネットワーク端末のIPアドレス(※)を自動的に与えるようになっています。
 ※)192.168.100.100~192.168.100.254

1. 必要なパッケージのインストール

Armadillo-IoT(G3)をインターネット接続可能なネットワークに接続して、
下記コマンドで必要なパッケージをインストールしておきます。

root@armadillo:~# apt-get update
root@armadillo:~# apt-get install dnsmasq hostapd

上記の手順で、インターネット接続可能なネットワークに有線LANを使った場合は、
パッケージのインストール後、有線LANケーブルの接続を外します。
(下記の手順にて、インターネット接続可能なネットワークが3G/LTEと有線LANの2系統になる場合は考慮してないため。)

2. 3G/LTEの設定

下記コマンドで3G/LTEの設定をします。(※)

root@armadillo:~# nmcli connection add type gsm ifname [ネットワークデバイス名] apn [APN] user [ユーザー名] password [パスワード]

※)下記の箇所を読み替えて実行してください。
 [ネットワークデバイス名] → Armadillo-IoT(G3 M1モデル)の場合は、ttyUSB2
 [APN] → 使用しているSIMのAPN
 [ユーザー名] → 使用しているSIMのユーザー名
 [パスワード] → 使用しているSIMのパスワード

3. 無線LANの設定

3.1. NetworkManagerの管理対象から無線LANを外す

/etc/NetworkManager/NetworkManager.confのファイル末尾に下記の記述を追加します。

[keyfile]
unmanaged-devices=interface-name:wlan0

NetworkManagerをリスタートします。

root@armadillo:~# service NetworkManager restart
3.2. hostapd(アクセスポイントモード)の設定

/etc/hostapd/hostapd.confを下記の内容で作成します。

interface=wlan0
driver=nl80211
ssid=testssid
hw_mode=g
channel=10
ieee80211n=1
wpa=2
wpa_passphrase=testpassphrase
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

/etc/default/hostapdの末尾に下記の記述を追加します。

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

カーネルの起動時にhostapdの設定を有効にするようにします。

root@armadillo:~# systemctl unmask hostapd.service
root@armadillo:~# update-rc.d hostapd enable

4. dnsmasq(DHCPサーバー、DNSキャッシュ)の設定

4.1. /etc/dnsmasq.confの変更

/etc/dnsmasq.confの変更点
ファイル末尾に下記の記述を追加します。

listen-address=127.0.0.1, 192.168.100.1
interface=wlan0
dhcp-range=192.168.100.100, 192.168.100.254, 12h

5. 再起動

再起動します。

root@armadillo:~# reboot

上記までの手順は、再起動以降は不要になります。

6. 無線LANをアクセスポイントモードで起動

下記コマンドで、無線LANを再起動します。
補足)下記では、Armadillo-IoT(G3)の無線LANのIPアドレスを192.168.100.1に設定しています。

root@armadillo:~# ip link set wlan0 down
root@armadillo:~# ip addr flush dev wlan0
root@armadillo:~# ip link set wlan0 up
root@armadillo:~# ip addr add 192.168.100.1/24 dev wlan0

アクセスポイントモードを再起動します。

root@armadillo:~# service hostapd restart

7.nftablesを設定

下記コマンドでnftablesを起動します。

root@armadillo:~# systemctl start nftables.service

下記のようなnftables設定コマンドを実行するファイル(set_nftables)を作成します。
(下記例では、SSH(22番ポート)、SSL(443番ポート)、DNS(53番ポート)を許可しています。用途に応じて設定します。)
set_nftablesファイルの内容

nft add table ip filter
nft flush table ip filter
nft add chain ip filter input { type filter hook input priority 0 \; }
nft add chain ip filter output { type filter hook output priority 0 \; }

nft add rule ip filter input tcp dport 80 drop
nft add rule ip filter input iifname "lo" counter accept
nft add rule ip filter output oifname "lo" counter accept
nft insert rule ip filter input iifname "ppp0" ip protocol icmp counter accept
nft insert rule ip filter input iifname "ppp0" tcp dport 22 counter accept
nft insert rule ip filter input iifname "ppp0" tcp dport 443 counter accept
nft insert rule ip filter input iifname "ppp0" udp sport 53 counter accept
nft insert rule ip filter input iifname "ppp0" tcp dport 53 counter accept

nft add table ip nat
nft add chain ip nat postrouting { type nat hook postrouting priority 0 \; }
nft add rule ip nat postrouting oifname "ppp0" counter masquerade

上記のset_nftablesに実行権限をつけて、実行します。

root@armadillo:~# chmod +x set_nftables
root@armadillo:~# ./set_nftables

以上により、nftablesが設定されます。

8.ポートフォワードに設定

下記コマンドでポートフォワードに設定します。

root@armadillo:~# echo 1 > /proc/sys/net/ipv4/ip_forward

9. nameserverの追加

下記コマンドでnameserverを追加します。

root@armadillo:~# echo "nameserver 127.0.0.1" > /etc/resolv.conf.head

dnsmasqを再起動します。

root@armadillo:~# systemctl restart dnsmasq.service

以上の設定後、下記のような構成で、ネットワーク端末からインターネットに接続できます。

ネットワーク端末--(無線LAN)--Armadillo-IoT(G3)--(3G/LTE)--インターネット

補足1)
 Armadillo-IoT(G3)の無線LANはアクセスポイントモードで動作します。
 ネットワーク端末からは、下記SSIDとパスフレーズで接続します。
  SSID:testssid
  パスフレーズ:testpassphrase

補足2)
上記手順では、ネットワーク端末の無線LANのIPアドレスは、DHCPサーバーから自動取得する設定であることを想定しています。
Armadillo-IoT(G3)のDHCPサーバーからネットワーク端末のIPアドレス(※)を自動的に与えるようになっています。
 ※)192.168.100.100~192.168.100.254