Contents

フロアマネージャを使ったネットワークの構築

1.フロアマネージャ(エッジサーバ)とPDHの接続

フロアマネージャ(エッジサーバ)とPDHの接続の方法は、大きく2つの方法が考えられます。
1つ目は、インターネット(WAN)に接続されたLANの中に、フロアマネージャと同列でPDHを配置する方法です。
もう一つは、フロアマネージャはインタネット(WAN)に接続されたLANの中に他のPCと配置します。そして、PDHはフロアマネージャをルータとしたLANの中に配置する方法です。
基本的に、LANの構成方法は、WiFiでも有線でも問題ありません。WiFiの方が、PDHを離れた場所に配置できるというメリットはありますが、安定性では有線に劣るとも考えられます。

ここでは、図2のフロアマネージャをルータとするLAN内にPDHを配置する構成を実現するために必要なフロアマネージャのルーター化に関して説明します。

以下の3つの内容を順次説明します。
1)PDHからフロアマネージャを経由して、インターネットに接続できるようにするNAT(Network Address Translation)の実現方法
2)LAN内のPDHのIPアドレスを自動で割り振るDHCP(Dynamic Host Configuration Protocol)の実現方法
3)NAPT(Network Address Port Translation)の実現方法(予定):TCP/UDPポート番号を用いてLAN内のプライベートアドレスに外部からアクセスする方法

2. NAT(Network Address Translation)の実現方法

図3のようなフロアマネージャとPDHのネットワーク構成で説明します。フロアマネージャは、インターネットに接続できるWiFiルータ(192.168.11.1)のWiFiのLANに置かれています。このWiFiルータは、DHCP機能とDNS機能を有しています。割り当てアドレス範囲は、192.168.11.0/24です。フロアマネージャのIPアドレスは、192.168.11.61です。以下の説明では、このネットワークをWANと呼びます。
一方,フロアマネージャは、有線のイーサネットの口をもち、ハブを経由して複数のPDHに接続されています。こちらのアドレス範囲は、192.168.0.0/24です。フロアマネージャのアドレスは192.168.0.1です。そして、説明に使用するPDHのIPアドレスは、192.168.0.5とします。こちらのネットワークを以下の説明ではLANと呼びます。

ここでの目的は、LAN内のPDH(192.168.0.5)から,インタネットにアクセスしてOSのバージョンアップができるようにすることです。そのために、フロアマネージャにNAT(Network Address Translation)の機能を持たせます。すると、フロアマネージャは、 LAN内のPDHからのアクセスに対しWAN側の自分のアドレスに変換してWANにアクセス要求します。そして、WANからの受け取った応答は、同じくLANのアドレスに変換してLANに返します。

参考HP:UFW : IP マスカレードの設定

2-1. フロアマネジャ側の設定(1):デバイス名の確認

ip コマンドを使って、ネットワークのデバイス名を確認します。以下のコマンドを打って、WAN側のデバイス名を確認します。後ほど使います。

ip -4 address

フロアマネージャのWAN側のアドレス”192.168.11.61”が出ているのが、WiFiのデバイスで、デバイス名が “wlo2” です。

2-2. フロアマネジャ側の設定(2):ufwの動作確認

