コメント

コメント

コード:/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

  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'
  1. これらのいくつかのコマンドをシェルスクリプトに入れ、ここにshebang行を追加し、実行可能としてマークし、に入れてから、次のスクリプト/usr/bin/mysocatscript.shを使用できますExecStart
ExecStart=/usr/bin/mysocatscript.sh

これはすでに1よりも優れています。そのうちの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使用率は低いです。

おすすめ記事