Iptables-restoreをsystemd.serviceスクリプトで呼び出しようとしています。 DNSルックアップを必要とするいくつかの規則があります。ファイアウォールのUnit = BIND9.Serviceを含めました。ただし、SystemDは、フォークが発生したときにBIND9が起動されていると考えています。ホスト名を解決する前にiptables-restoreからキックオフして失敗します。これがsyslogの関連セクションです。
[。] DeaS 13 21:29:02 FW SystemD [1]:スタートバインドドメインネームサーバー。[。] DECH 13 21:29:02 FW SystemD [1]:ターゲットホストとネットワーク名検索に達しました。 [。] DeaS 13 21:29:02 FW SystemD [1]:ロードイプラブルのルールのルール... [。] Dech 13 21:29:02 FW SystemD [1]:Homebridge Homekit Bridgeを開始。[。 ____ 13 21:29:02 FW SystemD [1]:OpenBSD Secure Shell Server ... [。] Deav 13 21:29:02 FW SH [1841]:Iptables - Restore v1.6.0:ホスト/ネットワーク `example.comが見つかりません Deav 13 21:29:02 FW SH [1841]:24行目:24 [。] Dec 13 21:29:02 FW Sh [1841] :詳細については、 `iptables-restore -h 'または' iptables - restore --help 'を試してください。[。] DeaS [1838]:Bind 9.10.3-P4-Ubuntu < ID:EBD72B3> -F -4 -U BIND [。]。
これがサービスファイルです。
[。] [単位] [。]説明= iptablesのルール[。] = BIND9.Service [。] [。] [インストール] [。] [。] [。] [。]。 user.target [。] [。] [。] [。] [サービス] [。] [。] [。] type = oneshot [。] welwafterexit =はい[。] execstart =/bin/sh -c "/ sbin/iptables - 復元</etc/iptables.up.rules"[.___)。
Iptables-restoreコマンドを起動時に実行する最善の方法は何ですか。
ただし、SystemDはフォークが発生したときにBIND9が起動されていると考えています。
Systemdには、名前が付けられたときに「リクエストを提供する準備ができて」されていることを知っています。一般的に受け入れられているプロトコルは、SysVinit日に戻る、デーモンフォークがすべてを設定し、一度準備ができると、その親が終了する可能性があることを(通常はパイプまたは信号を介して)登場します。これはシンプルで、「init」が単なるシェルスクリプトである場合でも機能します。named; echo Ready!
(言い換えれば、SystemDは初期プロセスについてのすべてを気にしませんフォーキングその子、しかし、それがいついつ出口)
他に可能なプロトコルもあります。 TYPE = NOTIFYが使用されている場合、デーモンはREADY = 1メッセージを送信すると予想されます。 type = dbusでは、システムバス上の名前を請求する必要があります。 NS。
ただし、名前付きがこのプロトコルを正しく実装していない場合 - その初期プロセスがフォークしてから早く終了した場合 - その後initができることは何もありません。それはそれに嘘をついているデーモンに対処するのはinitの仕事ではありません(無能またはそうでなければ)。
と言ったことは、最初のことがbind9.service
が実際にどのように機能するかを確認することです。それはまだそれが直接名付けられていないのではなく、init.dスクリプトのレイヤーを通じて実行されないことであり、それは同様の問題を引き起こす傾向があります。 (ログには典型的な "lsb:..."プレフィックスが表示されますが、とにかくチェックする。)
それはも bind9.serviceがtype = simpleに変更されました。これはサポートされていませんanyまったく 'Ready'通知の種類!これはまた、メンテナが盲目的に盲目的に拾うと、いくつかのウェブサイトから「戦闘は邪悪であると言う」と頻繁に起こります。
そのため、bind9.serviceが実際にtype = forking(type = simple)とそれが実行されていることを確認し、それが直接指定されていることを実行します(そして必要な "オプションをデーモン化してください)。
それでもうまくいかない場合(すなわち、早すぎると早すぎると早すぎる)、他の唯一のオプションは、DNSの可用性のチェックを保持するサービスをsecondサービスにすることです。