tailscaleでDebianの監視端末にどこからでもアクセスできるようにする

概要

トラブル対応などのために顧客のネットワークをキャプチャしたり稼働状況を確認する必要があった場合、24時間その場に張り付くことはできないため監視端末を設置することがあります。 この端末にアクセスするために現地に毎回訪問することは大きな負担なので、リモートからアクセスできるようにします。 ただ、ファイアウォールに穴を開けたりポート転送の設定をすることが出来ない場合がほとんどですので、そういったことが必要のない tailscale というVPNサービスを利用します。

tailscale は、Windows / MacOS / iOS / Android だけでなく、Linuxにも対応したPeer to PeerのVPNサービスです。 個人利用であれば20台まで無料で利用できます。

環境

ソフトウェア

  • Debian 11 (bullseys)
  • tailscale 1.16.2

セットアップ

ダウンロードサイトにアクセスする

Download · Tailscale

Debian用のインストール手順を表示する

Linux → Debian Bullseye を選択してセットアップ手順を表示します。

手順に従ってセットアップする

以下の内容は、上記の手順に従って表示された手順です。 参考までに記載していますが、必ずサイトの手順を表示して表示された手順に従ってセットアップしてください。

セットアップに必要な curl のインストール

# apt install curl

レポジトリの追加

# curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.gpg | apt-key add -
# curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.list | tee /etc/apt/sources.list.d/tailscale.list

tailscale のインストール

# apt-get update
# apt-get install tailscale

認証して tailscale ネットワークに接続する

以下のコマンドを実行すると、URLが表示されるのでブラウザで表示して認証します。 認証はWIndowsMACなど別の端末からでも問題ありません。

# tailscale up


To authenticate, visit:

        https://login.tailscale.com/a/xxxxxxxxxxxx ← このアドレスにブラウザでアクセスする

認証画面で認証する。

GoogleMicrosoft などのアカウントでも認証できます。 f:id:infrablogger:20211116225747p:plain

認証に成功すると以下のような画面が表示されます。 f:id:infrablogger:20211116230018p:plain

VPNの接続状況を確認する

# ip a

以下のように、仮想インターフェースが作成され、IPアドレスが取得できていれば成功です。 アクセスするすべての端末を同様の手順でVPNに参加させます。 f:id:infrablogger:20211116230150p:plain

VPNに参加した端末間で ping などにより接続を確認します。

# ping 100.104.134.21
PING 100.104.134.21 (100.104.134.21) 56(84) bytes of data.
64 bytes from 100.104.134.21: icmp_seq=1 ttl=128 time=17.1 ms
64 bytes from 100.104.134.21: icmp_seq=2 ttl=128 time=3.55 ms
64 bytes from 100.104.134.21: icmp_seq=3 ttl=128 time=3.28 ms
64 bytes from 100.104.134.21: icmp_seq=4 ttl=128 time=2.78 ms
64 bytes from 100.104.134.21: icmp_seq=5 ttl=128 time=2.28 ms
^C
--- 100.104.134.21 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 2.276/5.802/17.118/5.674 ms

ping が通れば完了です。

debianでインライン構成のパケットキャプチャマシンを作る

概要

トラブルシューティングの際にネットワークを流れるパケットをキャプチャしたい場合があります。 Liva Q1L はLANポートが2ポートあるためインラインでキャプチャできるデバイスにできればキャプチャ用に別途ハブなどを用意する必要が無く便利です。 キャプチャしたファイルは Wireshark などで分析することが出来ます。

f:id:infrablogger:20211115212410p:plain
通常構成
f:id:infrablogger:20211115212620p:plain
インライン構成

環境

ハードウェア

ソフトウェア

設定

現在の構成を確認する

nmcliコマンドで、現在の構成が確認できます。 LANケーブルの接続された enp2s0 と、接続されていない eno1 が存在します。

# nmcli con
NAME             UUID                                  TYPE      DEVICE 
ethernet-enp2s0  2815e4b1-4a3d-4d99-96b9-bea28eec47cd  ethernet  enp2s0 
ethernet-eno1    07025d57-e81f-4ef6-b2ec-e324f9bd5601  ethernet  -- 

LANをブリッジ構成にする

