ファイルに手動で触れる必要なく、dhcpd.confファイルにホストを挿入できるコマンドを探しています。
私はCentOSバージョン5.3を使用しています。
ファイルは次のようになります。
subnet 97.129.0.0 netmask 255.255.240.0 {
deny unknown-clients;
range 97.129.2.2 97.129.2.254;
group {
filename "3M-1M-OKS2016NOV.cm";
host client1 {
hardware ethernet 00:04:0d:0c:0f:0a;
}
host client2 {
hardware ethernet a0:be:cd:ea:1d:14;
}
###Block I wanto to insert
host client_i_want_to_insert {
hardware ethernet e3:ee:ed:ea:1d:e4;
}
###########
}}
答え1
特定の文字列処理の質問に答えるには、次のようにします。
sed
以下を使用して行を挿入できます。今後ユースケースに適したファイルの中間の文字列です。したがって、ファイルが次のようになるとします。
サブネット97.129.0.0ネットマスク255.255.240.0 {不明なクライアント拒否、範囲97.129.2.2 97.129.2.254;グループ{ファイル名「3M-1M-OKS2016NOV.cm」;ハードウェアイーサネット00:04:0d:0c:0f:0a; }ホストクライアント2 {ハードウェアイーサネットa0:be:cd:ea:1d:14} ####}}
あなたはできます:
sed -i '/####/i\ \thost client_i_want_to_insert {\n\Hardware Ethernet e3:ee:ed:ea:1d:e4;\n\t}\n' /etc/dhcp/dhcpd.conf
しかし、私は過去に複数のISPケーブルモデムを管理したことがあります。 (私は、その回線がfilename "3M-1M-OKS2016NOV.cm";
ケーブルモデムプロファイルを提供していることを明確に認識しました。)
追加したいいくつかの提案があります。
- Having a host definition spanning several lines is not practical. Over time the DHCP file will become unwieldy. For scripting it is
行を挿入または削除する方が難しいです。次のように1行だけを実行することをお勧めします。
host client2 { hardware ethernet a0:be:cd:ea:1d:14; }
- The names of hostnames also have to be unique. Either you increment them, or use your customer code *if* a numeric code.
- an alternative, when incrementing the host part, is putting a comment with the customer code *after* the host definition. As an
追加の利点は、いくつかの構成エラーを手動で修正したり、迅速な介入を実行する必要がある場合にファイルを操作する方が簡単であることです。
host client2 { hardware ethernet a0:be:cd:ea:1d:14; } #_cus234XP_
したがって、顧客を削除するときは、1行のテキストを処理するには、または必要にgrep -v
なりますsed
。
また、ISC DHCPを使用してinclude
ファイルを生成できます。構成ファイルの途中に行を挿入する必要がないように、次のようにします。
subnet 97.129.0.0 netmask 255.255.240.0 {
deny unknown-clients;
range 97.129.2.2 97.129.2.254;
group {
filename "3M-1M-OKS2016NOV.cm";
include "customers";
}}
その後、クライアントファイルは次のようになります。
host client1 { hardware ethernet 00:04:0d:0c:0f:0a; } #_cus234XP_
host client2 { hardware ethernet a0:be:cd:ea:1d:14; } #_cus235XZ_
したがって、新しいCM /顧客をファイルの末尾に追加すると、少なくとも新しい顧客を追加するときにsed
/を処理する必要はありません。awk
さらに、CMモデム/クライアントのDHCP構成を実装するために他の可能な解決策を検討することをお勧めします。
私は長年にわたりISC DHCPテキストファイルを処理するための設定ソフトウェアを作成してきました。このプロセスにはいくつかの制限があります。
- Each time a new item is removed/inserted, the service has to be restarted;
- If by chance you duplicate an host, the service won't restart;
- Any kind of parsing has to be done in text mode, or done in ancillary/duplicate methods;
- If some auxiliary housekeeping is done by hand, it is prone to errors.
docsis_server
それから、それはオープンソースミドルウェアの供給でケーブルテレビ業界向けに特別に開発されたLinux用MySQLベースの「ハッキングされた」ISC DHCPであることを発見しました。私はその上に設定ソフトウェア/ウェブフロントエンドを書くようになりました。 (テキストファイルの代わりに)MySQLクエリを処理してDHCPサービスと直接対話できることは大きな利点です。
残念ながら、プロジェクトはもはや維持されないようです。https://github.com/bschirrmeister/docsis_server
現在、ISCのDHCP用Keaプロジェクトもあるので、見てみる価値があります。その上に供給ソリューションを開発することは非常に興味深いようです。https://kea.isc.org
Keaは、DHCPv4、DHCPv6サーバー、動的DNSデーモン、REST APIインターフェイス、MySQL、PostgreSQLおよびCassandraデータベース、RADIUSおよびNETCONFインターフェイス、および関連ユーティリティを含むオープンソースソフトウェアシステムです。
最後に、通常、ケーブルモデム制御ネットワークは10.xxxの範囲のプライベートIPアドレス空間です。使用しているケーブルモデムにパブリックIPアドレス(97.129.2.xなど)を提供する必要はありません。
PS AFAIK、私が書いた構成ソリューションはdocsis_server
10年間生産されました。
答え2
奇妙なソリューション
awk '/}}/{$0="\thost client3 {\n\t\thardware ethernet a:b:c;\n\t}\n"$0}1' file