ブログ

Armadillo-IoT(G3):ルーターのように動かす(isc-dhcp-server+dnsmasqで実現)

at_kazutaka.bito
2020年6月1日 9時34分

Armadillo-IoT(G3)をルーターのように動かす方法です。
ここでは、isc-dhcp-server(DHCPサーバー)とdnsmasq(DNSキャッシュ)の組み合わせて実現します。

参考)dnsmasqのみでもDHCPサーバーとDNSキャッシュは実現できます。
Armadillo-IoT(G3):ルーターのように動かす(dnsmasqで実現)

ネットワーク構成

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

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

補足)
下記手順では、ネットワーク端末の有線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 isc-dhcp-server dnsmasq


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

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の設定

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(G3)の有線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. isc-dhcp-server(DHCPサーバー)の設定

4.1. /etc/dhcp/dhcpd.confの変更

/etc/dhcp/dhcpd.confの変更点(1)

option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

上記の2行を下記のように変更します。
(行頭に#をつける)

#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;


/etc/dhcp/dhcpd.confの変更点(2)

#authoritative;

上記の行を下記のように変更します。
(行頭の#を外す)

authoritative;


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

subnet 192.168.100.0 netmask 255.255.255.0 {
     option routers 192.168.100.1;
     option subnet-mask 255.255.255.0;
     option domain-name-servers 192.168.100.1;
     range dynamic-bootp 192.168.100.100 192.168.100.254;
}


4.2. /etc/default/isc-dhcp-serverの変更

/etc/default/isc-dhcp-serverの変更点

INTERFACESv4=""
INTERFACESv6=""

上記の2行を下記のように変更します。

INTERFACESv4="eth0"
#INTERFACESv6=""


5. dnsmasq(DNSキャッシュ)の設定

5.1. /etc/dnsmasq.confの変更

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

listen-address=127.0.0.1, 192.168.100.1


6. 次回起動以降にDHCPサーバーを有効にする

下記のコマンドを実行します。

root@armadillo:~# systemctl enable isc-dhcp-server.service


7. 再起動

再起動します。

root@armadillo:~# reboot

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

8. iptableを設定

下記コマンドでiptableを設定します。
(下記例では、SSH(22番ポート)、SSL(443番ポート)、DNS(53番ポート)を許可しています。用途に応じて設定します。)

root@armadillo:~# iptables -t filter -F
root@armadillo:~# iptables -A INPUT -i ppp0 -j DROP
root@armadillo:~# iptables -A INPUT -i lo -j ACCEPT
root@armadillo:~# iptables -A OUTPUT -o lo -j ACCEPT
root@armadillo:~# iptables -I INPUT -i ppp0 -p icmp -j ACCEPT
root@armadillo:~# iptables -I INPUT -i ppp0 -p tcp --dport 22  -j ACCEPT
root@armadillo:~# iptables -I INPUT -i ppp0 -p tcp --dport 443 -j ACCEPT
root@armadillo:~# iptables -I INPUT -i ppp0 -p udp --sport 53 -j ACCEPT
root@armadillo:~# iptables -I INPUT -i ppp0 -p tcp --dport 53 -j ACCEPT


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

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

root@armadillo:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@armadillo:~# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


10. 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)--インターネット

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