仮想ブリッジ br0 を作成します。ブリッジとは複数のLANポートをまとめて1つのハブのようにしたものです。無線と有線をブリッジすることで無線アクセスポイントを作成することなどもできます。ルーターと違うのは、全て同一のネットワークセグメント(ブロードキャストドメイン)になることです。

例えば、IPアドレスDHCPで取得するブリッジを作成する場合、以下のようにします。

# nmcli con add type bridge ifname br0

IPアドレスを固定したい場合は、以下のようにします。

# nmcli con add type bridge ifname br0 ipv4.method manual ipv4.address "192.168.11.11/24" ipv4.gateway "192.168.11.1"  ipv4.dns "192.168.11.1"

物理ポート enp2s0 と eno1 をブリッジに接続します。

# nmcli con add type bridge-slave ifname enp2s0 master bridge-br0
# nmcli con add type bridge-slave ifname eno1 master bridge-br0

物理ポートを 削除します。今、enp2s0にLANケーブルが接続されているなら、先にeno1から削除し、後からenp2s0を削除し再起動します。

# nmcli con del ethernet-eno1
# nmcli con del ethernet-enp2s0 ; reboot

これで、br0 を流れるパケットをキャプチャすればよいことになります。

tcpdump をインストールする

パケットキャプチャに利用するソフトウェア tcpdump をインストールします。

# apt install tcpdump

キャプチャする

# tcpdump -n -i br0 -s 0 -w /tmp/tcpdump.pcap
  • -n IPを名前に変換しない
  • -i キャプチャするインターフェースを指定する
  • -s パケットの最大サイズ(0の場合は無制限)
  • -w キャプチャしたデータの保存先

参考

Zabbixサーバーのパフォーマンスチューニング

概要

100台程度のホストを監視する想定で、パフォーマンスチューニングします。 今回は、簡易的にZabbixサーバー自身の監視設定をコピーして負荷をかけていきます。

環境

ハードウェア

ソフトウェア

テスト環境の作成

監視設定をYAML形式でエキスポートする

f:id:infrablogger:20211107183330p:plain

エキスポートしたファイルを元に100台分の新規ホストとして編集する

サンプルファイル(zbx_export_hosts-0-99.yaml) ※注意※ 利用する場合は、groups > uuid を自身の環境に合わせて書き換えてください。

作成したファイルをインポートしてホストを作成する

「設定」→「ホスト」の右上にある「インポート」をクリックし、作成したファイルを選択する。

f:id:infrablogger:20211107185838p:plain

Zabbixサーバーの設定を修正する

