2020-04-30

はじめての NomadBSD

BSD は、Berkeley Software Distribution の略語で、1977 年から 1995 年までカリフォルニア大学バークレー校 (University of California, Berkeley, UCB) の Computer Systems Research Group (CSRG) が開発・配布したソフトウェア群および UNIX オペレーティングシステム (OS) のことです [1]

NomadBSD のサイト [2] によると、NomadBSD is a persistent live system for USB flash drives, based on FreeBSD®. とあります。persistent とは、いつまでも続くこと、すなわち、持続的とか永続的と日本語で訳せます。つまり NomadBSD は、FreeBSD ベースの USB メモリなどで利用可能な永続的なライブシステムだと言えます。persistent(永続的)とは、おそらく設定情報や個人ファイルなどが、USB メモリ上に保存され、USB メモリだけで完結できることだと予想できます。さらに BSD のデスクトップ環境をライブで利用できることに興味を持ち、試して見ました。

nomadBSD のデスクトップ画面(例)

USB メモリへイメージ書き込み

NomadBSD のサイト [2] から Download のページへ移り、NomadBSD 1.3.1 (amd64) をダウンロードしました(ファイル名:nomadbsd-1.3.1.img.lzma)。解凍して balenaEtcher [3] を使って USB メモリにイメージを書き込みました。

イメージを書き込んだ USB メモリを PC の USB ポートに差し込んで起動していくつか設定すると、デスクトップ画面が表示されます。ちょっと使ってみたところ、設定内容や、保存したファイルは、再起動後に残っていることを確認できました。今回は仮想環境を使わなかったので設定途中のスクリーンショットが取れませんでしたが、下記情報を読むと仮想環境で動作させているので、詳しく調べてあらためて記事にしたいと思います。

NomadBSD 関連情報(日本)

NomadBSD 関連の情報で日本語サイトのものを集めました。

雑感

むかしむかし Windows 95 が発売されたころ、流行に乗ってご多分に漏れず自分も PC を買いました。GUI アプリケーションを作りたくて開発環境を整え始めたのですが、コストがあまりにもかかるので Linux も使い始めてみたところ、その魅力にハマってしまい現在に至っています。

当時の日本は Linux よりも FreeBSD ユーザの方が多かったと記憶しています。知人が NEC PC98 上で FreeBSD を利用しており、なんだか憧れを持っていました。なぜなら FreeBSD は BSD の流れを汲んだ正統な UNIX、一方 Linux は UNIX クローンとして普及してきた、いわゆる雑種だと思っていたからです。しかし便利な Linux から BSD へ乗り換えてみることは、ついにできませんでした。

仮想環境が利用できるようになった今、試そうと思えば BSD 系の OS だっていくらでも試せるのですが、インストーラの出来に差がありすぎることと、BSD でなければならないことが見つからず(それに、ブログの記事にもならないので)BSD 系 OS を使ってみようとは思わなくなってしまいました。

しかし NomadBSD はライブシステムで起動が簡単です。BSD とはなんたるかを知るにはとても良い機会です。しばらく情報集めにいそしみます。

参考サイト

  1. bitWalk's: BSD の子孫 [2016-04-20]
  2. NomadBSD
  3. balenaEtcher - Flash OS images to SD cards & USB drives

ブログランキング・にほんブログ村へ
にほんブログ村

2020-04-28

Webmin を使ってみた

Webmin は、Linux などの Unix 系 OS 向けのウェブブラウザベースのシステム管理ツールで、主に Perl で記述されています。 ユーザーやディスク使用上限、サービス、設定ファイル等といった OS 内部の設定および変更だけでなく、Apache や PHP、MySQL などといったオープンソースのアプリケーションの設定や制御もできます。

Webmin はオーストラリア人の Jamie Cameron 氏を中心に開発されており、BSD ライセンスで配布されています。

Wikipedia より引用・編集
Webmin のダッシュボード画面(例)

動機

自宅の LAN は、某ケーブルテレビのインテーネットサービスを利用しています。その家庭内 LAN の内側にさらに実験用の LAN を作って、この LAN 向けに DHCP サーバを設定しました [1]。某ケーブルテレビからレンタルしているブロードバンドルータで利用できる設定ツール(右図)のように、DHCP クライアントの情報をインターネットブラウザ上で見たいと思ったことが動機です。

Red Hat 系 Linux ディストロでは Cockpit [2] という高機能な Web ベースの管理ツールが利用できますが、残念ながら DHCP サーバについては期待する機能がありません。

経験的に、どのブロードバンドルータも似たような設定ツールを備えているので、きっとオープンソースの世界でも同じようなツールがあるだろうと期待して探してみましたが、意外とこれぞというツールがみつかりません。

そんな中で Glass [3] という ISC-DHCP 向けの管理ツールを見つけ、まさにぴったりだったのですが、Red Hat 系 Linux ディストロでインストールに成功したという記事を見つけられませんでした。とりあえず、あとでゆっくり取り組もうと試すのを保留にしました。

インストールの成功率が高そうなパッケージがないかさらに探し続けたところ、Webmin [4] が DHCP クライアントの一覧を表示できることが判りました。rpm パッケージも公開されていて簡単に試せそうです。ずいぶん前にインストールしてみた記憶が微かにありますが、あらためて試してみました。

Webmin のインストール

