- systemd だけを使って、多段プロキシやリバースプロキシを作る
- 用途はいろいろあるけど、深く突っ込んじゃイケない
背景
ユースケースはあえて挙げないけど、多段プロキシできるフォワードプロキシとか、一時的なリバースプロキシなど、便利なプロキシサーバが時たま必要になる。
Squidやnginxなどの汎用のものから、Poundやdelegateなどの専用のものまでいろいろな方法があるけども、諸事情*1でこれらが使えない時もある。
そんな時には systemd が使える。systemd は Linux の比較的新しい*2 init システムだが、 init とは思えないほど多機能*3で、実はプロキシサーバが作れてしまう。その手順をまとめる。
検証環境
systemd でプロキシサーバを作る
socket ファイル
まず、リクエストを受け付けるための socket のユニットファイルを用意する。
ListenStream
にリクエストを待ち受けるインタフェースのIPアドレスとポート番号を指定する。
$ sudo vim /etc/systemd/system/proxy.socket [Unit] Description=HTTP Proxy Socket [Socket] ListenStream=0.0.0.0:80
service ファイル
次に、実際にリクエストを経由する service のユニットファイルを用意する。
ExecStart
でsystemd-socket-proxyd
のパスを指定し、第一引数に転送先(多段プロキシなら次のプロキシサーバ、リバースプロキシなら内側のWebサーバ)のIPアドレスとポート番号を指定する。
注意点としては、2つのユニットファイル名はそろえておかないとダメ。(今回は proxy
)
$ sudo vim /etc/systemd/system/proxy.service [Unit] Description=HTTP Proxy Service [Service] ExecStart=/usr/lib/systemd/systemd-socket-proxyd 192.168.1.1:5963 PrivateTmp=yes
起動
後はお約束。
systemdをリフレッシュして、
$ sudo systemctl daemon-reload
socketを起動して、
$ sudo systemctl start proxy.socket
うまくいっているようなら、永続化する。
$ sudo systemctl enable proxy.socket
まとめ
- systemd 単体で多段プロキシもしくはリバースプロキシとして使える、プロキシサーバを構築した