blog.zzbd.org
Open in
urlscan Pro
1.0.0.5
Public Scan
URL:
https://blog.zzbd.org/en/cf-pairdrop/
Submission: On August 11 via manual from JP — Scanned from JP
Submission: On August 11 via manual from JP — Scanned from JP
Form analysis
0 forms found in the DOMText Content
J.F's BLOG * About * Search * 简体中文 * Table of Contents * Overview J. F Try · Enjoy · Documentary 151 posts 4 categories 48 tags CLOUDFLARE'S TURN SERVICE AS SIGNALING SERVER OF PAIRDROP DEPLOYING ON QNAP Posted on 2024-07-30 In 原创 Word count in article: 859 Pairdrop is a popular file sharing app based on web browser. You can send files and text messages to devices on local network or even over the Internet. The data transfers point-to-point, but NAT cross ability rely on a signaling server(信号服务器)that running TURN service. I installed Pairdrop docker on my QNAP(威联通)NAS for private file transfering for long time, here I’ll take a note of experiences to make Internet Transfer happen without heavy effort. Based on the offical document, we have 3 options to make use of TURN server: 1. Install coturn on NAS directly or deploy through docker compose together with Pairdrop. Doc 2. Specify off-the-shelf signaling server from public pairdrop service. This way, devices visiting to different domain can discover each other. Doc 3. Use a free, pre-configured TURN server, such as OpenRelay, Google and Cloudflare. While following the first process, I found it a tough job to install coturn under QNAP. The container station stucked for long time and fail with the message > [Container Station] Failed to create application “pairdrop”. Error message: > operateApp action [–project-name pairdrop up -d –remove-orphans] failed: exit > status 1: Network pairdrop_default Creating > Network pairdrop_default Created > Container pairdrop-coturn_server-1 Creating > Container pairdrop Creating > Container pairdrop Created > Container pairdrop-coturn_server-1 Created > Container pairdrop Starting > Container pairdrop-coturn_server-1 Starting > Container pairdrop Started > Error response from daemon: driver failed programming external connectivity on > endpoint pairdrop-coturn_server-1 > (9d64f6b67960878a2cc22fffc7ad11e7faff279d163fe49953ba1577eae7941e): listen > udp4 0.0.0.0:13773: bind: address already in use Instead, I installed coturn separately and finally success. The network mode was set to host for convenience. Compare to cloudflare, self-hosted TURN server seems more stable. As the second process, The Pairdrop instance is running with webRTC enabled, but it can’t connect to pairdrop.net TURN server for unknown reason. So I try to register OpenRelay account to get a free plan credential. Unfortunately, It also fail to connect most probability due to the network restriction in China. Finally, I’ve found Cloudflare Calls TURN Service which is available since May 2024. Any account has a free tier of 1,000 GB before $0.05 per GB of data used. That’s enough for personal usage. Here’s the docker parameter I used: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 services: pairdrop: image: "lscr.io/linuxserver/pairdrop:latest" container_name: pairdrop restart: unless-stopped volumes: - /share/Container/pairdrop/rtc_config.json:/home/node/app/rtc_config.json environment: - PUID=1000 # UID to run the application as - PGID=100 # GID to run the application as - WS_FALLBACK=true # Set to true to enable websocket fallback if the peer to peer WebRTC connection is not available to the client. - RATE_LIMIT=true # Set to true to limit clients to 1000 requests per 5 min. - RTC_CONFIG=/home/node/app/rtc_config.json # Set to the path of a file that specifies the STUN/TURN servers. - DEBUG_MODE=false # Set to true to debug container and peer connections. - TZ=Asia/Shanghai # Time Zone ports: - "127.0.0.1:3000:3000" # Web UI. Change the port number before the last colon e.g. `127.0.0.1:9000:3000` Note: WS_FALLBACK and RTC_CONFIG cannot be used together with SIGNALING_SERVER And RTC_CONFIG is like this: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 { "sdpSemantics": "unified-plan", "iceServers": [ { "urls": "stun:stun.cloudflare.com:3478" }, { "urls": "turn:turn.cloudflare.com:3478?transport=udp", "username": "xxx", "credential": "yyy" }, { "urls": "turn:turn.cloudflare.com:3478?transport=tcp", "username": "xxx", "credential": "yyy" }, { "urls": "turns:turn.cloudflare.com:5349?transport=tcp", "username": "xxx", "credential": "yyy" } ] } The credential is not persistence, so I use Cronicle to setup a cron job to update rtc_config.json and restart Pairdrop periodly: #!/usr/bin/env bash cd /share/Container/pairdrop cf=$(curl -s -X POST -H "Authorization: Bearer xxxxxxxxx" -H "Content-Type: application/json" -d '{"ttl": 604800}' https://rtc.live.cloudflare.com/v1/turn/keys/xxxxxxxxx/credentials/generate) if jq -e . >/dev/null 2>&1 <<<"$cf"; then jq --argjson cf "$cf" '.iceServers[] |= . + { username: $cf.iceServers.username, credential: $cf.iceServers.credential }' rtc_config.json > rtc_config.tmp && mv rtc_config.tmp rtc_config.json /share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker restart pairdrop-1 else echo "Failed to parse JSON" fi Also, don’t forget to append Apache reverse proxy rule with websocket enabled: 1 2 3 4 5 6 7 8 9 10 11 <VirtualHost *:5049> ServerName <DOMAIN> SSLEngine on SSLCipherSuite EECDH+CHACHA20:EECDH+AES SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLCertificateFile "<path to crt>" SSLCertificateKeyFile "<path to key>" ProxyPreserveHost on ProxyPass / http://localhost:3000/ upgrade=websocket connectiontimeout=60 timeout=60 ProxyPassReverse / http://localhost:3000/ </VirtualHost> Now, I can make two devices visible each other on the self-hosted Pairdrop app, such as mobile phone under 5G and PC under Wifi. However, the file transfer process is not quit stable, especially for large files. and the speed is also slow, only 500kbps on my side. Not sure if it relates to cloudflare or Pairdrop. And the maintainer are workin on the issue now, the preview next version improve a lot. Anyway, it canbe used as online chatroom or send small file quickly and temporarily, not only on local network. FastSend and pp快传 are similar tool build on webRTC. In my mind, the UI are more simple and practical than Pairdrop. But the connection is also unstable. Hope more powerful tool appears to make sharing directly simple and easy. No app, No intermediate server, Web-based and stable. For now, only bluetooth meet the goals, but it’s slow, very slow. Buy me a coffee Donate WeChat Pay * Cloudflare's TURN Service as signaling server of Pairdrop deploying on QNAP * https://blog.zzbd.org/en/cf-pairdrop/ * Create by J. F Posted on 2024-07-30 Edited on 2024-08-01 License BY-NC-SA * All articles are freely reprinted unless statement. en app Utilize QtScrcpy and ToDesk to control Android Q remotely Show Disqus Nickname Email Website 0/500 * OωO * |´・ω・)ノ * ヾ(≧∇≦*)ゝ * (☆ω☆) * (╯‵□′)╯︵┴─┴ *  ̄﹃ ̄ * (/ω\) * ∠( ᐛ 」∠)_ * (๑•̀ㅁ•́ฅ) * →_→ * ୧(๑•̀⌄•́๑)૭ * ٩(ˊᗜˋ*)و * (ノ°ο°)ノ * (´இ皿இ`) * ⌇●﹏●⌇ * (ฅ´ω`ฅ) * (╯°A°)╯︵○○○ * φ( ̄∇ ̄o) * ヾ(´・ ・`。)ノ" * ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃ * (ó﹏ò。) * Σ(っ °Д °;)っ * ( ,,´・ω・)ノ"(´っω・`。) * ╮(╯▽╰)╭ * o(*////▽////*)q * >﹏< * ( ๑´•ω•) "(ㆆᴗㆆ) * 😂 * 😀 * 😅 * 😊 * 🙂 * 🙃 * 😌 * 😍 * 😘 * 😜 * 😝 * 😏 * 😒 * 🙄 * 😳 * 😡 * 😔 * 😫 * 😱 * 😭 * 💩 * 👻 * 🙌 * 🖕 * 👍 * 👫 * 👬 * 👭 * 🌚 * 🌝 * 🙈 * 💊 * 😶 * 🙏 * 🍦 * 🍉 * 😣 * * * * * * * * * * * * * * * * * * * * * * 颜文字 * Emoji * Bilibili Preview Send 0 comments No comment Powered by Twikoo v1.6.36 Twikoo Management Panel Password Sign in © 2009 – 2024 J.F • blogroll Powered by Hexo & NexT.Mist 0% Theme NexT works best with JavaScript enabled