ホストを100台追加するとZabbixサーバーが停止してしまいます。ログを確認して原因を確認していきます。

 47586:20211107:190121.261 Starting Zabbix Server. Zabbix 5.4.7 (revision 84dc2ec5dc).
 47586:20211107:190121.261 ****** Enabled features ******
 47586:20211107:190121.261 SNMP monitoring:           YES
 47586:20211107:190121.261 IPMI monitoring:           YES
 47586:20211107:190121.261 Web monitoring:            YES
 47586:20211107:190121.261 VMware monitoring:         YES
 47586:20211107:190121.261 SMTP authentication:       YES
 47586:20211107:190121.261 ODBC:                      YES
 47586:20211107:190121.261 SSH support:               YES
 47586:20211107:190121.261 IPv6 support:              YES
 47586:20211107:190121.261 TLS support:               YES
 47586:20211107:190121.261 ******************************
 47586:20211107:190121.261 using configuration file: /etc/zabbix/zabbix_server.conf
 47586:20211107:190121.351 TimescaleDB version: 20500
 47586:20211107:190121.380 current database version (mandatory/optional): 05040000/05040000
 47586:20211107:190121.380 required mandatory version: 05040000
 47586:20211107:190121.542 server #0 started [main process]
 47595:20211107:190121.543 server #1 started [configuration syncer #1]
 47595:20211107:190122.230 __mem_malloc: skipped 7 asked 6296 skip_min 264 skip_max 5000
 47595:20211107:190122.231 [file:dbconfig.c,line:102] __zbx_mem_realloc(): out of memory (requested 6296 bytes)
 47595:20211107:190122.231 [file:dbconfig.c,line:102] __zbx_mem_realloc(): please increase CacheSize configuration parameter
 47595:20211107:190122.231 === memory statistics for configuration cache ===
 47595:20211107:190122.231 free chunks of size     24 bytes:       24
 47595:20211107:190122.231 free chunks of size >= 256 bytes:        7
 47595:20211107:190122.231 min chunk size:         24 bytes
 47595:20211107:190122.231 max chunk size:       5000 bytes
 47595:20211107:190122.231 memory of total size 7257720 bytes fragmented into 70658 chunks
 47595:20211107:190122.231 of those,      15480 bytes are in       31 free chunks
 47595:20211107:190122.231 of those,    7242240 bytes are in    70627 used chunks
 47595:20211107:190122.231 of those,    1130512 bytes are used by allocation overhead
 47595:20211107:190122.231 ================================
 47595:20211107:190122.231 === Backtrace: ===
 47595:20211107:190122.232 15: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](zbx_backtrace+0x3f) [0x56428eb0f601]
 47595:20211107:190122.232 14: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](__zbx_mem_realloc+0x160) [0x56428eb0a2c4]
 47595:20211107:190122.232 13: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](+0x1a2b54) [0x56428ea94b54]
 47595:20211107:190122.232 12: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](zbx_hashset_reserve+0xc1) [0x56428eb1557f]
 47595:20211107:190122.232 11: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](zbx_hashset_insert_ext+0xee) [0x56428eb157f0]
 47595:20211107:190122.232 10: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](zbx_hashset_insert+0x2d) [0x56428eb15700]
 47595:20211107:190122.232 9: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](DCfind_id+0x86) [0x56428ea95387]
 47595:20211107:190122.232 8: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](+0x1abc78) [0x56428ea9dc78]
 47595:20211107:190122.232 7: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](DCsync_configuration+0x11d9) [0x56428eaa3a08]
 47595:20211107:190122.232 6: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](dbconfig_thread+0x122) [0x56428e95937a]
 47595:20211107:190122.232 5: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](zbx_thread_start+0x37) [0x56428eb1f97a]
 47595:20211107:190122.232 4: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](MAIN_ZABBIX_ENTRY+0xb3b) [0x56428e9479fe]
 47595:20211107:190122.232 3: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](daemon_start+0x2f5) [0x56428eb0f20f]
 47595:20211107:190122.232 2: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](main+0x2f5) [0x56428e946ded]
 47595:20211107:190122.232 1: /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea) [0x7f72d9fc4d0a]
 47595:20211107:190122.232 0: /usr/sbin/zabbix_server: configuration syncer [syncing configuration](_start+0x2a) [0x56428e945cca]
 47586:20211107:190122.237 One child process died (PID:47595,exitcode/signal:1). Exiting ...
 47586:20211107:190122.260 syncing trend data...
 47586:20211107:190122.261 syncing trend data done
 47586:20211107:190122.261 Zabbix Server stopped. Zabbix 5.4.7 (revision 84dc2ec5dc).

このようなログが何度も繰り返して出力されていることが分かります。 この中で、以下の行に「メモリが不足しているから CacheSize 設定を増やしてね」と記載されています。

 47595:20211107:190122.231 [file:dbconfig.c,line:102] __zbx_mem_realloc(): out of memory (requested 6296 bytes)
 47595:20211107:190122.231 [file:dbconfig.c,line:102] __zbx_mem_realloc(): please increase CacheSize configuration parameter

このため、Zabbixサーバーの設定ファイルを変更します。 デフォルトは8Mなので、とりあえず32Mにして様子を見てみます。 /etc/zabbix/zabbix_server.conf

CacheSize 32M

変更したらサーバーを再起動します。

# systemctl restart zabbix-server

上手く起動したら30分くらい様子見をしてからパフォーマンスを確認していきます。 f:id:infrablogger:20211107210757p:plain

32MBだと75%ギリギリなので、64MBまで増やして様子を見ていきます。 /etc/zabbix/zabbix_server.conf

CacheSize 64M

問題なさそうなので、これで行きます。 f:id:infrablogger:20211114220140p:plain

他の項目を確認していく

ポイント:queueがたまっているということは処理しきれていないということなのでチューニングが必要な状態です。 f:id:infrablogger:20211114220417p:plain

