STDISCOSRV(1) Syncthing STDISCOSRV(1)

stdiscosrv - سرور اکتشاف همتایان Syncthing

stdiscosrv [--debug] [--http] [--compression] [--version]
           [--cert=<file>] [--key=<string>]
           [--listen=<address>] [--metrics-listen=<address>]
           [--db-dir=<string>] [--db-flush-interval=<string>]

برنامهٔ Syncthing برای یافتن همتایان (peers) در اینترنت به یک سرور اکتشاف متکی است. هر کاربری می‌تواند یک سرور اکتشاف را راه‌اندازی کرده و نسخه‌های نصب‌شدهٔ Syncthing را به سمت آن هدایت کند. پروژهٔ Syncthing همچنین یک کلاستر سراسری را برای استفادهٔ عموم نگهداری می‌کند.

فعال‌سازی خروجی اشکال‌زدایی (دیباگ).
شنود روی پروتکل HTTP (پشت یک پراکسی HTTPS).
چاپ شمارهٔ نسخهٔ فعلی و خروج.
فعال‌سازی فشرده‌سازی GZIP برای پاسخ‌های HTTP.
فایل گواهی (پیش‌فرض «./cert.pem»). در حالت --http استفاده نمی‌شود.
فایل کلید (پیش‌فرض «./key.pem»). در حالت --http استفاده نمی‌شود.
آدرس شنود (پیش‌فرض «:8443»).
آدرس شنود برای نقطهٔ پایانی معیارهای سازگار با Prometheus (پیش‌فرض غیرفعال).
دایرکتوری پایگاه داده، جایی که داده‌ها در آن ذخیره می‌شوند (پیش‌فرض «.»).
بازهٔ زمانی تخلیهٔ داده‌های پایگاه دادهٔ درون‌حافظه‌ای روی دیسک (پیش‌فرض «5m»).

به‌طور پیش‌فرض، Syncthing از تعدادی سرور اکتشاف سراسری استفاده می‌کند که با مدخل default در فهرست سرورهای اکتشاف مشخص شده‌اند. برای اینکه Syncthing را به استفاده از نمونهٔ stdiscosrv اختصاصی خود وادارید، واسط گرافیکی وب Syncthing را باز کنید. به بخش تنظیمات (settings)، سرور اکتشاف سراسری (Global Discovery Server) بروید و آدرس میزبان stdiscosrv را به فهرست مقادیر جداشده با کاما اضافه کنید؛ مانند: https://disco.example.com:8443/. توجه داشته باشید که stdiscosrv به‌طور پیش‌فرض از درگاه 8443 استفاده می‌کند. برای اینکه stdiscosrv با یک آدرس IP پویا در اینترنت در دسترس باشد، به یک سرویس Dynamic DNS نیاز خواهید داشت.

منسوخ‌شده از نسخهٔ v0.14.44: نسخه‌های قبلی نیاز به افزودن عبارت /v2/ به انتهای آدرس سرور اکتشاف دارند، مانند https://disco.example.com:8443/v2/.

اگر مایلید تنها از سرور اکتشاف اختصاصی خود استفاده کنید، ورودی default را از این فهرست حذف کنید.

این راهنما فرض می‌کند که شما پیش‌تر Syncthing را راه‌اندازی کرده‌اید. اگر هنوز این کار را انجام نداده‌اید، ابتدا به بخش شروع به کار مراجعه کنید.

به بخش انتشارها <https://github.com/syncthing/discosrv/releases> رفته و فایل مناسب سیستم‌عامل خود را بارگیری کنید. استخراج آن یک فایل باینری اجرایی به نام stdiscosrv (یا در ویندوز stdiscosrv.exe) ارائه می‌دهد. آن را به هر روشی که راحت‌تر هستید اجرا کنید؛ دوبار کلیک کردن در هر محیط گرافیکی باید کارساز باشد. در نخستین اجرا، stdiscosrv فایل‌های گواهی و پایگاه داده را در دایرکتوری جاری ایجاد می‌کند، مگر اینکه پرچم‌هایی خلاف این به آن داده شده باشد.

سرور اکتشاف همچنین می‌تواند از طریق apt، مدیر بستهٔ دبیان/اوبونتو، تهیه شود. نسخه‌های اخیر را می‌توان در مخزن apt <https://apt.syncthing.net> برنامهٔ Syncthing یافت. نام بسته syncthing-discosrv است.

نکته:

اگر یک نمونه از Syncthing را روی همان سرور اکتشاف اجرا می‌کنید، باید آن نمونه را با یک آدرس ایستا (static) به سایر دستگاه‌ها اضافه کنید، یا اینکه سرور اکتشاف و نمونه‌های Syncthing را به آدرس‌های IP متفاوتی مقید (bind) نمایید.

