Taifuh.com

阿部のFacebookからの転載ブログ

雑記

ラズパイ4でサーバ構築 その2

投稿日:2021年5月17日 更新日:

ラズパイ4でサーバ構築 その1の続きの後半戦だ。

ホームサーバといってもメディアサーバだけではない。防犯カメラのメインストレージも兼ねており、家の前で何らかの動きがあった際は、その時間帯の動画が自動的に保存される。もちろん、保存された動画は外出先からもチェック出来るようにしなければならない。

その仕組みとしてはApacheとMariaDBを連携させて、保存した動画をWebで見られるようにしているだけなのだが、家の中からと、外からのアクセスの違いで問題になる。

例えば、このブログのURLは https://blog2.taifuh.com/ だが、グローバルIPアドレスが割り振られているので、DNSを引くことにより 116.58.171.130 というアドレスでアクセスされる。家の外ではそれで良いのだが、家の中ではアクセスできない。なぜなら家の中はスマホなどの機器には 192.168.0.xx といったローカルなIPアドレスが振られ、116.58.171.130 といったグローバルなIPアドレスにアクセスする場合は、ルーターを通って外、つまりインターネットへアクセスしに行ってしまうからである。ところが、サーバの実体は、例えば 192.168.0.10 であり、内側にあるため taifuh.com のサーバにアクセス出来なくなってしまうのだ。

うまく繋ぐためには、家の中に居る際は taifuh.com のローカル・アドレスである 192.168.0.10 (このアドレスはあくまでも例である) であることをスマホに通知しなければならない。ということで、DHCPサーバとDNSサーバの構築が必要になる。

DHCPサーバとDNSサーバ

DHCPサーバは使い慣れているisc-dhcp-serverを使用する。
ドメインやDNSの設定を忘れずに行う。他には固定的にアドレスを割り当てたい端末の設定も行う。
以下は /etc/dhcp/dhcpd.conf の主要な変更点。何度も言うがIPアドレスやMACアドレスは例であって、実際の設定とは異なる。

/etc/hdcp/dhcpd.conf

# option definitions common to all supported networks...
option domain-name "taifuh.com";
option domain-name-servers 192.168.0.10;   

subnet 192.168.0.0 netmask 255.255.255.0 {
        option routers 192.168.0.1;
        
        option subnet-mask 255.255.255.0;
        range dynamic-bootp 192.168.0.201 192.168.0.251;  // 自動割り当ては50台分

        host ipcam {                                      // 防犯カメラを固定IPに
                hardware ethernet 58:AC:3E:FE:FF:81;
                fixed-address 192.168.0.105;
        }
} 

ここでのポイントは option domain-name-servers 192.168.0.10; であり、家の中のスマホがIPアドレスを問い合わせる際はDNSサーバである192.168.0.10へアクセスが行くようになる。

お次はそのDNSサーバで、これまたデファクトのBIND9を使う。
/etc/bind/taifuh.com.zone に家の中のローカルネット内のIPアドレスを列挙する。これにより taifuh.com へのアクセスは家の中ではルーターへ行かずに、内部の 192.168.0.10 (あくまでも例である) へ直接アクセスされることになる。

/etc/bind/named.conf.local

zone "taifuh.com" {
        type master;
        file "/etc/bind/taifuh.com.zone";
        allow-query { any; };
        allow-update { none; };
};

zone "0.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/0.168.192.db";
        allow-query { any; };
        allow-update { none; };
}; 

/etc/bind/taifuh.com.zone

$TTL 86400
@	IN SOA ns.taifuh.com. root.taifuh.com. (
	20030812	; Serial
	10800		; Refresh after 3 hours
	3600		; Retry after 1 hours
	604800		; Expire after 1 week
	86400		; Minimum TTL of 1 day
)
;
	IN 	NS ns.taifuh.com.
;
	IN 	MX 10 mail.taifuh.com.
;
ns	IN A 192.168.0.100
www	IN CNAME ns.taifuh.com.
blog	IN CNAME ns.taifuh.com.
blog2	IN CNAME ns.taifuh.com.
mail	IN CNAME ns.taifuh.com.
server	IN CNAME ns.taifuh.com. 

/etc/bind/named.conf.options

acl internal {
	192.168.0.0/24;
};
options {
	directory "/var/cache/bind";
	allow-query {
		localhost;
		internal;
	};
	forwarders {
		xxx.xxx.xxx.xxx;   // ISPの提供するDNSサーバのIPアドレス
	};
	dnssec-validation auto;
};

forwardersはこのDNSが解決できない場合に問い合わせる上位のDNSサーバを指定する。要は家の中の機器以外へのアクセスの際は全てforwardersの方へ問い合わせることになる。

/etc/resolv.conf

search taifuh.com
nameserver 127.0.0.1 

Echonet-Lite (Node.js)

我が家のサーバは太陽光発電パネルと蓄電池のモニタリングと制御にも使用している。具体的には、23時を過ぎたら深夜電力になるのでそこから蓄電を始めるのだが、明日の天気次第でフル充電させるのか、ほとんど充電させないかを決める。その辺は「続々・蓄電池運用最適化」に記載してある。

これらは Node.js で稼働しているため、まずはインストールから。
ところが、apt installでは随分と古いバージョンしかインストールされない。
従い、以下の手順で最新の安定版(V12)をインストールする。

$ sudo curl -fsSL https://deb.nodesource.com/setup_12.x | bash -
$ sudo apt-get install -y nodejs npm 

Echonet-Liteはnpmでインストールするため、npmもインストールしている。
次いで、Econet-Liteのライブラリと、デーモン化のためにforeverをインストールする。

$ sudo npm install echonet-lite
$ sudo npm install forever -g 

ところがこの後、しばらく悩み続けることになる。うまく蓄電池と通信できなかったからだ。理由が分かると簡単な事なのだが、それはこの続きで説明する予定だ。


-雑記
-, , , , , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

2021年12月
 12345
6789101112
13141516171819
20212223242526
2728293031