ufw(Uncomplicated FireWall)が動作しているか確認します。NATは、ufwから行います。ufwは、iptablesのフロントエンドのツールです。
iptablesのコマンドを使わずに、容易に設定できます。
$ sudo ufw status verbose
非アクティブの場合は、
$ sudo ufw enable
で起動させてください(詳細は、ファイアウォールの設定:ufw(Uncomplicated Firewall)

2-3. フロアマネジャ側の設定(3):転送(forward)許可設定

次に、LAN側とWAN側の転送を許可する設定をします。以下の2つのファイルを修正します。

まず、ufwのファイルからです。エディタでufwのファイルを開けます。DEFAULT_FORQARD_POLICY=“DROP”を“ACCEPT”に変更して、保存し、エディタを終了します。

次に、sysctl.conf ファイルです。sysctl.confファイルを開けて、net.ipv4.ip_forward=0 を “1”に修正します。
修正後、保存し、エディタを終了します。

修正完了後、sysctl.confを読み込ませます。

sudo sysctl –p

ufwの設定を読み込みます。

sudo ufw reload

sysctl.confファイルの設定がうまく行っているかの確認として、以下のコマンドを使うと、すべての設定を表示できます。その中から、net.ipv4.ip_forward=1になっているかをチェックすることもできます。

sudo sysctl -a

2-4. フロアマネジャ側の設定(4):ufwのルールファイル変更

NATの設定を行います。ufwのルールファイル “before.rules”を修正します。
”before.rules”のファイルをエディタで開けて以下をファイルの最終行に追加します。

# NAT
*nat
-F
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o wlo2 -j MASQUERADE

COMMIT

この-j MASQUERADE が、アドレスの変換を指示しています。IP masqueradeとも呼ばれています。
ここでは、192.168.0.0/24のアドレスをwlo2から変換して出力せよという指示になります。
従って、アドレスとデバイス名は、各自の環境に合わせて変更してください。

追加したら、保存して、エディタを終了します。

以下のコマンドで、ルールファイルをufwに読み込ませます。

sudo ufw reload

読込みが完了したら、設定を確認します。

sudo iptables –t nat --list-rules

追加されていたらOKです。

エラーが出た場合は、ufwが非アクティブになってしまいます。

ファイルを修正後に

 sudo ufw enable

を実行してから、

sudo ufw reload

を実行してください。

以上で設定は終了です。次に動作確認を行います

2-5. PDH側の設定

1) IPアドレスの設定

PDH側で、ネットワークの設定を行います。PDH(Raspberry Pi)の右上のネットワークアイコンを右クリックして、“Wireless & Wired Network Settings”を選びます。IPアドレスの設定画面が出てきますので、eth0を選んで、IPv4のアドレスを入れます。”/24”を忘れずに入力して下さい。また、ルータが、フロアマネージャのLAN側のアドレス”192.168.0.1”になります。そして、DNSサーバが、WAN側のWiFiルータのアドレス”192.168.11.1”になります。設定したら「適用」を押し、「閉じる」を押して、リブートします。
(IPアドレスは各自の環境に合わせて読み替えてください)

2) ネット接続の確認

IPアドレスの設定がうまくいっているかどうか、以下のコマンド確認します。

ip -4 address 

  (addressは、省略の”a”だけでも可。 -4は、IPv4のアドレスだけ表示を指定)

次に、LANが接続されていることを、フロアマネージャのLAN側のIPアドレス(192.168.0.1)にpingで確認します。

ping –c 3 192.168.0.1

  (-c 3 は、3回実施したらやめるという回数指示です)

応答がありました。
ついでに、WAN側のルータのアドレスにpingしてみます。
接続できませんでした。
同様に、www.yahoo.co.jpにもpingしてみましたが、駄目でした。


最終的に、これらすべてがいけるようにします。

2-6. 動作確認

動作の確認を行います。PDHから確認します。

1)pingの確認

 a) フロアマネージャのLAN側アドレスにpingをします。もちろん返答があります。
 b) フロアマネージャのWAN側アドレスにpingします。今回は返答がありました。
 c) www.yahoo.co.jpにpingします。インターネット上からも返答がありました。

2) 時刻同期

PDHは、時計を持っていませんので、インターネット上に時刻同期に行く必要があります。ここでは、NTP=ntp.nict.jpに時刻同期に行っています。
インターネット上のタイムサーバntp.nict.jpと時刻同期が出来ています。

ntp.nict.jpは、独立行政法人情報通信研究機構(NICT)が提供しているNTPサーバです。

3) OSのアップデート
sudo apt update

で、アップデートファイルの確認が出来ました。

4) HPの閲覧

ブラウザでのHPの閲覧も出来ました。

3. LAN内のPDHのIPアドレスを自動で割り振るDHCPの実現(1): dnsmasq

前の章では、PDHのIPアドレスは、固定IP(192.168.0.5/24)としました。決まったPDHなどは、固定IPの方が便利なこともあります。また、新しいセンサを追加するために実験的に追加するようなPDHは、自動で割り振られたIPの方が便利です。
ここでは、フロアマネージャに小規模なネットワークにDNSとDHCPを提供するために設計されたdnsmasqを導入して、アドレスを自動で割り振るDHCPサーバとDNSサーバを立ち上げます。