使用している OS(および webmin)は以下の通りです。

CentOS Linux release 8.1.1911 (Core) x86_64
webmin-1.941-1.noarch.rpm

Webmin のサイト [3] の左側のメニュー最初の rpm をクリックすると、最新の rpm パッケージをダウンロードできます。ダウンロードしたパッケージを次のようにしてインストールします。

bitwalk@cnction ダウンロード]$ sudo dnf install webmin-1.941-1.noarch.rpm
...
(途中省略)
...
依存関係が解決しました。
================================================================================
 パッケージ              Arch        バージョン         リポジトリー      サイズ
================================================================================
インストール:
 webmin                  noarch      1.941-1            @commandline       22 M
依存関係のインストール:
 perl-Encode-Detect      x86_64      1.01-28.el8        AppStream          90 k

トランザクションの概要
================================================================================
インストール  2 パッケージ

合計サイズ: 22 M
ダウンロードサイズの合計: 90 k
インストール済みのサイズ: 79 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
...
(途中省略)
...
完了しました!
[bitwalk@cnction ダウンロード]$ 

ローカルで動作確認

Webmin は、ポート 10000 を使いますので、インターネットブラウザを起動し、URL に https://local:10000 と入力します。

最初の https://local:10000 へのアクセス

「警告:潜在的なセキュリティリスクあり」の表示が出るので、詳細... ボタンをクリックして、さらに 危険を承知で続行 をクリックします(Firefox の場合)。

するとログイン画面が表示されます。

Webmin のログイン画面

root でログインします。Webmin のダッシュボードが表示されます。

Webmin のダッシュボード(英語)

表示言語を変更するには、左側メニューで WebadminChange Language and Theme を選択して、言語を選択します。ここではシステムの言語と同じ Japanese (JA_JP.UTF-8) を選択しました。

表示言語とテーマ設定画面

あらためてダッシュボードを表示すると、日本語で表示されていることを確認できます。

Webmin のダッシュボード(日本語)

左側メニューから、サーバ → DHCP サーバ を選択し、DHCPサーバの画面を表示させます。

DHCP サーバの画面

DHCP サーバを動かしているネットワークのサブネット 192.168.2.0 をクリックします。

DHCP のサブネットの編集画面

画面右下にある リースリスト をクリックすると、IP アドレスを割り当てている(リースしている)クライアントのリストが表示されます。

DHCP リース画面

一台しかクライアントがありませんが、期待していた機能を確認できました。

ネットワーク内の他の PC からアクセス

ポート番号 10000 がファイアウォールを通るように(ソーン internal に対して)設定して、ネットワーク越しにアクセスできるかどうか確認します。

[bitwalk@cnction ~]$ sudo firewall-cmd --permanent --zone=internal --add-port=10000/tcp
[sudo] bitwalk のパスワード:
success
[bitwalk@cnction ~]$ sudo firewall-cmd --reload
Warning: ZONE_ALREADY_SET: 'enp2s0' already bound to 'internal'
success
[bitwalk@cnction ~]$

このネットワークに接続している Windows PC から確認した例です。

Webmin のダッシュボード画面(例)

雑感

動機が、DHCP で IP アドレスをリースしているクライアント一覧を見ることだったので、Webmin の機能のほんの一部しか使っておらず、ややもったいない気がします。それでは、他の機能を含めて積極的にシステム管理ツールとして使うかといえば微妙です。このところ Cockpit を使うことに慣れてしまっています。システム管理に使うのであれば、特に SeLinux のアクセスコントロールエラーの監視や Web 上で端末エミュレータを使える Cockpit と同等な機能がなければ切り替えられません。

まあ、管理ツールが一つでなければならない、ということは無いので、DHCP サーバーに特化して Webmin を使いながら、最初に見つけた Glass のインストールに挑戦したり、あるいはいっそ自分で作ってみようかとも思っています。

ちなみに、和書で Webmin を扱っている書籍を調べてみると 2003 年まで遡る必要がありますが、今でも継続的にバージョンアップを重ねている開発中のソフトウェアです。

参考サイト

  1. bitWalk's: [CentOS 8] DHCP サーバの設定 [2020-04-27]
  2. Cockpit Project — Cockpit Project
  3. Akkadius/glass-isc-dhcp: Glass - ISC DHCP Server Interface
  4. Webmin

ブログランキング・にほんブログ村へ
にほんブログ村

2020-04-27

[CentOS 8] DHCP サーバの設定

DHCP, Dynamic Host Configuration Protocol は、UDP/IP ネットワークで使用されるネットワーク管理プロトコルで、コンピュータがネットワークに接続する際に必要な設定情報を自動的に割り当てるために使用します。 BOOTP にリース機能を追加して DHCP となっています。

DHCP サーバは、IP アドレス等のネットワーク構成設定をネットワーク上の各デバイスに動的に割り当て、他の IP ネットワークと通信できるようにします。DHCP サーバを使用すると、コンピュータは自動的に IP アドレスとネットワーク設定を要求でき、ネットワーク管理者やエンドユーザが全てのネットワークデバイスに手動で IP アドレスを割り当てる必要がなくなります。

Wikipedia より抜粋、編集

使用している OS(および dhcp-server)は以下の通りです。

CentOS Linux release 8.1.1911 (Core) x86_64
dhcp-server-4.3.6-34.el8.x86_64