سرور اکتشاف خدمات خود را بر بستر HTTPS ارائه می‌دهد. برای تضمین اتصالات امن از سوی کلاینت‌ها، سه گزینه وجود دارد:

  • استفاده از یک جفت گواهی امضاشده توسط مراجع معتبر (CA-signed) برای نام دامنه‌ای که برای سرور اکتشاف به کار می‌برید. این روش مشابه هر وب‌سایت HTTPS دیگری است؛ کلاینت‌ها سرور را بر پایهٔ گواهی و نام دامنهٔ آن اعتبارسنجی می‌کنند.
  • استفاده از هر جفت گواهی دلخواه و واگذاری اعتبارسنجی سرور به کلاینت‌ها بر اساس «شناسهٔ دستگاه» (device ID) آن (مشابه اعتبارسنجی Syncthing به Syncthing). این گزینه می‌تواند همراه با گواهی تولیدشدهٔ خودکار توسط سرور اکتشاف استفاده شود.
  • ارسال پرچم --http در صورتی که سرور اکتشاف پشت یک پراکسی معکوس امن‌شده با SSL قرار دارد. برای پیکربندی به بخش زیر مراجعه کنید.

در مورد دو گزینهٔ اول، مسیرهای فایل گواهی و کلید باید در هنگام راه‌اندازی به سرور اکتشاف داده شوند. در صورت استفاده از پرچم http این کار ضرورتی ندارد:

$ stdiscosrv --cert=/path/to/cert.pem --key=/path/to/key.pem
Server device ID is 7DDRT7J-UICR4PM-PBIZYL3-MZOJ7X7-EX56JP6-IK6HHMW-S7EK32W-G3EUPQA

سرور اکتشاف شناسهٔ دستگاه خود را در زمان راه‌اندازی چاپ می‌کند. در صورتی که از گواهی امضاشده توسط CA استفاده نمی‌کنید، این شناسهٔ دستگاه (اثر انگشت) باید در نشانی URL سرور اکتشاف به کلاینت‌ها ارائه شود:

در غیر این صورت، نشانی URL به این شکل خواهد بود:

افزوده‌شده در نسخهٔ 1.8.0: سرآیند HTTP جدید «X-Client-Port» اضافه شد.

سرور اکتشاف می‌تواند پشت یک پراکسی معکوس امن‌شده با SSL اجرا شود. این قابلیت امکانات زیر را فراهم می‌کند:

  • استفاده از یک نام زیردامنه بدون نیاز به درج شمارهٔ درگاه در نشانی URL
  • اشتراک‌گذاری یک گواهی SSL بین چندین سرویس روی همان سرور

توجه داشته باشید که پس از اعمال این پیکربندی، چنانچه پراکسی از یک گواهی HTTPS معتبر استفاده کند، کلاینت‌ها باید پارامتر ?id=... را از نشانی URL سرور اکتشاف در پیکربندی خود حذف کنند. اعتبارسنجی سمت کلاینت از طریق بررسی گواهی HTTPS سرور پراکسی که در دیدرس است انجام می‌پذیرد. اما اگر پراکسی از یک گواهی خودامضاشده یا به نحوی نامعتبر استفاده کند، کلاینت‌ها کماکان باید پارامتر ?id=... را به همراه هش محاسبه‌شدهٔ گواهی پراکسی تنظیم نمایند. استفاده از چنین پیکربندی‌ای توصیه نمی‌شود و در این صفحه توضیح داده نشده است. همواره استفاده از گواهی‌های معتبر و شناخته‌شده را ترجیح دهید.

  • اجرای سرور اکتشاف با پرچم -http: stdiscosrv -http.
  • پیکربندی گواهی/کلید SSL برای پراکسی معکوس.
  • سرآیند HTTP با عنوان «X-Forwarded-For» باید حاوی آدرس IP واقعی کلاینت باشد و عبور داده شود.
  • سرآیند HTTP با عنوان «X-Client-Port» باید عبور داده شود و دربردارندهٔ درگاه اتصال واقعی کلاینت باشد.
  • سرآیند HTTP با عنوان «X-SSL-Cert» باید حاوی گواهی SSL کلاینت با کدگذاری PEM باشد و عبور داده شود. این سرآیند در درخواست‌های POST موجود خواهد بود و ممکن است در درخواست‌های GET کلاینت‌ها خالی باشد. اگر مشاهده کردید syncthing-discosrv هنگام دریافت درخواست‌های POST پیام no certificates را چاپ می‌کند، دلیلش این است که پراکسی این سرآیند را منتقل نمی‌کند.
  • پراکسی باید گواهی SSL کلاینت را درخواست کند، اما نباید امضاشدن آن توسط یک CA معتبر را الزامی سازد.

