😎

自作プログラム centrifuge の紹介

2024/05/08に公開

centrifuge の紹介

前回 rdgw を紹介した際にチョロっと使用していた自作プログラム centrifuge を紹介したいと思います。

何をするためのもの?

HTTP のメソッド毎に接続先を変更します。

たとえば、 GET と POST で接続サーバーを変更する際に利用します。

なんの役にも立たないように思えますが、 SSTP や rdgw との接続の振り分けに役立ちます。

最新版では、 TLS 接続のみになりますが、 IP アドレス1つとポート1つを、接続してきたドメイン名で各サーバーに振り分けることが出来ます。

使い方

以下のようにすることで、 TCP 10080番で待ち受け、以下のように振り分けるようになります。

  1. GET メソッドは host2 の 80番
  2. POST メソッドは TLS 接続(verify は行いません)で host3 の 443番
  3. それ以外は host1 の 80番
$ centrifuge -p 0.0.0.0:10080 host1:80 GET:host2:80 POST:host3:443/ssl

また、 Let's encrypt の証明書で TLS 接続(以下の例では "test.example.com" ドメイン)を待ち受けることも出来ます。この際、 TCP 10080番ポートがドメイン所有の確認用に使われます。

$ centrifuge -n test.example.com -p 0.0.0.0:10443/ssl \
  host1:80 GET:host2:80 POST:host3:443/ssl

複数のドメインを1つのポートで待ち受けることも出来ます。

$ centrifuge -n test1.example.com -n test2.example.com -n test3.example.com \
  -p 0.0.0.0:10443/ssl \
  host1:80 GET:host2:80 POST:host3:443/ssl

TLS 接続の場合のみになりますが、各ドメインごとに振り分けることも可能です。該当のドメインが見つからなかった場合には、ドメイン省略時の設定が使用されます。

$ centrifuge -n test1.example.com -n test2.example.com -n test3.example.com \
  -p 0.0.0.0:10443/ssl host1:80 \
  test1.example.com::host4:80 \
  test2.example.com:GET:host2:80 \
  test3.example.com:POST:host3:443/ssl

メソッド名に "GET" と "GE" などが指定されると、一致した最も文字列が長いものが優先されます。

まとめ

本当に紹介するだけになってしまいました。すみません。

ちなみにこのコード、こんな簡単なのに、北極に埋められているんですよね。

Greek Alphabet Software Academy

Discussion