ポイント:データを収集するプロセスの稼働率をチェックします。75%を超えていると余裕がないので対応するプロセスを増やす必要があります。 遠隔地にあるサーバーを監視する場合は、途中の回線が混みあっている場合などにチェックに時間がかかりプロセスが消費されることがあります。

f:id:infrablogger:20211114220535p:plain

詳細は、以下の記事で詳細に解説されています。。 blog.serverworks.co.jp

お疲れさまでした。

debianをWindowsのファイルサーバーにする

概要

debianWindows用のファイルサーバーとして利用できるようにします。 ユーザー認証はSambaのローカルユーザーで行います。 今回は、sambaのhomes機能を利用して、ユーザーごとに自分専用のフォルダのみアクセスできるようにします。

環境

ソフトウェア

  • Debian 11 (bullseys)
  • Samba 4.13

サーバーの設定

1. samba のインストール

# apt install samba

2. 設定ファイルの作成

オリジナルファイルを別名で保存

# mv /etc/samba/smb.conf /etc/samba/smb.conf.org

設定ファイルを作成する。 パラメータについてはこちらのサイトが詳しい。

/etc/samba/smb.conf

[global]
   workgroup = WORKGROUP

   dos charset = CP932
   unix charset = UTF-8

   log file = /var/log/samba/log.%m

   max log size = 1000

   logging = file

   panic action = /usr/share/samba/panic-action %d

   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes

   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

   pam password change = yes

   map to guest = never
   usershare allow guests = no

[homes]
   comment = Home Directories
   path = /data/homes/%S
   browseable = no
   writable = yes
   valid users = %S

3. samba ユーザーの作成

sambaのユーザーとUNIXユーザーは別で管理されているが、実際のファイルの書き込みはUNIXユーザーで行われるため、UNIXユーザーと同じユーザー名でsambaユーザーを作成する。

# pdbedit -a <ユーザー名>

4. データディレクトリの作成

# mkdir -p /data/homes/<ユーザー名>
# chown -R <ユーザー名> /data/homes/<ユーザー名>
# chmod 700 /data/homes/<ユーザー名>

Windows PCからの接続

Windows ユーザー名/パスワードと、UNIXユーザー名/パスワードが一致していれば、アカウント情報を聞かれることなくアクセスすることが出来る。 異なる場合は、資格情報をWindowsにあらかじめ設定しておく。

1. コントロールパネルを開く

Windowsキー → control と入力 → コントロールパネルを選択 f:id:infrablogger:20211108161631p:plain

2. 資格情報マネージャを開く

f:id:infrablogger:20211108161806p:plain

f:id:infrablogger:20211108161859p:plain

f:id:infrablogger:20211108162051p:plain

アドレスには、ホスト名かIPアドレス、ユーザー名/パスワードにはsambaユーザーのユーザー名/パスワードを入力 f:id:infrablogger:20211108162307p:plain

3. サーバーにアクセスする

エクスプローラーで、以下のアドレスを開く \<ホスト名> または <IPアドレス>

フォルダが見えて、ファイルが書き込めれば完了です。 f:id:infrablogger:20211108162551p:plain

【ZabbixServer構築#9】Zabbixサーバーのグラフの文字化けを修正する

概要

これまでの手順のままだと、グラフが以下のように□に化けていて見えないので修正します。 f:id:infrablogger:20211107192135p:plain

環境

ソフトウェア

  • Debian 11 (bullseys)
  • Zabbix 5.4

修正手順

1. フォントをインストールする

# apt install fonts-ipafont

2. Zabbixがフォントを利用するよう設定する

alternatives という仕組みが利用されているので、以下のコマンドでインストールしたフォントが候補の中で一番優先して利用されるように設定する

※他のサイトでは、PHPのプログラムを修正する手順が紹介されている場合がありますが、プログラムがアップデートされた際に毎回修正する必要があるため、alternativesを利用することをお奨めします

# update-alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-frontend-font /usr/share/fonts/truetype/fonts-japanese-gothic.ttf 20

確認

以下のように、文字が正しく表示されれば完了です。 f:id:infrablogger:20211107195400p:plain

【ZabbixServer構築#8】ZabbixデータベースにTimescleDBを設定する

概要

