EN JA
PFSYNC(4)
PFSYNC(4) FreeBSD Kernel Interfaces Manual PFSYNC(4)

名称

pfsyncパケットフィルタ状態テーブル同期インタフェース

書式

device pfsync

解説

pfsync インタフェースは、 pf(4) によって使用された状態テーブルへの特定の変更を顕在化する疑似デバイスです。 pfsync インタフェースで tcpdump(1) を呼び出すことによって、状態の変更を見ることができます。物理的な同期インタフェースで設定されなら、 pfsync は、また、そのインタフェースで状態の変更を送信し、他のシステムからそのインタフェースで受信された状態の変更を状態テーブルに挿入します。

デフォルトでは、状態テーブルへのすべてのローカルの変更は、 pfsync を通して顕在化されます。ネットワーク上で pfsync によって受信されたパケットからの状態の変更は、再ブロードキャスト (同報通信) されません。 no-sync キーワードでマークされた規則によって作成された状態への更新は、 pfsync インタフェース (詳細については、 pf.conf(5) を参照してください) によって無視されます。

pfsync インタフェースは、可能であれば、複数の状態の更新を単一のパケットに折りたたむことを試みます。 pfsync パケットを送出する前に、単一の状態を更新できる最大の回数は、ifconfig への maxupd パラメータによって制御されます (詳細については、 ifconfig(8) と下記の例を参照してください)。 pfsync パケットのからの送出は、最大 1 秒遅延されます。

ネットワーク同期化

状態は、 ifconfig(8) を使用する同期インタフェースを指定することによって、このインタフェースを使用する 2 つ以上のファイアウォールの間で同期することができます。例えば、次のコマンドは、同期インタフェースとして fxp0 を設定します:

# ifconfig pfsync0 syncdev fxp0

デフォルトで、状態変更メッセージは、IP マルチキャストパケットを使用して同期インタフェースで 244.0.0.240 グループアドレスに送出されます。 syncpeer キーワードを使用して pfsync パケットのための代替の宛先アドレスを指定することができます。同期トラフィックを保護するために ipsec(4) と組み合わせて、これを使用することができます。そのような設定では、syncdev は、例えば、非カプセル化されたときに、トラフィックが到着するところであるで、 enc(4) インタフェースに設定されるべきです:

# ifconfig pfsync0 syncpeer 10.0.0.2 syncdev enc0

プロトコルに認証がないので、pfsync トラフィックが十分に保証することは重要です、そして、pf ルールセットを迂回させて、状態を作成するなりすましパケットを取るに足らないものとします。信頼性のあるネットワークで pfsync プロトコルをいずれかの実行します- 2 つのファイアウォールの間の交差したケーブルのような pfsync メッセージのために設けられる理想的なネットワーク、または、ピアアドレスを指定いし、そして、 ipsec(4) でトラフィックを保護します。

pfsync には、次の sysctl(8) 調整変数があります:

net.pfsync.carp_demotion_factor
pfsync が、その大量の更新を実行しようとしている間に、 net.inet.carp.demotion に追加される値。詳細については、 carp(4) を参照してください。デフォルト値は、240 です。

使用例

pfsynccarp(4) は、パラレルに設定された 1 組のファイアウォールの自動フェイルオーバを提供するために統合して使用することができます。 1 つのファイアウォールが死ぬか、シャットダウンされるか、または手動で降格されるまで、そのファイアウォールは、すべてのトラフィックを扱います。それが死ぬか、シャットダウンされるか、または手動で降格される時点で、 2 番目のファイアウォールが自動的に引き継ぎます。

この例の両方のファイアウォールには、3 つの sis(4) インタフェースがあります。 sis0 は、10.0.0.0/24 サブネットで、外部のインタフェースで、 sis1 は、192.168.0.0/24 サブネットで、内部のインタフェースで、そして sis2 は、192.168.254.0/24 サブネットを使用する pfsync インタフェースです。交差したケーブルは、それらの sis2 インタフェースを通して 2 つのファイアウォールを接続します。すべての 3 つのインタフェースでは、ファイアウォール A は、.254 アドレスを使用し、一方ファイアウォール B は、.253 を使用します。インタフェースは、次のように設定されます (別の方法で示されないならファイアウォール A):

/etc/rc.conf でのインタフェース設定:

network_interfaces="lo0 sis0 sis1 sis2" 
ifconfig_sis0="10.0.0.254/24" 
ifconfig_sis0_alias0="inet 10.0.0.1/24 vhid 1 pass foo" 
ifconfig_sis1="192.168.0.254/24" 
ifconfig_sis1_alias0="inet 192.168.0.1/24 vhid 2 pass bar" 
ifconfig_sis2="192.168.254.254/24" 
pfsync_enable="YES" 
pfsync_syncdev="sis2"

また、 pf(4) は、 pfsynccarp(4) トラフィックの通ることを許すように設定しなければなりません。次は、 /etc/pf.conf の先頭に追加されるべきです:

pass quick on { sis2 } proto pfsync keep state (no-sync) 
pass on { sis0 sis1 } proto carp keep state (no-sync)

1 つのファイアウォールがすべてのトラフィックを転送するのが望ましいく、そのため、バックアップファイアウォールの carp(4) vhid の advskew は、プライマリのものより高いものに設定するべきです。例えば、ファイアウォール B がバックアップであるなら、 carp1 設定は、次のようになるでしょう:

ifconfig_sis1_alias0="inet 192.168.0.1/24 vhid 2 pass bar advskew 100"

また、次を /etc/sysctl.conf に追加しなければなりません:

net.inet.carp.preempt=1

歴史

pfsync デバイスは、 OpenBSD 3.3 ではじめて登場しました。それは、 FreeBSD 5.3 ではじめて取り込まれました。

pfsync プロトコルとカーネルの実装は、 FreeBSD 9.0 でかなり変更されました。より新しいプロトコルは、より古いものと互換性がなく、それと同時に使用されません。

December 20, 2011 FreeBSD