コード:/etc/systemd/system/socat.service
[Unit]
Description="socat systemd"
[Service]
Type=simple
Restart=on-failure
RestartSec=10
User=ubuntu
ExecStart = /usr/bin/socat tcp-listen:1111,reuseaddr,fork tcp:localhost:5555
[Install]
WantedBy=multi-user.target
今、私は次を渡したいと思います。
public_ip:1111 to localhost:5555
public_ip:2222 to localhost:6666
public_ip:3333 to localhost:7777
単一のsocat.serviceファイルでこれらすべての転送を実行する形式は何ですか?これを実行できない場合は、bashファイルに複数のsocatステートメントを作成してExecStartに入れることができますか?
答え1
ExecStart
シェルで複数のコマンドを実行して順次実行できます。
ExecStart=sh -c '/usr/bin/socat tcp-listen:1111,reuseaddr,fork tcp:localhost:5555; /usr/bin/socat tcp-listen:2222,reuseaddr,fork tcp:localhost:6666;/usr/bin/socat tcp-listen:3333,reuseaddr tcp:localhost:7777'
- これらのいくつかのコマンドをシェルスクリプトに入れ、ここにshebang行を追加し、実行可能としてマークし、に入れてから、次のスクリプト
/usr/bin/mysocatscript.sh
を使用できますExecStart
。
ExecStart=/usr/bin/mysocatscript.sh
これはすでに1よりも優れています。そのうちの1つが失敗した場合は、中断するスクリプトを作成したり、追加情報を提供したりする可能性があるためです。
- ひとつ使うテンプレート単位ファイル、つまりで終わるユニットファイルを
@.service
と呼びます。その後、パラメータを渡すことができます。/usr/lib/systemd/systenm/[email protected]
%i
[Unit]
Description="socat single forwarding"
[Service]
Type=simple
Restart=on-failure
RestartSec=10
ExecStart=/bin/bash -c "inport=$(echo %i | cut -d: -f1); outport=$(echo %i | cut -d: -f2); /usr/bin/socat tcp-listen:${inport},reuseaddr tcp:localhost:${outport}"
socat-forward@port_in:port_out
これで、単に実行してsocat転送を設定できますsystemctl start socat-forward@1111:5555
。
その後、ユニットファイルを作成できますsocat-connections.service
。
[Unit]
Description="socat custom forwardings"
[Service]
Type=simple
Restart=on-failure
RestartSec=60
Requires=socat-forward@1111:5555 socat-forward@2222:6666 socat-forward@3333:7777
[Install]
WantedBy=multi-user.target
明らかに3.これは「ベスト」オプションです。
- 実際に再利用可能で構成可能なサービスを得ることができます。
- 必要に応じて個々のリツイートを昇降することができます。
- 3つのsocat呼び出しのいずれかが失敗すると、その呼び出しのみが再開され、失敗として報告されます。したがって、
systemctl status
実際にどの配信が機能しないかをお知らせします! - サービスを使用して転送セットを設定および削除できます。
- 実際には、必要な転送のみが設定されるように、転送に依存する項目(開発Webサーバー、SSHサーバーなど)をポート転送に依存させることができます。
コメント
ubuntu
プログラムを実行しているユーザーが代わりにまたはnobody
デーモンユーザーである場合、これは実際にはシステムを必要とせず、むしろユーザーサービスが必要であることを示します。- 以前に構築されたネットワークによって異なる可能性が高いです。
- これは実際にユースケースですか
socat
?私が見るには、仮面舞踏会/ NATは同じことをしますが、CPU使用率は低いです。