ZabbixデータベースにTimescaleDBを設定します。 TimescaleDBによって、履歴データのテーブルをパーティション管理することで、過去データの削除処理(ハウスキーピング処理)を劇的に軽減できます。 また、データ圧縮によりディスク容量1/10程度まで節約できます。

TimeScaleDBの設定

TimescaleDB拡張を有効にする

# echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u zabbix psql zabbix
WARNING:  
WELCOME TO
 _____ _                               _     ____________  
|_   _(_)                             | |    |  _  \ ___ \ 
  | |  _ _ __ ___   ___  ___  ___ __ _| | ___| | | | |_/ / 
  | | | |  _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \ 
  | | | | | | | | |  __/\__ \ (_| (_| | |  __/ |/ /| |_/ /
  |_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/
               Running version 2.5.0
For more information on TimescaleDB, please visit the following links:

 1. Getting started: https://docs.timescale.com/timescaledb/latest/getting-started
 2. API reference documentation: https://docs.timescale.com/api/latest
 3. How TimescaleDB is designed: https://docs.timescale.com/timescaledb/latest/overview/core-concepts

Note: TimescaleDB collects anonymous reports to better understand and assist our users.
For more information and how to disable, please see our docs https://docs.timescale.com/timescaledb/latest/how-to-guides/configuration/telemetry.

CREATE EXTENSION

スキーマ設定

# cat /usr/share/doc/zabbix-sql-scripts/postgresql/timescaledb.sql | sudo -u zabbix psql zabbix

確認

管理 → 一般設定 → データの保存期間の設定が以下のようになっていれば完了です。 f:id:infrablogger:20211107160749p:plain

【ZabbixServer構築#7】ZabbixをPostgreSQL+nginx環境にインストールする

概要

Zabbixをインストールします。 ZabbixはDebianよりもバージョンアップが早いため追随できるように公式サイトのパッケージを利用します。 2021/11/7現在で最新の5.4を採用します。 フロントエンドには軽量WEBサーバーのnginxを利用します。

1. Zabbixをインストール

Zabbixのインストール手順は公式サイトのダウンロードから環境を選択することで手順が表示されますので、基本的にはこの通りの流れでインストールします。

f:id:infrablogger:20211107134654p:plain

a. Install Zabbix repository

# wget https://repo.zabbix.com/zabbix/5.4/debian/pool/main/z/zabbix-release/zabbix-release_5.4-1+debian11_all.deb
# dpkg -i zabbix-release_5.4-1+debian11_all.deb
# apt update

b. Install Zabbix server, frontend, agent

# apt install zabbix-server-pgsql zabbix-frontend-php php7.4-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent

c. Create initial database

データベース(zabbix)とユーザー(zabbix)の作成

# sudo -u postgres createuser --pwprompt zabbix
# sudo -u postgres createdb -O zabbix zabbix

初期スキーマとデータのインポート

# zcat /usr/share/doc/zabbix-sql-scripts/postgresql/create.sql.gz | sudo -u zabbix psql zabbix

d. Configure the database for Zabbix server

Edit file /etc/zabbix/zabbix_server.conf

DBPassword=<ユーザー(zabbix)のパスワード>

e. Configure PHP for Zabbix frontend

/etc/zabbix/nginx.conf を編集し、以下の行のコメント(#)を外す

# listen 80;
# server_name example.com;

nginxのdefaultページを削除する

# rm /etc/nginx/sites-enabled/default

f. Start Zabbix server and agent processes

# systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm
# systemctl enable zabbix-server zabbix-agent nginx php7.4-fpm

フロントエンドの設定

サーバーのWEB画面( http://<サーバーのIPアドレス> )にアクセスしてフロントエンドの設定を完了する http://<サーバーのIPアドレス>

f:id:infrablogger:20211107141438p:plain

f:id:infrablogger:20211107141456p:plain

途中で入力したデータベースパスワードを設定 f:id:infrablogger:20211107141609p:plain

f:id:infrablogger:20211107142448p:plain

f:id:infrablogger:20211107142509p:plain

f:id:infrablogger:20211107142532p:plain

f:id:infrablogger:20211107142555p:plain

最後にログイン画面が表示されれば完了です。 デフォルトは、 Admin / zabbix です。 f:id:infrablogger:20211107155918p:plain