ツールボックスに高度なシステム管理ツールが必要なら、これが最適です。socat は、ある場所から別の場所への双方向データ転送を可能にします。

socat ユーティリティは、2 つの独立したデータチャネル間で双方向データ転送を行うためのリレーです。

socat が接続できるチャネルには、次のような多くの種類があります:

  • ファイル
  • パイプ
  • デバイス (シリアルライン、疑似ターミナルなど)
  • ソケット (UNIX、IP4、IP6 - raw、UDP、TCP)
  • SSL ソケット
  • プロキシ CONNECT 接続
  • ファイル記述子 (stdin など)
  • GNU ラインエディタ (readline)
  • プログラム
  • これら 2 つの組み合わせ

このツールは netcat の高度なバージョンと見なされています。これらは同様の機能を持ちますが、socat はポートで複数のクライアントをリスンしたり、接続を再利用したりするなど、より多くの追加機能を備えています。

socat が必要な理由

socat を効果的に使用する方法はたくさんあります。以下にいくつかの例を挙げます:

  • TCP ポートフォワーダー (ワンショットまたはデーモン)
  • 外部 Socksifier
  • 弱いファイアウォールを攻撃するツール (セキュリティおよび監査)
  • Unix ソケットへのシェルインターフェイス
  • IP6 リレー
  • TCP 指向のプログラムをシリアルラインにリダイレクト
  • 異なるコンピュータ上のシリアルラインを論理的に接続
  • ネットワーク接続を使用してクライアントまたはサーバーのシェルスクリプトを実行するための、比較的安全な環境 (su および chroot) の構築

[ 今すぐダウンロード: 自動化に関するシステム管理者ガイド ]

socat の使用方法

socat の構文は非常にシンプルです:

socat [options] <address> <address>

動作させるには、送信元と送信先のアドレスを指定する必要があります。これらのアドレスの構文は次のとおりです:

protocol:ip:port

socat の使用例

さまざまな接続に socat を使用する基本的な例から始めましょう。

1. ローカルまたはリモートシステムの TCP ポート 80 に接続する:

# socat - TCP4:www.example.com:80

この場合、socat は STDIO (-) と、www.example.com というホストのポート 80 への TCP4 接続の間でデータを転送します。

2. socat を TCP ポートフォワーダーとして使用する:

単一の接続の場合は、次のように入力します:

# socat TCP4-LISTEN:81 TCP4:192.168.1.10:80

複数の接続の場合は、以下の例のように fork オプションを使用します:

# socat TCP4-LISTEN:81,fork,reuseaddr TCP4:192.168.1.10:80

この例では、ポート 81 でリスンして接続を受け入れ、その接続をリモートホストのポート 80 に転送します。

# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock 

上記の例では、ポート 3307 でリスンして接続を受け入れ、その接続をリモートホストの Unix ソケットに転送します。

[ Linux 環境を管理して成功を収める方法については、こちらをご覧ください。 ]

3. シンプルなネットワークベースのメッセージコレクターを実装する:

# socat -u TCP4-LISTEN:3334,reuseaddr,fork OPEN:/tmp/test.log,creat,append

この例では、クライアントがポート 3334 に接続すると、新しい子プロセスが生成されます。クライアントから送信されたすべてのデータは、ファイル /tmp/test.log に追記されます。ファイルが存在しない場合、socat がそれを作成します。reuseaddr オプションにより、サーバープロセスを即座に再起動できます。

4. ローカルネットワークにブロードキャストを送信する:

# socat - UDP4-DATAGRAM:224.255.0.1:6666,bind=:6666,ip-add-membership=224.255.0.1:eth0

この場合、socat は stdin から、ローカル接続とリモート接続の両方でポート 6666 を使用する UDP を介して、指定されたマルチキャストアドレスにデータを転送します。また、このコマンドはインターフェイス eth0 に対し、指定されたグループのマルチキャストパケットを受け入れるように指示します。

socat の実用的な用途

socat はトラブルシューティングに最適なツールです。また、リモート接続を簡単に作成するのにも便利です。実際、私はリモート MySQL 接続に socat を使用したことがあります。以下の例では、ローカルソケットを介して接続することで、Web アプリケーションをリモート MySQL サーバーに接続する方法を示します。

1. リモート MySQL サーバーで、次のように入力します:

# socat TCP-LISTEN:3307,reuseaddr,fork UNIX-CONNECT:/var/lib/mysql/mysql.sock &

このコマンドは socat を起動し、ポート 3307 を使用してリスンするように設定します。

2. Web サーバーで、次のように入力します:

# socat UNIX-LISTEN:/var/lib/mysql/mysql.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 TCP:192.168.100.5:3307 &

上記のコマンドは、ポート 3307 を使用してリモートサーバー 192.168.100.5 に接続します。

ただし、すべての通信は Unix ソケット /var/lib/mysql/mysql.sock で行われるため、ローカルサーバーであるかのように見えます。

まとめ

socat は高度なユーティリティであり、あらゆるシステム管理者にとって業務の遂行やトラブルシューティングに役立つ優れたツールです。socat の使用例の詳細については、こちらのリンク先を参照してください。

[ 無料オンラインコース: Red Hat Enterprise Linux 技術概要 ]


執筆者紹介

I work as Unix/Linux Administrator with a passion for high availability systems and clusters. I am a student of performance and optimization of systems and DevOps. I have passion for anything IT related and most importantly automation, high availability, and security.

UI_Icon-Red_Hat-Close-A-Black-RGB

チャンネル別に見る

automation icon

自動化

テクノロジー、チームおよび環境に関する IT 自動化の最新情報

AI icon

AI (人工知能)

お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート

open hybrid cloud icon

オープン・ハイブリッドクラウド

ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。

security icon

セキュリティ

環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報

edge icon

エッジコンピューティング

エッジでの運用を単純化するプラットフォームのアップデート

Infrastructure icon

インフラストラクチャ

世界有数のエンタープライズ向け Linux プラットフォームの最新情報

application development icon

アプリケーション

アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細

Virtualization icon

仮想化

オンプレミスまたは複数クラウドでのワークロードに対応するエンタープライズ仮想化の将来についてご覧ください