コンテキスト
私は現在、ファンもなくヘッドもない古いIntel Atom / ITXコンピュータでインターネットゲートウェイを構築するのに忙しいです。私の要件は次のとおりです。
- ISPのDCHPが提供するipv4およびipv6 IPをインターネット接続インターフェイスに割り当てる
- 私のISPのDHCPからipv6プレフィックスを受け取ります。
- LANに向かって固定プライベートIPv4 IPがあります。
- LAN接続インターフェイスにはIPv4 DHCPサーバーがあります。
<prefix>::1/64
LAN接続インターフェイスでのIPv6 IP設定- DHCPv6 サーバーが提供されます。状態を保存ISPによって提供されたプレフィックス内のアドレスをLANクライアントに割り当てます。
- LAN および WAN インターフェイスで切断および再接続に対応できる必要があります。
- ネットワークデバイスとして機能する必要があります:セキュリティアップデート以外にメンテナンスは必要ありません。
ステートレスDHCPまたはSLAACの代わりにステートフルDHCPv6を使用したいと思います。これは、新しいゲートウェイと半径、およびいくつかの異なる可能性で管理されるDDNSを設定するためです。そのうちのいくつかは、クライアントが終了するIPを決定するために使用されます。続いています。
現在、ipv4ですべてがうまく機能しています。定期的な。ゲートウェイ自体にはフル機能のデュアルスタックインターネット接続があり、ipv4とipv6を介してリソースにアクセスできます。また、ipv4およびipv6用のnetfilterベースのファイアウォールも実装しました。固定プライベートIPv4アドレスと<prefix>::1/64
LAN側アドレスも割り当てました。 DHCPを使用すると、LAN上のクライアントにipv4アドレス、DNS、ドメイン、ゲートウェイなどのすべての情報を提供できます。 ifplugdは、切断と再接続の回復力を提供します。
質問
私ができないのは提供するんだ状態を保存<prefix>::0/64
DHCP を介してクライアントに送信される IPv6 アドレス範囲。私は、dhcpdが設定ファイルに静的ネームサーバー、静的ゲートウェイ、および静的プレフィックスを設定する必要があるという現実に閉じ込められています。しかし、これらすべては、私のISPによって提供されたプレフィックスに基づいて動的に割り当てられます。 dhcpd.confのmanページを何度も見ましたが、動的に割り当てる方法を提供するものは何もありません。dhcpcdがリースデータをバイナリ形式で保存することは役に立ちません。 dhcpcdにリースデータを照会する効果的な方法が見つかったので、これはもはや問題ではありません。
次のステップは、必要なデータクエリをdhcpcdで管理し、適切なフラグを使用してdhcpdを再起動するために作成したいくつかのスクリプト/ systemdデバイスを作成することです(まもなく答えとして追加される予定です)。しかし、迷惑でプラグアンドプレイの設定でいろいろな変なことをするかと心配です。後で問題を解決するためにゲートウェイにSSHを介して接続する必要がある場合...これは失敗したことを意味します。
私の質問:
ここで明らかなものを見逃していますか?それでは、私は何を見逃していますか?マンページとRFC文書の詳細を見るためにさらに48時間を費やしたならば、それは逃したでしょう。- WIDEまたは他のオールインワンDCHPクライアント/サーバーは私の高い目標(半径、サーバー管理DDNSなど)を達成できますか?
リンク - ローカルまたはプライベートIPを他のサブネットのゲートウェイIPとして使用できますか?たとえば、すべてのクライアントがそのサブネットとそのサブネットのIPを持っている場合、そのエントリをはい…しかし、私の問題は完全には解決されません。fd41:2a0d:e8e4:0::1
そのサブネットのルーターオプションとして送信できますか?私の問題では、サーバーのローカルリンクIPを使用することは、グローバルにルーティング可能なIPよりも優れていることを読んでいます。しかし、ゲートウェイIPをサブネット外に設定するという考えは間違っているようです。26AA:A4A4:300:22AF::/64
fd41:2a0d:e8e4:0::/64
ポリスチレン誰かが尋ねる前に、私はwan側でdhclientを使用しようとしましたが(dns / dhcp用のISCツールを使用しています)、同じインターフェースでipv6とipv4を確認したくなく、v6 ipへのクエリを許可しません。そしてv6プレフィックスを同時に使用します。おそらく私のせいかもしれませんが...結果的にあきらめ、代わりにdhcpcdを使用しました。
構成ファイル
radvd.conf:
interface lan {
AdvManagedFlag on;
AdvSendAdvert on;
#AdvAutonomous off;
AdvOtherConfigFlag on;
IgnoreIfMissing on;
AdvDefaultPreference high;
MaxRtrAdvInterval 60;
};
dhcpcd.conf:
hostname
duid
persistent
option rapid_commit
option classless_static_routes
option interface_mtu
require dhcp_server_identifier
noipv6rs
waitip 6
waitip 4
denyinterfaces lan
interface wan
ipv4
ipv6
dhcp
dhcp6
ipv6rs
ia_na 1
#ia_pd 2 lan
ia_pd 2/::/64 lan/0/64
答え1
それで、次のステップはスクリプトを書くことだと言いました。素晴らしい、彼らが来る。
説明すると、私が提案した解決策は2つの主要な部分で構成されています。 dhcpd.conf ファイル用のテンプレートです。必要なデータに対してdhcpcdを照会し、解析し、テンプレートに適用し、結果をとして保存し、/var/local/dhcpd6-lan.conf
dhcpdを再起動して新しい設定を使用するスクリプトもあります。
このスクリプトは dhcpcd の実行フック機能を利用します。デフォルトでは、dhcpcdは、任意の操作(アップストリームからの応答の受信を含む)を実行すると、/etc/dhcpcd.exit-hook
関連するdhcp設定オプションの値に設定されたさまざまな環境変数で実行されます。DELEGATED6
dhcpcdがipv6プレフィックス応答からIPを割り当てたときにトリガーするフックを作成しました。dhcpcd-run-hooksがフックスクリプトのすべてのstderrとstdoutを抑制しているように見えるため、独自のロギングを実装する必要があります。
私はこの解決を好まない。私はそれを許容される解決策としてマークしません。できるだけ頑丈にしようと努力をたくさんしましたが、まだ潜在的な失敗ポイントが多すぎるような感じがします。今は仕事を完了しています。私はまだより良い方法があるべきだと思います。
アップデート - 8ヶ月後:
まあ、私は間違っているようです。私が作成したスクリプトは非常に信頼できることが証明されています。 8ヶ月が過ぎましたが、まったく問題ありません。また、いくつかの潜在的な極端なケースが削除され、さまざまな設定ファイルを更新する機能や現在の状態を追跡するための単純なjsonステータスファイルを含むスクリプトがより強力になりました。現時点で、このソリューションがどれほど安定しており、強力であるかを考えると、この答えを受け入れ続けます。envsubst
今後同様のツールの改善点を見ることもできます。