ブログ

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

at_kazutaka.bito
2021年8月6日 11時42分

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

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

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

ネットワーク構成

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

ネットワーク端末--(有線LAN)--Armadillo-IoT(G3L)--(LTE)--インターネット

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

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

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

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


上記の手順で、インターネット接続可能なネットワークに有線LANを使った場合は、
パッケージのインストール後、有線LANケーブルの接続を外します。
(下記の手順にて、有線LANにはネットワーク端末を接続することを想定しているため。)

2. LTEの設定

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

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

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

3. 有線LANの設定

ethernet-eth0という名前で有線LANを設定します。
既にethernet-eth0で有線LANを使用中の場合は削除します。

root@armadillo:~# nmcli connection down ethernet-eth0
root@armadillo:~# nmcli connection delete ethernet-eth0

下記コマンドでethernet-eth0という名前で有線LANを設定します。
ここでは、Armadillo-IoT(G3L)の有線LANのIPアドレスは、192.168.100.1にします。

root@armadillo:~# nmcli connection add con-name ethernet-eth0 type ethernet ifname eth0
root@armadillo:~# nmcli connection modify ethernet-eth0 ipv4.method manual ipv4.addresses 192.168.100.1/24


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

4.1. /etc/dnsmasq.confの変更

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

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


5. 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 "usb1" ip protocol icmp counter accept
nft insert rule ip filter input iifname "usb1" tcp dport 22 counter accept
nft insert rule ip filter input iifname "usb1" tcp dport 443 counter accept
nft insert rule ip filter input iifname "usb1" udp sport 53 counter accept
nft insert rule ip filter input iifname "usb1" 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 "usb1" counter masquerade


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

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


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

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

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

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


7. nameserverの追加

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

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


dnsmasqを再起動します。

root@armadillo:~# systemctl restart dnsmasq.service



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

ネットワーク端末--(有線LAN)--Armadillo-IoT(G3L)--(LTE)--インターネット

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