ネットワークは下記のような構成になっていて、CentOS 8 をインストールしたミニ PC, cnction の NIC enp2s0 のゾーン internal 側のネットワークにつなげた PC が、IP アドレスなどの情報を取得できるように、cnction に DHCP サーバを設定します。参考書 [1] の「Chapter 10 DHCP サーバ」を参考にして設定しました。

dhcp-server のインストール

dhcp-server のインストールは下記のようにします。

[bitwalk@cnction ~]$ sudo dnf install dhcp-server
...
(途中省略)
...
依存関係が解決しました。
===================================================================================================
 パッケージ              アーキテクチャー   バージョン                    リポジトリー       サイズ
===================================================================================================
インストール:
 dhcp-server             x86_64             12:4.3.6-34.el8               BaseOS             530 k

トランザクションの概要
===================================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 530 k
インストール済みのサイズ: 1.4 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
...
(途中省略)
...
完了しました!
[bitwalk@cnction ~]$

dhcp-server の設定

DHCP の設定は ipv4 場合、/etc/dhcp/dhcpd.conf を編集しますが、/etc/dhcp/ ディレクトリ内はユーザー権限ではアクセスできませんので、sudo ではなく、 su でスーパーユーザーになって作業をすることにします。

[bitwalk@cnction ~]$ su
パスワード:
[root@cnction bitwalk]# cd /etc/dhcp
[root@cnction dhcp]# ls
dhclient.conf  dhclient.d  dhcpd.conf  dhcpd6.conf
[root@cnction dhcp]# vi dhcpd.conf

dhcpd.conf を下記のように編集します。

/etc/dhcp/dhcpd.conf
# dhcpd.conf

option domain-name "example.org";
option domain-name-servers 192.168.0.25;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;

subnet 192.168.2.0 netmask 255.255.255.0 {
  option routers 192.168.2.1;
  option subnet-mask 255.255.255.0;
  range dynamic-bootp 192.168.2.100 192.168.2.200;
}

編集した dhcpd.conf に対して、次のようにして書式チェックをします。

[root@cnction dhcp]# dhcpd -t -cf /etc/dhcp/dhcpd.conf
Internet Systems Consortium DHCP Server 4.3.6
Copyright 2004-2017 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
ldap_gssapi_principal is not set,GSSAPI Authentication for LDAP will not be used
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcpd/dhcpd.leases
PID file: /var/run/dhcpd.pid
Source compiled to use binary-leases
[root@cnction dhcp]#

ファイアウォールの設定

NIC enp2s0 側のゾーン internal に対して DHCP のサービスをファイアウォールに追加します。

[root@cnction dhcp]# firewall-cmd --permanent --zone=internal --add-service=dhcp
success
[root@cnction dhcp]# firewall-cmd --reload
Warning: ZONE_ALREADY_SET: 'enp2s0' already bound to 'internal'
success
[root@cnction dhcp]#

警告が出たので、念のためゾーン internal の設定内容を確認しました。

[root@cnction dhcp]# sudo firewall-cmd --list-all --zone=internal
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources:
  services: cockpit dhcp dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[root@cnction dhcp]#

サービス提供インターフェイスの設定

参考書 [1] によると、システムに複数の NIC があって、特定の NIC に DHCP のサービスを提供する場合は /etc/sysconfig/dhcpd にインターフェイス名を指定するとありますが、少なくとも現バージョンの dhcp-server では設定する必要はなさそうです。

/etc/sysconfig/dhcpd
# WARNING: This file is NOT used anymore.

# If you are here to restrict what interfaces should dhcpd listen on,
# be aware that dhcpd listens *only* on interfaces for which it finds subnet
# declaration in dhcpd.conf. It means that explicitly enumerating interfaces
# also on command line should not be required in most cases.

# If you still insist on adding some command line options,
# copy dhcpd.service from /lib/systemd/system to /etc/systemd/system and modify
# it there.
# https://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F

# example:
# $ cp /usr/lib/systemd/system/dhcpd.service /etc/systemd/system/
# $ vi /etc/systemd/system/dhcpd.service
# $ ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid 
# $ systemctl --system daemon-reload
# $ systemctl restart dhcpd.service

サービスの起動

dhcpd のサービスを起動します。同時に自動起動するようにも設定します。

[root@cnction dhcp]# systemctl start dhcpd
[root@cnction dhcp]# systemctl enable dhcpd
Created symlink /etc/systemd/system/multi-user.target.wants/dhcpd.service → /usr/lib/systemd/system/dhcpd.service.
[root@cnction dhcp]# systemctl status dhcpd
 dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-04-26 12:37:31 JST; 52s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 25156 (dhcpd)
   Status: "Dispatching packets..."
    Tasks: 1 (limit: 20121)
   Memory: 4.9M
   CGroup: /system.slice/dhcpd.service
           └─25156 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

 4月 26 12:37:31 cnction dhcpd[25156]:
 4月 26 12:37:31 cnction dhcpd[25156]: No subnet declaration for enp1s0 (192.168.0.31).
 4月 26 12:37:31 cnction dhcpd[25156]: ** Ignoring requests on enp1s0.  If this is not what
 4月 26 12:37:31 cnction dhcpd[25156]:    you want, please write a subnet declaration
 4月 26 12:37:31 cnction dhcpd[25156]:    in your dhcpd.conf file for the network segment
 4月 26 12:37:31 cnction dhcpd[25156]:    to which interface enp1s0 is attached. **
 4月 26 12:37:31 cnction dhcpd[25156]:
 4月 26 12:37:31 cnction dhcpd[25156]: Sending on   Socket/fallback/fallback-net
 4月 26 12:37:31 cnction dhcpd[25156]: Server starting service.
 4月 26 12:37:31 cnction systemd[1]: Started DHCPv4 Server Daemon.
