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