HylaFAX自社FAXシステム連載
- 第1回:FAX番号を変えずにFAX業務をDXする――HylaFAXとAIで自社サーバーを作った理由
- 第2回:HylaFAXでFAXサーバーを構築する――Debian 13とOMRON ME5614D2の実践記録
- 第3回:HylaFAXがRunning and idleなのに受信できない――T.30 T1 timeoutの原因を追った記録
- 第4回:HylaFAXの受信FAXをWeb管理する――FaxDispatch、PDF化、メール転送の実装
- 第5回:FAX OCRとAIで送信元判別・全文検索――アドレス帳照合でAPI費用を抑える設計
- 第6回:FAXへタブレットで書き込み、そのまま返信――HylaFAX Webシステムの実装
前回の記事では、既存のFAX番号を変えず、取引先の運用を変えないまま自社側だけをDXする方針を紹介しました。
今回は、実際に使用したサーバー構成と、OMRON ME5614D2をHylaFAXで認識させ、送受信できる状態にするまでを整理します。
注意:この記事は再現性を保証する汎用手順書ではなく、私の環境での構築記録です。電話回線、モデムのファームウェア、Linuxディストリビューション、HylaFAXのパッケージ構成によって設定は変わります。FAX番号、メールアドレス、認証情報は公開用に伏せています。
今回の構成
| 項目 | 使用したもの |
|---|---|
| OS | Debian 13(trixie)・ベアメタル |
| FAXサーバー | HylaFAX 6.0.7系 |
| FAXモデム | OMRON ME5614D2 |
| 接続 | RS-232C、/dev/ttyS0 |
| Webサーバー | nginx |
| アプリケーション | PHP 8.4-FPM |
| データベース | MariaDB |
| FAX管理アプリ | /srv/tools/fax/へ直接配置 |
同じサーバーでは別システムにDockerも使っていますが、FAXシステム本体はコンテナへ入れず、ベアメタル上へ直接配置しました。
電話回線、シリアルデバイス、HylaFAXのスプール、systemdサービス、受信後フックを扱うため、障害時に構成を追いやすい方を優先したためです。
既存のFAX番号を変えないため、現在の回線をそのまま使う
今回の構成では、FAX番号をクラウド事業者へ移管したり、新しい番号を取得したりしていません。
既存FAX番号の電話回線
↓
OMRON ME5614D2
↓ RS-232C
Debian 13 + HylaFAX
回線契約と番号をそのまま残し、従来FAX機を接続していた位置へFAXモデムを接続します。取引先側は番号変更も設定変更も不要です。
これはクラウドFAXより常に優れるという意味ではありません。番号ポータビリティに対応するサービスもあります。ただ、今回は番号移行の可否確認、切替日程、送信番号の違い、転送費用などを増やさずに済むことを優先しました。
なぜUSBモデムではなくME5614D2にしたのか
最近は、FAX対応を明確にうたう外付けモデム自体が少なくなっています。USB接続製品は入手しやすいものもありますが、チップセットやドライバー、再起動後のデバイス名、USB切断などを考える必要があります。
今回は常時稼働を前提に、RS-232C接続のOMRON ME5614D2を選びました。
- 物理シリアルポートへ固定して接続できる
- Linuxから
/dev/ttyS0として扱える - FAXモデムとしての設定項目を直接確認できる
- USB変換チップやUSB再接続の要素を減らせる
中古機器を使うため、予備機の確保や故障時の交換手順は必要です。それでも、FAX通信の不調を切り分ける際に、接続経路を単純にできるメリットを重視しました。
シリアルポートを確認する
まず、OSからモデムを接続したシリアルポートが見えているか確認します。
ls -l /dev/ttyS*
dmesg | grep -i tty
今回使用したデバイスは/dev/ttyS0です。
次に、ほかのサービスが同じポートを占有していないか確認します。
sudo lsof /dev/ttyS0
sudo fuser -v /dev/ttyS0
シリアルコンソールが有効になっている環境では、HylaFAXと競合する場合があります。先に「OSから見えること」と「ほかのプロセスに取られていないこと」を確認しておくと、後の切り分けが楽になります。
HylaFAXをインストールする
Debianでは、サーバーとクライアントをインストールします。
sudo apt update
sudo apt install hylafax-server hylafax-client
PDFやTIFFの変換を行う場合は、環境に応じてGhostscriptやlibtiff-toolsなども必要になります。
sudo apt install ghostscript libtiff-tools
インストール後、HylaFAX全体の初期設定を実行します。
sudo faxsetup
続いて、モデムを登録します。
sudo faxaddmodem
シリアルポートを聞かれた場合は、今回の環境ではttyS0を指定しました。国番号は81、市外局番は先頭の0を除いた値を設定します。
ME5614D2の基本設定
構築と検証を繰り返した結果、受信を確認できた構成の中心は、Class 1、19,200bps、RTS/CTSフロー制御でした。
公開用に番号を伏せた設定例は次のようになります。
CountryCode: 81
AreaCode: 957
FAXNumber: +81.957.XXXXXX
LongDistancePrefix: 0
InternationalPrefix: 010
DialStringRules: etc/dialrules
RingsBeforeAnswer: 2
LocalIdentifier: Ajisai
ModemType: Class1
ModemRate: 19200
ModemFlowControl: rtscts
ModemResetCmds: AT&F
ModemReadyCmds: AT&K3S92=11
Class1Cmd: AT+FCLASS=1
ModemNoAutoAnswerCmd: ATS0=0
AT&K3はハードウェアフロー制御、S92=11は使用環境で必要になったモデム側設定です。
この値をそのまま別のモデムへ適用するのではなく、モデムの応答と実際の送受信ログを確認して調整する必要があります。
設定ファイルの参照先に注意する
HylaFAXはスプールディレクトリを中心に動作します。Debianのパッケージ構成では、/etc/hylafax/と/var/spool/hylafax/etc/の関係を必ず確認してください。
readlink -f /etc/hylafax
ls -l /etc/hylafax/config.ttyS0
ls -l /var/spool/hylafax/etc/config.ttyS0
編集したファイルと、実際にfaxgettyが参照しているファイルが食い違うと、設定を変更したつもりでも動作が変わりません。
設定反映後はサービスを再起動し、ログ上の初期化コマンドも確認します。
systemdサービスを起動する
今回の環境では、主に次の三つを使用しています。
faxq:送信キューを管理するスケジューラhfaxd:クライアントからの接続を受けるサービスfaxgetty@ttyS0:モデム待受と受信処理
sudo systemctl enable --now faxq.service
sudo systemctl enable --now hfaxd.service
sudo systemctl enable --now faxgetty@ttyS0.service
状態を確認します。
sudo systemctl --no-pager --full status faxq.service
sudo systemctl --no-pager --full status hfaxd.service
sudo systemctl --no-pager --full status faxgetty@ttyS0.service
faxstat -s
正常に待機できたときは、次のように表示されました。
HylaFAX scheduler on debian: Running
Modem ttyS0 (+81.957.XXXXXX): Running and idle
ただし、ここで重要な注意があります。
「Running and idle」は、モデムが初期化され待機していることを示すだけで、実際のFAX通信が最後まで成功する保証ではありません。
私はこの後、着信には応答するのにT.30通信が始まらない問題でかなり時間を使いました。これは次回の記事で詳しく扱います。
HylaFAXクライアントのアクセス制御
WebアプリからHylaFAXへアクセスする場合は、hosts.hfaxdの設定が必要です。
ただし、広いネットワークから無制限に接続できる設定は避け、ローカルホストや必要なユーザーだけに限定します。
ファイルの所有者とモードも確認します。
sudo ls -l /var/spool/hylafax/etc/hosts.hfaxd
HylaFAXのアクセス制御ファイルは、パッケージや実行ユーザーに合わせた適切な所有者と、外部から読めない権限にします。
FAX送信を試す
送信用のPDFを準備し、sendfaxでキューへ登録します。
sendfax -n -m -d 送信先FAX番号 test.pdf
状態はfaxstatで確認できます。
faxstat -s
faxstat -d
送信待ち、送信中、完了、失敗のどこにいるかを確認します。
Webシステムでは、このsendqとdoneqの状態を定期的に同期し、送信待ち・送信済み・送信失敗として表示しています。
受信を試す
別のFAX機からテスト送信し、次の三点を確認します。
- モデムが指定回数で応答する
- HylaFAXが受信セッションを開始する
recvqへTIFFファイルが作成される
ls -lh /var/spool/hylafax/recvq/
tail -f /var/log/syslog
環境によってログの保存場所は異なります。通信ごとの詳細ログは、HylaFAXスプール内のlogディレクトリも確認します。
構築時に先に確認しておくべきこと
- モデムがFAX Class 1またはClass 2系へ切り替わるか
- シリアルポートがほかのサービスに使われていないか
- ハードウェアフロー制御が正しく設定されているか
- 編集した設定ファイルを実際のサービスが参照しているか
- 電話回線側で着信できるか
faxgettyが自動起動するか- 再起動後も同じデバイスで待機できるか
まとめ
HylaFAXのインストール自体は難しくありません。
難しいのは、使用するモデムと電話回線に合わせ、FAX通信が最後まで成立する設定を見つけることです。
今回の環境では、RS-232C接続のME5614D2を/dev/ttyS0へ固定し、Class 1、19,200bps、RTS/CTSを中心とした構成で受信を確認しました。
しかし、faxstat -sが正常でも、実際の着信ではT.30タイムアウトが発生しました。
次回は、「ANSWER: FAX CONNECTION」まで進むのに受信できなかった問題と、ログをどのように切り分けたかを紹介します。
シリーズ内の記事
- 第1回:FAX番号を変えずにFAX業務をDXする――HylaFAXとAIで自社サーバーを作った理由
- 第2回:HylaFAXでFAXサーバーを構築する――Debian 13とOMRON ME5614D2の実践記録
- 第3回:HylaFAXがRunning and idleなのに受信できない――T.30 T1 timeoutの原因を追った記録
- 第4回:HylaFAXの受信FAXをWeb管理する――FaxDispatch、PDF化、メール転送の実装
- 第5回:FAX OCRとAIで送信元判別・全文検索――アドレス帳照合でAPI費用を抑える設計
- 第6回:FAXへタブレットで書き込み、そのまま返信――HylaFAX Webシステムの実装


コメント