DHCPとして割り当てられるプライベートIPv4アドレス範囲は、「RFC 6890  Special-Purpose IP Address Registries」で規定されており、以下のアドレスがプライベートIPv4アドレスとして用意されています。このプライベートアドレスは、誰でも、どこでも、使用許諾なしで使用できます。

クラス アドレスブロック 範囲 IPアドレス数
A 10.0.0.0/8 10.0.0.0 ~ 10.255.255.255 2^24(約1,700万)
B 172.16.0.0/12 172.16.0.0 ~ 172.31.255.255 2^20(約100万)
C 192.168.0.0/16 192.168.0.0 ~ 192.168.255.255 2^16(65,536)

参考HP:   Dnsmasq : インストール
                  Dnsmasqで簡易DNS+dhcpサーバを構築する

3-1. フロアマネジャ側の設定(1):dnsmasqのインストール

1)dnsmasqのバージョン確認

フロアーマネージャの端末で、以下のコマンドを入力し、バージョン確認します。

sudo apt show dnsmasq

Ver2.86-1であることが分かります。
また、Descriptionに簡単なdnsmasqの簡単な説明があります。

2) dnsmasqのインストール

次に、dnsmasqをインストールします。
ubuntuでは、dnsmasqと同じポート番号53を使用しているsystemd-resolvedが動作しているので、インストール後に、エラーで実行が出来ません。
後ほど、dnsmasqの設定ファイルを作成してから、system-resolvedを止めて、dnsmasqの実行を優先します。

sudo apt install dnsmasq

a) インストールを開始します。

b) インストール後の実行でポートがバッティングしているので失敗します。

3-2. フロアマネジャ側の設定(2):dnsmasqの設定ファイル編集

1) resolv.confファイルのコピー

system-resolved.serviceを止める前に、resolv.confファイルをコピーして名前を変えます。 system-resolved.serviceが disable の時に、リブートすると、resolv.confが作られません。しかし、中身をdnsmasqで利用するからです。

2) dnsmasq.confの編集

dnsmasq.confファイルの編集を行います。編集の前にファイル名を変更してバックアップを取ります。簡単にするために、新規に必要な事項のみのファイルを新規に作成します。

黄色の枠の部分は、各自の環境に合わせて修正してください。

DHCPの設定の interface= と no-dhcp-interface= の部分は、以下の様に

ip -4 address

で表示される内容を転記して下さい。

修正が終わったら保存します。その後エディタを終了します。

<dnsmasq.confの例>

※ 赤字の部分は、文字を上記の図に合わせて変更してください。

# DNSサーバーの設定
# ドメイン名の無いクエリは上位サーバーに問い合わせない
domain-needed
# プライベート IP の逆引き要求は上位サーバーに問い合わせない
bogus-priv
# ホスト名に自動的にドメイン名を付加する
expand-hosts
# ドメイン名を定義
domain=local
# 上位サーバのアドレスを書いたファイル名
resolv-file=/ect/resolv_dnsmasq.conf

# DHCP サーバーの設定
# DNS, dhcpを提供するNICを指定
interface=enx50c4ddf0c317
# dhcpを提供しないNICを指定
no-dhcp-interface=wlo2
# dhcpでのアドレス割り当て範囲
dhcp-range=192.168.0.50,192.168.0.200,255.255.255.0,12h
# デフォルトゲートウェイ他
dhcp-option=option:router,192.168.0.1
dhcp-option=option:dns-server,192.168.0.1
dhcp-option=option:netmask,255.255.255.0

3-3. フロアマネジャ側の設定(3):ufw(ファイアウォールの設定)

DNSのポート:53番とDHCPのポート:67番を開けます。

1) DNSのポート

53番は、LAN側のアドレス 192.168.0.0/24からのアクセスを許可します。

2) DHCP側のポート

DHCPの67番は、IPアドレス 0.0.0.0でアクセスされますので、anywhereからのアクセスを許可します。

IPv6は削除します。

3-4. フロアマネジャ側の設定(4):dnsmasqの再起動

systemd_resolved.serviceを止めて、dnsmasq.serviceを再起動します。

1) systemd-resolved.serviceを止めます。

sudo systemctl stop systemd-resolved.service

2) systemd-resolved.serviceのリブート時の起動を不許可にします。

sudo systemctl disable systemd-resolved.service

3) dnsmasq.serviceを再起動します。

sudo systemctl restart dnsmasq.service

以上で、フロアマネージャ側の設定は終了です。

