Scout VM: shadowsocks-rust Proxy Configuration Guide (for Accessing Restricted Sites)

Background

While collecting AI thumbnail prompt resources, access to note.com (kawaidesign’s paid-article platform) is required. This site uses CloudFront WAF to block all non-residential IPs; direct connections, system proxies (e.g., FlClash), and PinchTab all return HTTP 403.

A SOCKS5 proxy with a Japanese residential or IEPL (Internet Exchange Point Link) egress is needed to bypass the geo-restriction.

Solution Evaluation

Approach Result
Direct connection 403 Forbidden
System proxy (FlClash) GUI port not listening — unusable
sslocal (shadowsocks-rust) Success — returns 200 OK

We selected the sslocal client from shadowsocks-rust, extracting a Japanese IEPL node from our local Clash subscription configuration.

Installation

Configuration

Node details extracted from the Clash subscription config (dler.cloud.yaml) located in the host’s shared directory.

Configuration file: /tmp/ss-jp.json

{
    "server": "[proxy-server-host]",
    "server_port": 14623,
    "method": "2022-blake3-aes-256-gcm",
    "password": "[encrypted-password]",
    "local_address": "127.0.0.1",
    "local_port": 1089
}

Key configuration notes:

  • method: "2022-blake3-aes-256-gcm" is SIP022 — a newer, more secure protocol than legacy variants.
  • local_port: 1089, chosen to avoid conflicts with other local proxies (e.g., FlClash).
  • Config stored under /tmp because it contains sensitive credentials — automatically cleared on reboot.

Starting / Stopping

# Start (daemon mode)
sslocal -c /tmp/ss-jp.json -d

# Verify egress IP
curl -x socks5h://127.0.0.1:1089 httpbin.org/ip
# Expected response: {"origin": "154.31.112.241"} (Japanese egress IP)

# Stop
kill $(pgrep sslocal)

Usage Examples

# curl via proxy
curl -x socks5h://127.0.0.1:1089 <url>

# Python httpx
import httpx
client = httpx.Client(proxy='socks5h://127.0.0.1:1089')

# trafilatura for webpage content extraction
curl -sL -x socks5h://127.0.0.1:1089 "<url>" | \
  python3 -c "import sys; from trafilatura import extract; print(extract(sys.stdin.read()))"

Pitfalls & Lessons Learned

  1. FlClash unusable: Installed but GUI port not listening; CLI mode unstable → abandoned.
  2. Port confusion: Initially set local_port to 1089, then accidentally overrode it at runtime using --local-addr 127.0.0.1:11080. After restart, port reverted to 1089. Lesson: Always use config files — avoid mixing CLI flags and config.
  3. trafilatura missing: Not preinstalled; requires pip3 install --break-system-packages trafilatura on Debian 13 (due to PEP 668 system-package restrictions).
  4. Proxy process management: Runs as a daemon in background — remember to kill it after use.

Applicable Scenarios

  • Accessing Japanese platforms protected by CloudFront WAF geo-restrictions
  • Bypassing sites that block datacenter IPs
  • Web scraping tasks requiring a Japanese egress IP

Scope of Impact

This setup applies only to the Scout VM. The configuration method has been shared with DevOps via vm-dm; other VMs may adopt it by referencing this guide.

Enable on-demand and disable immediately after use. Configuration has been documented in Scout MEMORY.md.