این خطوط در فایل پیکربندی، چهار پیش‌نیاز انتهایی فهرست بالا را پوشش می‌دهند:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Port $remote_port;
proxy_set_header X-SSL-Cert $ssl_client_cert;
ssl_verify_client optional_no_ca;

در ادامه نمونه‌ای کامل از یک فایل پیکربندی Nginx آمده است. با این پیکربندی، کلاینت‌ها می‌توانند از https://discovery.example.com به عنوان نشانی URL سرور اکتشاف در تنظیمات Syncthing استفاده کنند.

# HTTP 1.1 support
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Client-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header X-SSL-Cert $ssl_client_cert;
proxy_set_header X-Forwarded-Tls-Client-Cert "";
proxy_set_header X-Tls-Client-Cert-Der-Base64 "";
upstream discovery.example.com {
    # Local IP address:port for discovery server
    server 192.0.2.1:8443;
}
server {
        server_name discovery.example.com;
        listen 80;
        access_log /var/log/nginx/access.log vhost;
        return 301 https://$host$request_uri;
}
server {
        server_name discovery.example.com;
        listen 443 ssl http2;
        access_log /var/log/nginx/access.log vhost;
        # Mozilla Intermediate configuration (https://wiki.mozilla.org/Security/Server_Side_TLS)
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
        ssl_session_tickets off;
        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:50m;
        ssl_verify_client optional_no_ca;
        # OCSP stapling
        ssl_stapling on;
        ssl_stapling_verify on;
        # Certificates
        ssl_certificate /etc/nginx/certs/discovery.example.com.crt;
        ssl_certificate_key /etc/nginx/certs/discovery.example.com.key;
        # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
        ssl_dhparam /path/to/dhparam;
        # HSTS (ngx_http_headers_module is required) (63072000 seconds)
        add_header Strict-Transport-Security "max-age=63072000" always;
        location / {
                proxy_pass http://discovery.example.com;
        }
}

نمونه‌ای از خودکارسازی گواهی‌های SSL و راه‌اندازی پراکسی معکوس برای سرور اکتشاف و Syncthing با استفاده از Nginx، Let’s Encrypt <https://letsencrypt.org> و Docker را می‌توانید در اینجا <https://forum.syncthing.net/t/docker-syncthing-and-syncthing-discovery-behind-nginx-reverse-proxy-with-lets-encrypt/6880> بیابید.

خطوط زیر باید به پیکربندی اضافه شوند:

SSLProxyEngine On
SSLVerifyClient optional_no_ca
RequestHeader set X-SSL-Cert "%{SSL_CLIENT_CERT}s"
RequestHeader unset X-Forwarded-Tls-Client-Cert
RequestHeader unset X-Tls-Client-Cert-Der-Base64

مشاهده شده است که موارد زیر دست‌کم در Apache httpd 2.4.38 الزامی نیستند، زیرا ماژول پراکسی سرآیند مورد نیاز را به‌طور پیش‌فرض می‌افزاید. چنانچه نیاز دارید این دستورالعمل را به‌صراحت اضافه کنید، مطمئن شوید که ابتدا دستور a2enmod remoteip را اجرا کرده‌اید. سپس خط زیر را به پیکربندی Apache httpd اضافه کنید:

RemoteIPHeader X-Forwarded-For

خطوط زیر باید به Caddyfile اضافه شوند:

  discovery.example.com {
    reverse_proxy 192.0.2.1:8443 {
      header_up X-Forwarded-For {http.request.remote.host}
      header_up X-Client-Port {http.request.remote.port}
      header_up X-Tls-Client-Cert-Der-Base64 {http.request.tls.client.certificate_der_base64}
      header_up -X-Ssl-Cert
      header_up -X-Forwarded-Tls-Client-Cert
    }
    tls {
      client_auth {
        mode request
      }
    }
}

برای جزئیات بیشتر، توصیه‌های موجود در صفحهٔ Reverse Proxy Setup <https://docs.syncthing.net/users/reverseproxy.html> را نیز مطالعه فرمایید. توجه داشته باشید که آن صفحه به راه‌اندازی پراکسی برای واسط وب Syncthing اختصاص دارد؛ بنابراین باید تغییرات متناسب را در مسیرها و شمارهٔ درگاه‌ها برای پراکسی کردن سرور اکتشاف و سناریوی اختصاصی خود اعمال کنید.

syncthing-networking(7), syncthing-faq(7)

The Syncthing Authors

2014-2026, The Syncthing Authors

July 23, 2026 v2.1.0