3-5. PDH側の設定:IPアドレスの削除

PDH側では、IPアドレスの設定画面で、[Clear]ボタンを押し、IPアドレスを削除してください。
その後、「適用」を押し、「閉じる」を押せば、設定完了です。

3-6. 動作の確認

2つの項目で確認します。
1)DHCPによって割り当てられたIPアドレスの確認
2)pingによるDNS動作の確認

1) DHCPによって割り当てられたIPアドレスの確認
ip -4 address

で、DHCPによって割り当てられたIPアドレスを確認します。設定どおりの192.168.0.116/24が割り当てられています。

2) pingによるDNS動作の確認

ping –c 3 www.yahoo.co.jp

でDNSサーバでアドレスが変換され、応答が返ってきていることが分かります。

4. LAN内のPDHのIPアドレスを自動で割り振るDHCPの実現(2): isc-dhcp-server

前の章では、小規模なLAN向けのdnsとdhcpサーバ向けのdnsmasqというソフトを紹介しました。dnsmasqは、dnsとdhcpサーバを1つのソフトで立ち上げることができるので、便利なのですが、system-resolved.serviceとバッティングするために、system-resolved.serviceを止めないといけなということがマイナスポイントです。ここではもう一つのデファクトスタンダードであるisc-dhcp-serverというdhcpのソフトを紹介します。
このソフトは、Internet Software Consortium 製 DHCP サーバです。dnsmsqと同様に、クライアントマシンに IP アドレスを “リース” し、クライアントマシンのネットワークを自動設定できます。では、インストールと設定を行います。
ここでは、以下のようなネットワークを例として、dhcpサーバを立ち上げてみます。この例では、WiFiルータをAPモードで動かし、有線、無線のLANを構築しています。

4-1.isc-dhcp-serverのインストール

次のコマンドを使ってインストールします。

sudo apt install isc-dhcp-server -y

4-2.isc-dhcp-serverの設定と再起動

2つのファイルを編集します。

1) isc-dhcp-serverファイルの編集

① dhcp側のNICのデバイス名確認
IPアドレスのリースを行うネットワークのNICのデバイス名(インターフェース名)を調べます。

ip -4 addr

ここでは、”enxc436c0b37798”というデバイス名であることが分かります。それは、LAN側に固定IPアドレス 192.168.80.1/24を設定しているので分かります。

② isc-dhcp-serverファイルの修正

エディタでファイルを開きます。

2)dhcpd.confファイルの編集

① dhcpd.confファイルをエディタで開きます。

② dnsサーバ名称のIPアドレス or ホスト名を記述します。

option domain-name-servers 172.24.32.1, 172.26.100.1;

③ 正当性の記述の行頭のコメント記号”#”を除去します。

   authoritative;

 

④ リースするIPアドレスの記述をファイルの最後に追加します。

 


subnet 192.168.80.0 netmask 255.255.255.0 {
  # default gateway
  option routers 192.168.80.1;
  # domain-name-servers
  option domain-name-servers 172.24.32.1;
  # range of rental IP address
  range 192.168.80.64 192.168.80.128;
  # subnet-mask
  option subnet-mask 255.255.255.0;
}

⑤ ファイルの修正が完了したら、保存してエディタを閉じます。

⑥ isc-dhcp-server.serviceを再起動します。

sudo systemctl restart isc-dhcp-server.service

⑦ 動作しているか確認します。

systemctl status isc-dhcp-server
or
systemctl status isc-dhcp-server.service

 

4-3.ファイアウォールの設定

dhcpのリッスンに“udp”のポート67番を使用します。そのため、ufwで開けます。

sudo ufw allow port 67 proto udp

設定を確認します。

sudo ufw status verbose

ポート67番のUudpが開かれています。

NAT(Network Address Transfer)の再確認をします。

sudo iptables –t nat –list-rules

ここでは、192.168.80.0/24から、デバイス名enp1s0へNATが設定されています。

★ 便利コマンドの紹介

sudo lshw –class network –short

lshw: ハードウェアの情報を出力してくれます。

-class network:ネットワーク関連のハードの情報のみ表示

-short:短いフォーマットで表示

4-4.動作確認

1) Note PC接続(無線)

Windows Note PCのコマンドプロンプトで

ipconfig /all

