

Things seem to be working now; I can reach my slskd profile from other user profiles, browse and download shares, etc.
I didn’t need to mess with my router at all. Instead, I made use of this guide to enable slskd’s baked-in gluetun integration with a control server.
I am still a little confused about why I needed a control server, and it seems to be forwarding the wrong port, but things appear as they should on the client side.
I’ll comment my compose.yaml under this. I hope this is helpful.








services: gluetunslskd: image: qmcgaw/gluetun:latest container_name: gluetunslskd cap_add: - NET_ADMIN devices: - /dev/net/tun:/dev/net/tun ports: - 8000:8000 - 5031:5031 volumes: - ./app:/app environment: PUID: 1000 PGID: 1000 VPN_SERVICE_PROVIDER: protonvpn VPN_TYPE: wireguard WIREGUARD_PRIVATE_KEY: ----- WIREGUARD_ADDRESSES: ----- SERVER_COUNTRIES: ----- TZ: ----- PORT_FORWARD_ONLY: on VPN_PORT_FORWARDING: on HTTP_CONTROL_SERVER_AUTH_DEFAULT_ROLE: '{"auth":"apikey","apikey":"-----"}' VPN_PORT_FORWARDING_UP_COMMAND: > '/bin/sh -c "sed -i 's/listen_port:.*/listen_port\: {{PORTS}}/' /app/slskd.yml"' restart: unless-stopped slskd: image: slskd/slskd:latest container_name: slskd environment: TZ: ----- PUID: 1000 PGID: 1000 SLSKD_SLSK_ADDRESS: server.slsknet.org SLSKD_SLSK_PORT: 2242 SLSKD_SHARED_DIR: /music SLSKD_DOWNLOADS_DIR: /downloads SLSKD_INCOMPLETE_DIR: /incomplete SLSKD_USERNAME: ----- SLSKD_PASSWORD: ----- SLSKD_SLSK_USERNAME: ----- SLSKD_SLSK_PASSWORD: ----- SLSKD_VPN: true SLSKD_VPN_PORT_FORWARDING: true SLSKD_VPN_GLUETUN_URL: http://localhost:8000/ SLSKD_VPN_GLUETUN_API_KEY: ----- volumes: - ./app:/app - /home/user/media/music/library:/music:ro - /home/user/media/music/downloads:/downloads:rw - /home/user/media/music/incomplete:/incomplete:rw network_mode: 'service:gluetunslskd' depends_on: gluetunslskd: condition: service_healthy restart: unless-stopped