LoginSignup
7

More than 5 years have passed since last update.

systemd と netcat で簡易中継サーバを作る

Posted at

下記の systemd を使った版です。

下記のように systemd-socket-proxyd を使えば簡単にできますが、あえて netcat でやってみました。


.socketファイルと.serviceファイルを作ります。

/etc/systemd/system/http-proxy.socket

[Socket]
ListenStream = 0.0.0.0:80
Accept = yes

/etc/systemd/system/http-proxy@.service

[Service]
ExecStart = /usr/bin/nc -w 5 192.0.2.123 80
StandardInput = socket
StandardOutput = socket
StandardError = journal

daemon-reload して .socket の方を起動します。

sudo systemctl daemon-reload
sudo systemctl start http-proxy.socket

あとはアクセスするだけ。

ポイントは次のとおりです。

  • socket では Accept = yes を指定する
    • デフォルトの No だとサービスにはリッスンソケットが渡されるだけになる
    • Yes にすれば systemd が accept したソケットがサービスに渡される
  • service はテンプレートユニットにする
    • Accept = yes の場合はそうしなければならない
    • 接続ごとのサービスになるから
  • StandardInput/StandardOutput に socket に指定する
    • systemd が accept したソケットが標準入出力に設定される
    • StandardError に journal を指定しているけど何もしなければ StandardOutput と同じになる

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7