リモートのWindowsホストが次のようであると仮定し、LinuxサーバーからMicrosoftリモートデスクトップを転送したいと思います。以下を192.168.1.100
実行したいと思います。
socat TCP4-LISTEN:3389,fork TCP4:192.168.1.100:3389
socat UDP4-LISTEN:3389,fork UDP4:192.168.1.100:3389
シェルでサービスを手動で開始すると正常に動作しますが、を使用してサービスを開始してsystemd
ログインしようとします/var/log/socat-rdp.log
。
数回の実験の終わりに、次のようにサービスを実行できました。
[Unit]
Description=Socat RDP Forwarding Service
After=network.target
[Service]
Type=forking
User=root
ExecStart=/bin/sh -c "/usr/bin/socat TCP4-LISTEN:3389,fork TCP4:192.168.3.153:3389 > /var/log/socat-rdp.log 2>&1 & /usr/bin/socat UDP4-LISTEN:3389,fork UDP4:192.168.3.153:3389 > /var/log/socat-rdp.log 2>&1 &"
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
この設定は正常に開始され実行されますが、サービスを停止するとプロセスは正常に終了しますが、systemctl stop socat-rdp
エラーコード1が返されます。socat
より良い解決策はありますか?
答え1
複数のsocatインスタンスを実行し、TCPおよびUDPトラフィックを転送する問題の代替ソリューションを見つけました。 systemdを使用してサービスを管理するのではなく、Dockerを使用して目的の結果を得ました。
Dockerイメージを見つけ、Docker Composeを使用してalpine/socat
2つのTCPとUDPインスタンスを同時に実行しました。socat
これは私のDocker Composeファイルです。
---
services:
socat_rdp_tcp:
image: alpine/socat
container_name: socat_rdp_tcp
command: "TCP-LISTEN:3389,fork TCP:192.168.1.100:3389"
ports:
- 3389:3389
socat_rdp_udp:
image: alpine/socat
container_name: socat_rdp_udp
command: "UDP-LISTEN:3389,fork UDP:192.168.1.100:3389"
ports:
- 3389:3389/udp
ドッカー画像: アルパイン/ソキャット
答え2
ターミナルで直接socatコマンドを実行して終了するとき(killall socat?)、与えられたコードはExit 143ですか?最も簡単なダーティ核は、[サービス]でSuccessExitStatus = 143を使用することです。