[root@cnction dhcp]#

動作確認

ゾーン internal 側に、Ubuntu 18.04 のノート PC を繋げてネットワークの設定を確認しました。

ゾーン internal 側に繋げた PC のネットワーク設定

実は、最初にサービスを起動した時には、ネットワークの設定を確認後に cnction のネットワークが固まってしまいました。cnction の再起動後は特に問題なく使えています。Windows PC も繋げてみましたが問題なさそうです。しばらく使ってみて、通っていないポートなど不具合がないか確認します。

参考サイト

  1. TECHNICAL MASTER はじめてのCentOS 8 Linuxサーバエンジニア入門編 - 秀和システム あなたの学びをサポート

ブログランキング・にほんブログ村へ
にほんブログ村

2020-04-26

[CentOS 8] unbound の設定

Unbound は DNS リゾルバ、キャッシュ、DNSSEC 検証機能を持つ DNS キャッシュサーバーです [1][2]。少し古い資料ですが、参考サイト [3] に、unbound について丁寧な説明がされています。

DNS の設定は、むかしむかし bind を苦労して設定したことがあるだけで、それっきりです。家庭内 LAN に繋がっている複数の Linux の PC は IP アドレスでやり取りすることにすっかり慣れてしまいました。unbound を調べてみると、設定が簡単そうだったので、参考書 [4] の「Chapter 12 DNS キャッシュサーバー」を参考に、家庭内 LAN 内で 24 時間稼働させているミニ PC(右図)に設定してみました。

使用している OS (および unbound)は以下の通りです。

CentOS Linux release 8.1.1911 (Core) x86_64
unbound-1.7.3-8.el8.x86_64

自宅の LAN は、某ケーブルテレビのインテーネットサービスを利用しており、わざわざ DNS サーバーを立てる必要はないのですが、左下のようにさらに内側に実験用の LAN(ゾーン internal)を作っているので、この LAN で使うために unbound を導入しました。

unbound のインストール

unbound のインストールは下記のようにします。

(venv) [bitwalk@centos-pc ~]$ sudo dnf install unbound
Extra Packages for Enterprise Linux 8 - x86_64  6.9 kB/s | 4.2 kB     00:00    
依存関係が解決しました。
================================================================================
 パッケージ       Arch            バージョン           リポジトリー       サイズ
================================================================================
インストール:
 unbound          x86_64          1.7.3-8.el8          AppStream          884 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 884 k
インストール済みのサイズ: 5.2 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
...
(途中省略)
...
完了しました!
(venv) [bitwalk@centos-pc ~]$ 

unbound の設定

