논평

논평

코드:/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. 너 하나 써라템플릿 단위 파일, 즉 로 끝나는 유닛 파일을 @.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실제로 어떤 전달이 작동하지 않는지 알려드립니다!
  • 서비스를 통해 전달 세트를 설정하고 삭제할 수 있으며,
  • 실제로 필요한 전달만 설정되도록 전달에 의존하는 항목(예: 개발 웹 서버, SSH 서버 등)을 포트 전달에 의존하도록 만들 수 있습니다.

논평

  • ubuntu프로그램을 실행하는 사용자가 대신 nobody또는 데몬 사용자인 경우 이는 실제로 시스템이 필요하지 않고 오히려 사용자 서비스가 필요함을 나타낼 수 있습니다.
  • 이전에 구축된 네트워크에 따라 달라질 가능성이 높습니다.
  • 이것이 실제로 사용 사례입니까 socat? 제가 보기에는 가장 무도회/NAT가 동일한 작업을 수행하지만 CPU 사용량은 더 낮습니다.

관련 정보