を実行した結果を示します。
DHCPサーバ:192.168.80.1 で
IPアドレス:192.168.80.65
DNSサーバ:172.24.32.1
デフォルトゲートウェイ:192.168.80.1
がリースされています。

2) PDH接続(有線)

① 端末画面で、

 ip -4 addr

を実行した結果を示します。
IPアドレス:192.179.80.64/24
がリースされています。

② NATが有効になっているかを調べるために、

timedatectl timesync-status

を実行してみました。
Server:133.243.238.244(ntp.nict.jp)
と表示されており、無時にNATが動作していることも確認できました。
ntp.nict.jpが解決されているので、DNSサーバにも接続できています。

 

3) Note-PCからPDHへのsftp接続確認

Note PCから、pi@gw52f5 にsftpによる転送が出来ました。

5.NAPT(Network Address Port Translation)の実現方法

NAT(Network Address Translation)では、LAN側のPDHのIPアドレスをフロアマネージャのアドレスに置き換えてインターネットに出ていくことができるように設定しました。この方法では、WAN側からLAN内のプライベートIPアドレスを持ったPDHにアクセスすることができません。フロアマネージャのアドレスを使えば、LANに繋がっていることは分かりますが、LAN内の個別のPDHのIPアドレスを指定する方法が無いからです。
この問題を解決するために、考えられたのがNAPT(Network Address Port Translation)です。LAN内の個別のPDHのIPアドレスを識別するために、TCP/UDPのポート番号を使用しようというものです。例えば、図4で、Note PCからOSアップデートのために、 LAN内のPDH(gw52f5)へssh でアクセスしたいとします。その場合には、以下の様にポート番号を指定してssh コマンドを実行します。

$ ssh –p 3300 192.168.0.129

NAPTには、ポート3300を指定してフロアマネージャのWAN側のNIC(192.168.0.129)に来たパケットを、フロアマネージャのLAN側のNIC(192.168.10.1)から、IPアドレス 192.168.10.5へポート番号22(sshのポート番号)に転送しなさいと指示をしておきます。
これによって、ポート番号3300によって、LAN内のPDHを指定することができます。

参考HP ・・・ UFW : IP マスカレードの設定

5.1. フロアマネージャの設定(1): ufwのルールファイルの修正

NAPTの転送ルールをufwのルールファイルに記載します。そのために、“before.rules”ファイルに以下の記述を追加します。

-A PREROUTING -p tcp --dst 192.168.0.129 --dport 3300 -j DNAT --to-destination 192.168.10.5:22
-A POSTROUTING -p tcp --dst 192.168.10.5 --dport 3300 -j SNAT --to-source 192.168.10.1

この転送ルールは、「ポート3300を指定してフロアマネージャのWAN側のNIC(192.168.0.129)に来たパケットを、フロアマネージャのLAN側のNIC(192.168.10.1)から、IPアドレス 192.168.10.5へポート番号22(sshのポート番号)に転送しなさいと指示」です。

 

ルールの詳細は、下記HP(Ubuntu manuals)を参照ください。
 1) iptables/ip6tables — IPv4/IPv6 のパケットフィルタと NAT の管理ツール
 2) iptables-extensions — 標準の iptables に含まれる拡張モジュールのリスト

5.2. フロアマネージャの設定(2): ufwのルールファイルの読込み

修正した”before.rules”ファイルを読み込みます。

sudo ufw reload

結果を確認します。

sudo iptables –t nat –list-rules

ついでに、ufwが動作していることも確認しておきます。

sudo ufw status

アクティブになっています。
また、OpenssHでPort22が許可されています。

5.3. NAPT動作の確認

2つの確認を行います。フロアーマネジャと同じWAN上のNote PC(OS:Windows)から、ポート番号3300を指定しない場合と指定した場合です。

1)ポート番号3300を指定しない場合
ssh kawalab@192.168.0.129

Ubuntuマシンに入ります。これは、フロアマネージャです。

2) ポート番号3300を指定した場合
ssh –p 3300 pi@192.168.0.129

Debian GNU/Linuxマシンに入ります。これは、PDH gw52f5です。

以上で、NAPTの設定並びに、動作確認は完了です。
ポート番号を指定することで、プライベートIPアドレスにアクセスすることが出来ました。
PDHが複数台ある場合には、3300、3301、3302・・・などのようにすると、便利かもしれません。