unbound の設定ファイルは、/etc/unbound/unbound.conf ですが、そのままで必要な設定がされていますが、このままでは自サーバーの問い合わせしか処理しません。このファイルを調べると、include: /etc/unbound/local.d/*.conf と、include: /etc/unbound/conf.d/*.conf の二か所から外部ファイルをインクルードする記述があるので、この unbound.conf を直接編集せず、個別の設定ファイルをそれぞれのディレクトリに作成することにします。

基本設定

/etc/unbound/local.d/ 以下に、問い合わせを受け付けるインターフェイスの設定と問い合わせを許可するアドレスを設定するファイルを作成します。ここでは参考書通りに access-control.conf としました。なお、設定をしている PC の IP アドレスは 192.168.0.25 です。

/etc/unbound/local.d/access-control.conf
server:
  interface: 127.0.0.1
  interface: ::1
  interface: 192.168.0.25

  access-control: 127.0.0.1 allow
  access-control: ::1 allow
  access-control: 192.168.0.0/24 allow

LAN 内の PC 向け名前解決の設定

LAN 内の PC の名前解決ができるように、固定アドレスで使っている PC について設定しました。基本設定と同じ /etc/unbound/local.d/ 以下に local-data.conf というファイルを作成して記述しました。

/etc/unbound/local.d/local-data.conf
local-data: "fedora-pc.localdomain. A 192.168.0.12"
local-data: "centos-pc.localdomain. A 192.168.0.25"
local-data: "cnction.localdomain. A 192.168.0.31"

local-data: "12.0.168 192.in-addr.arpa PTR fedora-pc.localdomain."
local-data: "25.0.168 192.in-addr.arpa PTR centos-pc.localdomain."
local-data: "31.0.168 192.in-addr.arpa PTR cnction.localdomain."

問い合わせの転送設定

/etc/unbound/conf.d/ 以下に forward.conf というファイルを作成して、インターネット側の DNS のアドレスを記述します。転送先は複数記述できます。

/etc/unbound/conf.d/forward.conf
forward-zone:
  name: "."
  forward-addr: XXX.XXX.XXX.XXX
  forward-addr: YYY.YYY.YYY.YYY
  forward-first: yes

unbound の起動

まず、unbound の正業に必要な鍵ファイルを生成するため unbound-keygen サービスを起動してから、unbound のサービスを起動します。

(venv) [bitwalk@centos-pc ~]$ sudo systemctl start unbound-keygen
(venv) [bitwalk@centos-pc ~]$ sudo systemctl enable unbound-keygen
Created symlink /etc/systemd/system/multi-user.target.wants/unbound-keygen.service → /usr/lib/systemd/system/unbound-keygen.service.
(venv) [bitwalk@centos-pc ~]$ sudo systemctl start unbound
(venv) [bitwalk@centos-pc ~]$ sudo systemctl enable unbound
Created symlink /etc/systemd/system/multi-user.target.wants/unbound.service → /usr/lib/systemd/system/unbound.service.
(venv) [bitwalk@centos-pc ~]$ sudo systemctl status unbound
 unbound.service - Unbound recursive Domain Name Server
   Loaded: loaded (/usr/lib/systemd/system/unbound.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-04-25 23:00:31 JST; 19s ago
 Main PID: 23301 (unbound)
    Tasks: 4 (limit: 26213)
   Memory: 15.5M
   CGroup: /system.slice/unbound.service
           └─23301 /usr/sbin/unbound -d

 4月 25 23:00:30 centos-pc systemd[1]: Starting Unbound recursive Domain Name Server...
 4月 25 23:00:30 centos-pc unbound-checkconf[23296]: unbound-checkconf: no errors in /etc/unbound/unbound.conf
 4月 25 23:00:31 centos-pc systemd[1]: Started Unbound recursive Domain Name Server.
 4月 25 23:00:31 centos-pc unbound[23301]: [23301:0] notice: init module 0: ipsecmod
 4月 25 23:00:31 centos-pc unbound[23301]: [23301:0] notice: init module 1: validator
 4月 25 23:00:31 centos-pc unbound[23301]: [23301:0] notice: init module 2: iterator
 4月 25 23:00:31 centos-pc unbound[23301]: [23301:0] info: start of service (unbound 1.7.3).
 4月 25 23:00:31 centos-pc unbound[23301]: [23301:0] info: generate keytag query _ta-4a5c-4f66. NULL IN
 4月 25 23:00:31 centos-pc unbound[23301]: [23301:0] info: failed to prime trust anchor -- DNSKEY rrset is not secure .>
 4月 25 23:00:31 centos-pc unbound[23301]: [23301:0] info: generate keytag query _ta-4a5c-4f66. NULL IN
(venv) [bitwalk@centos-pc ~]$

設定の確認

設定した内容に構文的な間違いがないか、unbound-checkconf コマンドで確認します。

(venv) [bitwalk@centos-pc ~]$ unbound-checkconf
unbound-checkconf: no errors in /etc/unbound/unbound.conf
(venv) [bitwalk@centos-pc ~]$

ファイアウォールの設定

DNS のサービスが通るようにファイアウォールを設定します。

(venv) [bitwalk@centos-pc ~]$ sudo firewall-cmd --add-service=dns --permanent
success
(venv) [bitwalk@centos-pc ~]$ sudo firewall-cmd --reload
success
(venv) [bitwalk@centos-pc ~]

動作確認

LAN 内に繋がっている他の PC (CentOS 8) から、host コマンドで動作確認します。

[bitwalk@cnction ~]$ host centos-pc.localdomain 192.168.0.25
Using domain server:
Name: 192.168.0.25
Address: 192.168.0.25#53
Aliases:

centos-pc.localdomain has address 192.168.0.25
[bitwalk@cnction ~]$ host yahoo.co.jp 192.168.0.25
Using domain server:
Name: 192.168.0.25
Address: 192.168.0.25#53
Aliases:

yahoo.co.jp has address 183.79.135.206
yahoo.co.jp has address 182.22.59.229
yahoo.co.jp mail is handled by 10 mx2.mail.yahoo.co.jp.
yahoo.co.jp mail is handled by 10 mx3.mail.yahoo.co.jp.
yahoo.co.jp mail is handled by 10 mx1.mail.yahoo.co.jp.
yahoo.co.jp mail is handled by 10 mx5.mail.yahoo.co.jp.
[bitwalk@cnction ~]$

実験用の LAN(ゾーン internal)につないでいる Ubuntu 18.04 のノート PC のネットワーク設定で DNS を 192.168.0.25 に設定して、同様に名前解決ができることを確認できました。

ゾーン internal につないでいる Ubuntu 18.04 のネットワーク設定

とりあえず最低限の設定をしましたが、詳しく機能を調べます。

参考サイト

  1. Unbound – 日本Unboundユーザー会
  2. DNSキャッシュサーバ(キャッシュDNSサーバ)とは - IT用語辞典 e-Words
  3. 第1回 5分でわかるUnbound:Unbound,知ってる? この先10年を見据えたDNS|gihyo.jp … 技術評論社 [2008-11-12]
  4. TECHNICAL MASTER はじめてのCentOS 8 Linuxサーバエンジニア入門編 - 秀和システム あなたの学びをサポート

ブログランキング・にほんブログ村へ
にほんブログ村

2020-04-24

[CentOS 8] IP マスカレードの設定

先日、衝動的に買った 4 つの NIC を搭載したミニ PC [1] に、CentOS 8 をインストールしました。IP マスカレードの設定についてしっかり理解をしたいというのがそもそもの動機です。ちょっと贅沢な動機ですが、いまどきのやり方を身に着けるための投資と考えています。

firewalld で IP マスカレードを設定

てはじめに、下記のような構成のネットワークを作ってみました。

  • 一番目の ETH0 (enp1s0) は、ケーブルテレビ会社からレンタルしているルータ (BCW720J) と接続したネットワーク (192.168.0.0/24)(接続済み)
  • 二番目の ETH1 (enp2s0) は、評価用に使うネットワーク (192.168.2.0/24)

今回は学習が目的ですので、前述した複数の NIC を搭載した CentOS 8 サーバーを家庭内 LAN 内に繋げて、さらにプライベートな LAN を構成しました。この CentOS 8 サーバーに繋がっているネットワークデバイスのインターフェイス enp1s0(家庭内 LAN 側)と enp2s0(プライベートな LAN)の間に IP マスカレードを設定します。

なお、設定の方法は、参考書 [2] の「14-3-2 firewalld におけるIPマスカレード(NAT)の設定」472頁~を参考にしました。

 CentOS 8 

IP フォワーディングの有効化

まず、カーネルパラメータを記述する /etc/sysctl.conf を管理者権限で編集して末尾に下記のようにパラメータを追加します。

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1

追加したカーネルパラメータを有効にします。実際に IPv4 のフォワーディングが有効になったかどうかは /proc/sys/net/ipv4/ip_forward の値で確認できます。

[bitwalk@cnction ~]$ sudo sysctl -p
net.ipv4.ip_forward = 1
[bitwalk@cnction ~]$ cat /proc/sys/net/ipv4/ip_forward
1
[bitwalk@cnction ~]$

 CentOS 8 

ゾーンの設定

IP マスカレードを設定するネットワークデバイスのインターフェイス enp1s0(家庭内 LAN 側)と enp2s0(プライベートな LAN)のゾーンをそれぞれ home と internal に設定します。

[bitwalk@cnction ~]$ sudo firewall-cmd --permanent --zone=home --change-interface=enp1s0
The interface is under control of NetworkManager, setting zone to 'home'.
success
[bitwalk@cnction ~]$ sudo firewall-cmd --permanent --zone=internal --change-interface=enp2s0
The interface is under control of NetworkManager, setting zone to 'internal'.
success
[bitwalk@cnction ~]$

設定したゾーンを確認します。

[bitwalk@cnction ~]$ sudo firewall-cmd --get-active-zones
home
  interfaces: enp1s0
internal
  interfaces: enp2s0
libvirt
  interfaces: virbr0
[bitwalk@cnction ~]$

 CentOS 8 

IP マスカレードの有効化

インターフェイス enp1s0(家庭内 LAN 側)のゾーン home に対して IP マスカレードを有効にします。そのあとで firewall の設定を再読み込みします。

[bitwalk@cnction ~]$ sudo firewall-cmd --permanent --zone=home --add-masquerade
success
[bitwalk@cnction ~]$ sudo firewall-cmd --reload
success
[bitwalk@cnction ~]$

各ゾーンの設定状況を確認します。

[bitwalk@cnction ~]$ sudo firewall-cmd --list-all --zone=home
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources:
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[bitwalk@cnction ~]$ sudo firewall-cmd --list-all --zone=internal
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp2s0
  sources:
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[bitwalk@cnction ~]$

firewall-config の使用

firewall-config を利用すると、GUI で filrewall の設定ができます。インストールは次のようにします。

[bitwalk@cnction ~]$ sudo dnf install firewall-config
Extra Packages for Enterprise Linux Modular 8 -  16 kB/s | 9.8 kB     00:00    
Extra Packages for Enterprise Linux 8 - x86_64   12 kB/s | 9.7 kB     00:00    
google-chrome                                    15 kB/s | 1.3 kB     00:00    
依存関係が解決しました。
================================================================================
 パッケージ            Arch         バージョン            リポジトリー    サイズ
================================================================================
インストール:
 firewall-config       noarch       0.7.0-5.el8_1.1       AppStream       158 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 158 k
インストール済みのサイズ: 1.1 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
firewall-config-0.7.0-5.el8_1.1.noarch.rpm      1.0 MB/s | 158 kB     00:00    
...
(途中省略)
...
インストール済み:
  firewall-config-0.7.0-5.el8_1.1.noarch                                        

完了しました!
[bitwalk@cnction ~]$ 

firewall-config は以下のように GNOME にアプリ一覧から起動します。アプリ名は「ファイアウォールの設定」になっています。

GNOME のアプリ一覧にある firewall-config(ファイアウォールの設定)

実行例を示しました。さすがに GUI だと設定の変更操作が簡単です。

firewall-config の実行例

動作確認

ゾーン internal にクライアント PC を繋げて動作確認します。

 CentOS 8 

IP アドレス等の設定

ゾーン home 側のネットワークに繋がっている NIC (enp1s0) は、ケーブルテレビのルータ (BCW720J) の DHCP でアドレスが割り当てられますが、この CentOS 8 サーバーは IP アドレスが 192.168.0.31 固定になるように、ルータ側で設定しています。

CentOS 8: enp1s0 の設定 (192.168.0.31)

ゾーン internal 側のネットワークの NIC (enp2s0) は IP アドレス 192.168.2.1 とサブネットマスク 255.255.255.0 のみ設定しました。

CentOS 8: enp2s0 の設定 (192.168.2.1)

ルーティングテーブルの情報を確認すると以下のようになっています。

[bitwalk@cnction ~]$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 enp1s0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 enp1s0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 enp2s0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
[bitwalk@cnction ~]$

 Ubuntu 18.04 

IP アドレス等の設定(クライアント側)

ゾーン internal 側に一台、クライアント PC を接続し、IP アドレス等を設定しました。OS は Ubuntu 18.04 です。IP アドレスに 192.168.2.2、サブネットマスクは 255.255.255.0、デフォルトゲートウェイを 192,168,2,1 としました。このままでは名前解決ができないので、とりあえず、enp1s0 に設定したもの同じ DNS のアドレスを設定しました。

Ubuntu 18.04: ネットワークの設定 (192.168.2.2)

同じようにルーティングテーブルの情報を確認すると以下のようになっています。

(venv) bitwalk@ubuntu-pc:~$ netstat -rn
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ   MSS Window  irtt インタフェース
0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0 enp3s0f2
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 enp3s0f2
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 enp3s0f2
(venv) bitwalk@ubuntu-pc:~$ route
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
default         _gateway        0.0.0.0         UG    100    0        0 enp3s0f2
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp3s0f2
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 enp3s0f2
(venv) bitwalk@ubuntu-pc:~$ 

169.254.0.0 はリンクローカルアドレスという領域です。DHCP サーバ(プライベート IP アドレスを割り当てる役目を持ったサーバ)が存在しないネットワーク内で使われる、特別なIPアドレスです。なぜ割り当てられたのか不思議ですが、DHCP が使えないローカルのネットワークで APIPA が有効になるのしょうか。このルートがあっても害はなさそうですので、とりあえず放置します。

これで、インターネットへのアクセスができることを確認できました。ゾーン internal から home へのアクセスも大丈夫そうですが、その逆、home から internal への経路が取れません。ひきつづき調査を続けます。

参考サイト

  1. bitWalk's: ミニ PC を衝動買い [2020-04-21]
  2. CentOS8 実践ガイド[システム管理編] - インプレスブックス

ブログランキング・にほんブログ村へ
にほんブログ村

2020-04-21

ミニ PC を衝動買い

家庭用のルータは便利になったもので、一台で複数規格の WiFi と有線 LAN に対応しており、Linux を使っていても特殊な設定をせずにインターネットを利用できます。

自宅のネットワーク環境は、某ケーブルテレビ会社のインターネットサービスを利用しています。レンタルしている無線ルータ内蔵ケーブルモデムには、さらに有線LANポートが 4 つあります。スマホやタブレットは WiFi に繋いで、据置きの PC やノート PC は、安定した通信速度の方を重視して有線接続しています。

むかしむかし Linux Kernel のバージョンが 2.x だった時期、IP マスカレードなんていう語が Linux 関係の雑誌を賑わせていました。自分もネットワークカード (NIC) 二枚挿しの PC でネットワークアドレス変換をできるように設定して、NAT ができたと嬉々としていたことを思い出しました。

※ 1996 年に五橋研究所から Linux Japan が創刊され、ASCII Linux magazine (1999), 日経Linux (1999) など Linux 関連の雑誌がいくつも刊行されていた時期がありました。

しかしそれは、今も残る自分の知識・技術になっていないことに気が付いてしまいました。今、同じようなことをやって、できたことをしっかりまとめたいと考え始めたら矢も盾もたまらなくなり、評価用に廉価なミニ PC を買ってしまいました。😁

Ethernetの NIC を複数搭載した 3 万円前後の価格帯のミニ PC が Amazon.jp のサイトにいくつもあったのですが、Prime マーク付きのすぐ配達してくれるもので、かつ、安かった Intel NUC Kit Celeron J1900搭載 4LAN 4G RAM 60G SSD ポータブルMini PC(右リンク)を購入することにしました。

※ NUC, Next Unit of Computing とは、インテルが提唱する 101.6 × 101.6 mm サイズの独自フォームファクターのマザーボードです。

※ 製造元のサイト:康耐信(cnction) J1900 全千兆4网口软路由整机,支持LEDE,爱快-康耐信软路由,深圳宏顺欣网科技有限公司,工控机,迷你电脑,软路由-康耐信软路由

搭載されているプロセッサ Intel Celeron J1900(出荷開始 2013 年 Q4)は、Bay Trail 世代 22nm のデザインルール、4 コア 4 スレッド、ベース周波数 2.00 GHz、TDP 10W です。Ethernet の NIC のポートが 4 つあります。プロセッサは古いですが、評価には十分な仕様でしょう。欲を言えば、より低消費電力を追求したかったのですが、価格を抑えた中では選択肢が限られており仕方がありません。いやいや、贅沢な評価環境というべきでしょう。💦

開封と CentOS 8 のインストール

開封

Amazon.jp から配達され、開封してみると、何も説明書がありませんでした。ま、それはいいのですが、電源ケーブルのプラグ形状が 3PIN のものにでした。 幸い AC - DC 電源に接続する部分が合う 3PIN → 2PIN + GND ケーブルが手許にありましたので、それを使いました。

CentOS 8 のインストール

Amazon.jp の商品説明欄には、「OS:Windows/Linux/firewallサポート」とあるだけで、Windows がプリインストールされているかの表記がなかったため、何もインストールされていないと思っていたのですが、Windows 10 Pro (1803) がプリインストールされていました。

4 つある NIC ポートのうち、ETH0 とラベルされているポートを家庭内の LAN に接続し、プレインストールされている Windows で動作確認をしてから、下記の iso イメージを書き込んだ USB メモリを使って、CentOS 8 をインストールしました。インストールはデフォルトの「サーバー(GUI 仕様)」を選びました。

CentOS Linux release 8.1.1911 (Core) x86_64

CentOS 8 のインストールの詳細はここでは触れませんが、bitWalk's: [CentOS 8] インストールなどを参照してください。

インストール後、nmcli (Network Manager command-line) コマンドでネットワークデバイスを調べます。

[bitwalk@cnction ~]$ nmcli device
DEVICE      TYPE      STATE     CONNECTION
enp1s0      ethernet  接続済み  enp1s0
virbr0      bridge    接続済み  virbr0
enp2s0      ethernet  切断済み  --
enp3s0      ethernet  切断済み  --
enp4s0      ethernet  切断済み  --
lo          loopback  管理無し  --
virbr0-nic  tun       管理無し  --
[bitwalk@cnction ~]$

ETH1 のデバイス名が enp1s0 であることが判りましたので、ここに割り当てられた IP アドレスを調べます。なお、もうひとつ緑色になっている virbr0 は KVM 仮想環境で NAT 変換を行う仮想ブリッジです。

[bitwalk@cnction ~]$ ip addr show dev enp1s0
2: enp1s0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:a0:c9:0c:f5:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.31/24 brd 192.168.0.255 scope global dynamic noprefixroute enp1s0
       valid_lft 85138sec preferred_lft 85138sec
    inet6 fe80::ca14:1036:67c8:2c60/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[bitwalk@cnction ~]$

この IP アドレスは、DHCP で割り当てられたアドレスですので変更される可能性がありますが、自宅で使っている、ケーブルテレビ会社からレンタルしているルーターでは、割り当てられた IP アドレスの値が、家庭内の使い方ではほとんど変更されないことが判っているので、固定アドレスを設定せずにこのまま使っています。

SSH サーバの設定

ディスプレイやキーボード、マウスを接続して OS をインストールしましたが、普段使いでは端末エミュレータから SSH でアクセスしたいので、SSH サーバーをインストールします。

[bitwalk@cnction ~]$ sudo dnf install openssh-server

openssh-server をインストール後、SSH サーバーは起動されていますが、OS 起動後に自動起動されるようにしておきます。

[bitwalk@cnction ~]$ sudo systemctl enable sshd

OpenSSH をインストールすれば、直ちに LAN 内の他の PC から ssh でログインできますので、ファイヤーウォールの設定は不要のようです。念のため解放されているポートを確認しました。

[bitwalk@cnction ~]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[bitwalk@cnction ~]$

xrdp サーバの設定

新型コロナウイルス (COVID-19) 感染の流行で、このところテレワークが続いており、会社から支給されているノート PC を家庭内 LAN に接続して使うことを強いられています。このような状況では Windows からリモートログインできるようにした方が何かと都合がよいので、xrdp をインストールしておきます。まずは epel を利用できるようにします。

[bitwalk@cnction ~]$ sudo dnf install -y epel-release

xrdp と TigerVNC をインストールします。

[bitwalk@cnction ~]$ sudo dnf install xrdp tigervnc-server

xrdp サーバを起動します。また OS 起動後に自動起動するように enable にしておきます。

[bitwalk@cnction ~]$ sudo systemctl start xrdp
[bitwalk@cnction ~]$ sudo systemctl enable xrdp
Created symlink /etc/systemd/system/multi-user.target.wants/xrdp.service → /usr/lib/systemd/system/xrdp.service.
[bitwalk@cnction ~]$

Windows のリモートデスクトップ接続に使うポート 3389 を開放します。

[bitwalk@cnction ~]$ sudo firewall-cmd --permanent --zone=public --add-port=3389/tcp
success
[bitwalk@cnction ~]$ sudo firewall-cmd --reload
success
[bitwalk@cnction ~]$

以下に接続した例を示しました。

Windows 10 からリモート接続した例

パフォーマンス

クロスプラットフォームでベンチマークを計測できる Geekbench 5 で、CPU 性能を計測しました。

Geekbench によるベンチマーク(Windows と Linux でそれぞれ計測)
#NamePlatformArchitectureSingle-core ScoreMulti-core Score
1846124 CNCTION-IAF
Intel Celeron J1900 2415 MHz (4 cores)
Linux 64 x86_64 239 806
1844492 CNCTION-IAF
Intel Celeron J1900 2007 MHz (4 cores)
Windows 64 x86_64 215 710

 

以上で最低限の作業環境が整いました。さあ、ネットワークのお勉強の時間です。本機を使ってあれこれ試した結果を不定期にまとめていきます。

参考サイト

  1. 第1章 システム管理の使用 Red Hat Enterprise Linux 8 | Red Hat Customer Portal

ブログランキング・にほんブログ村へ
にほんブログ村