INDEX
OpenBSD リレーサーバ (relayd on OpenBSD 7.5)
OpenBSD の リレーサーバ relayd を動かす。
relayd は、OpenBSD に組み込まれている接続のリレー・リダイレクトをするデーモン。レイヤー 3 および 7 で動き、主に、ロードバランサや透過プロキシ、アプリケーション レイヤー ゲートウェイ として動かすことができる。
レイヤー 3 リダイレクトは、パケットレベルで行われ、pf(4) と通信して relayd が処理される。
レイヤー 7 リレーは、アプリケーション レベルで行われ、relayd 自体によって処理される。
- 関連 man → relayd(8), relayd.conf(5), relayctl(8)
- 関連 man → pf(4), pf.conf(5)
relayd の起動設定
単独起動
relayd.conf を修正して、 relayd -n で設定ファイルのチェックができる。
サーバの起動は relayd -d で起動する。
自動起動
サーバが起動したときに relayd も実行されるように、 /etc/rc.conf.local に relayd_flags を指定する。
# relayd server relayd_flags=
または、rcctl enable relayd で有効にする( /etc/rc.conf.local に relayd_flags= が記載される)。
制御
relayctl コマンドで relayd の状態確認や制御ができる。
# relayctl show summary Id Type Name Avlblty Status 1 relay https active 1 table web_hosts:8080 active (1 hosts) 1 host 127.0.0.1 50.00% up 2 host 172.0.0.2 0.00% down 2 relay https6 active 2 table web_hosts:8080 active (1 hosts) 3 host 127.0.0.1 50.00% up 4 host 172.0.0.2 0.00% down
relayd の設定
/etc/relayd.conf に設定する。サンプルが /etc/examples/relayd.conf にある。
が、やりたいことができなかったので放置…(http protocol で、未知のメソッドが使えない。フィルタルールで method に決められたもの以外指定できない。header や path などを指定してる場合も決められたメソッドの要求以外でエラーになる)
レイヤー 3 リダイレクト の pf 設定
レイヤー 3 の リダイレクト は、パケットレベルで行われ、pf(4) と通信して処理される。そのため、relayd が pf(4) ルールを適切に設定できるようにするために pf.conf(5) のフィルター セクションに次の行が必要になる。
anchor "relayd/*"
SSLオフロード・ロードバランサ
SSLアクセラレーター/SSLオフロード と ロードバランサ っぽい設定
# $OpenBSD: relayd.conf,v 0.00 2024/01/01 00:00:00 xxxxx Exp $
## Macros
## Tables
table <web_hosts> { 127.0.0.1 }
## Global Options
interval 10
## Protocols & Relays
http protocol https {
tls keypair example.com
tls keypair example.net
}
relay https {
listen on 0.0.0.0 port 1443 tls
protocol https
forward to <web_hosts> port 8080 mode loadbalance check http "/" code 200
}
relay https6 {
listen on :: port 1443 tls
protocol https
forward to <web_hosts> port 8080 mode loadbalance check http "/" code 200
}
table の web_hosts で、対象のWEBホストを指定する。
tls keypair で、TSLの証明書と秘密鍵ファイルを指定する。"tls keypair example.com" とすることで、/etc/ssl/example.com.crt と /etc/ssl/private/example.com.key が読み込まれる。
listen on は、1つしか書けない?例えば、IPv4 と IPv6 で待ち受けるにも、IPv4 の 0.0.0.0 と IPv6 の :: の設定をそれぞれ必要になる。(同じ relay のブロック内に書いたらエラーになった)
check 〜 でヘルスチェックがされる。
セッション維持ってどうするんだろう…mode loadbalance で送信元IPアドレスなどで分散。mode random はアクティブなホストにランダムで分散(未指定の場合も同様)。
最終更新時間:2024年12月21日 11時28分16秒 指摘や意見などあればSandBoxのBBSへ。