원격 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
두 개의 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을 사용하는 것입니다.