Skip to content
Artikel / 9 menit baca

Gateway Proxy Rotasi: Satu Endpoint SOCKS5 atau HTTP Lokal untuk Seluruh Kumpulan Proxy Anda

Arahkan setiap alat ke satu endpoint SOCKS5 atau HTTP lokal dan biarkan layanan gateway kecil memilih proxy upstream per koneksi — dengan konfigurasi, sesi sticky, pemeriksaan kesehatan, DNS, dan verifikasi kebocoran.

Gateway Proxy Rotasi: Satu Endpoint SOCKS5 atau HTTP Lokal untuk Seluruh Kumpulan Proxy Anda

Proxy rotasi di dalam kode Anda berfungsi baik sampai alat kedua muncul. Sekarang Anda memiliki scraper dengan middleware, browser yang Anda kendalikan secara manual, pemeriksa peringkat CLI dengan satu kolom proxy, dan cron job yang ditulis orang lain — masing-masing berotasi dengan caranya sendiri, atau tidak berotasi sama sekali.

Gateway proxy rotasi menghilangkan duplikasi itu. Anda menjalankan satu layanan kecil secara lokal (atau di VPS), arahkan semuanya ke 127.0.0.1:8080, dan gateway memilih proxy upstream untuk setiap koneksi. Panduan ini membahas apa layanan itu, kapan layanan itu sepadan dengan lompatan tambahan, cara membuatnya dengan konfigurasi yang benar-benar bisa Anda baca, dan cara membuktikan rotasi, resolusi DNS, serta perilaku kebocoran sebelum Anda mempercayainya untuk pekerjaan produksi.

Apa sebenarnya gateway proxy rotasi itu

Ini adalah load balancer untuk proxy. Jalur permintaan terlihat seperti ini:

  1. Klien — browser, curl, Scrapy, Selenium, aplikasi desktop
  2. Gateway — listener HTTP atau SOCKS5 lokal di mesin Anda
  3. Pemilihan — gateway memilih satu upstream dari kumpulan Anda
  4. Node keluar — proxy upstream membuat permintaan keluar
  5. Situs target — melihat IP node keluar, bukan IP Anda

Gateway tidak membuat proxy menjadi lebih cepat, lebih privat, atau lebih andal. Gateway memusatkan pemilihan, kredensial, dan kesehatan, yang merupakan masalah berbeda dari yang dipecahkan oleh rotasi sisi klien.

Kapan gateway mengalahkan rotasi di dalam kode Anda

Gunakan gateway ketika:

  • Beberapa alat membutuhkan proxy dan hanya sebagian yang mendukung rotasi secara native
  • Anda ingin satu tempat untuk memperbarui kredensial ketika penyedia merotasi kata sandi atau port Anda
  • Anda memerlukan sesi sticky untuk alur yang login dan rotasi per permintaan untuk scraping, secara berdampingan
  • Anda ingin satu titik untuk menjalankan pemeriksaan kesehatan, deteksi banned, dan penilaian upstream
  • Anda ingin perilaku DNS yang identik di seluruh klien alih-alih keanehan per pustaka
  • Anda mungkin memindahkan beban kerja dari laptop ke VPS atau runner CI nanti

Lewati gateway ketika:

  • Anda hanya memiliki satu klien dan klien itu sudah memiliki middleware yang baik (misalnya middleware rotating-proxy Scrapy)
  • Rotasi bergantung pada aturan bisnis per permintaan — target geo, akun, tingkat harga
  • Anda memerlukan statistik latensi dan kegagalan per permintaan untuk upstream tepat yang digunakan, dan gateway Anda tidak mengeksposnya

Lompatan tambahan memakan sedikit latensi. Untuk sebagian besar otomatisasi, itu adalah kesalahan pembulatan dibandingkan dengan waktu respons node keluar itu sendiri.

Pilih protokol listener sebelum hal lainnya

Listener Dukungan klien Autentikasi Perilaku DNS Perhatikan
HTTP (CONNECT) Hampir universal, termasuk aplikasi yang hanya memiliki kolom "HTTP proxy" Basic auth didukung secara luas Bergantung pada konektor upstream Permintaan HTTP biasa dapat dibaca di gateway; beberapa alat mengirim URL absolut
SOCKS5 Browser melalui flag di sana-sini, curl, sebagian besar scraper dan alat CLI Nama pengguna/kata sandi (RFC 1929) Nama host dapat diteruskan ke upstream untuk resolusi jarak jauh Dialog proxy sistem di iOS dan Android tidak memiliki opsi SOCKS5

Jika Anda tidak yakin, jalankan kedua listener terhadap kumpulan yang sama pada dua port. Tidak ada yang hilang kecuali satu blok konfigurasi tambahan.

Satu detail DNS lebih penting daripada yang orang duga. Jika gateway menyelesaikan nama host target sendiri, maka hasil yang akurat secara geo mencerminkan resolver gateway, bukan lokasi node keluar. Meneruskan nama host ke hilir — perilaku bergaya socks5h — menjaga resolusi di node keluar, yang Anda inginkan untuk data yang sensitif terhadap lokasi.

Membangunnya dengan gost

gost adalah biner Go tunggal yang berbicara HTTP, SOCKS5, dan dapat merantai atau menyeimbangkan daftar node upstream. Versi penting: lini v3 menggunakan file konfigurasi YAML, sedangkan rilis lama mengandalkan flag baris perintah. Konfirmasikan dulu apa yang Anda miliki.

curl -s https://api.github.com/repos/go-gost/gost/releases/latest | grep tag_name
gost -V

Berikut adalah pengaturan rotasi minimal dengan dua exit SOCKS5 upstream, diekspos sebagai listener HTTP dan SOCKS5:

services:
  - name: pool-http
    addr: ":8080"
    handler:
      type: http
      chain: pool
    listener:
      type: tcp

  - name: pool-socks
    addr: ":1080"
    handler:
      type: socks5
      chain: pool
    listener:
      type: tcp

chains:
  - name: pool
    hops:
      - name: hop-0
        selector:
          strategy: round
        nodes:
          - name: exit-a
            addr: 203.0.113.10:1080
            connector:
              type: socks5
              metadata:
                username: user
                password: pass
          - name: exit-b
            addr: 203.0.113.11:1080
            connector:
              type: socks5
              metadata:
                username: user
                password: pass

Jalankan di latar depan saat Anda menguji:

gost -C /etc/gost/gateway.yaml

Strategi pemilihan berbeda antar build — round menggilir node secara berurutan, dan beberapa versi menambahkan pemilihan acak atau berbasis hash. Periksa dokumen selektor untuk rilis tepat Anda alih-alih mengasumsikan nama strategi ada; jika fitur yang Anda butuhkan tidak ada, trik port-per-strategi di bagian berikutnya biasanya tetap bisa membawa Anda ke sana.

Untuk apa pun yang berjalan lama, unit file mengalahkan jendela terminal:

[Unit]
Description=Rotating proxy gateway
After=network-online.target

[Service]
ExecStart=/usr/local/bin/gost -C /etc/gost/gateway.yaml
Restart=on-failure
User=gost
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Sesi sticky tanpa fitur khusus

Banyak tugas menginginkan kebalikan dari rotasi: alur checkout, dasbor terautentikasi, atau formulir multi-langkah membutuhkan IP keluar yang sama selama beberapa menit. Alih-alih mengejar flag sesi sticky, jalankan dua listener terhadap dua chain — satu seimbang, satu dipin.

services:
  - name: pool-http
    addr: ":8080"
    handler:
      type: http
      chain: pool
    listener:
      type: tcp

  - name: pinned-http
    addr: ":8081"
    handler:
      type: http
      chain: pinned
    listener:
      type: tcp

chains:
  - name: pool
    hops:
      - name: hop-0
        selector:
          strategy: round
        nodes:
          - name: exit-a
            addr: 203.0.113.10:1080
            connector:
              type: socks5
          - name: exit-b
            addr: 203.0.113.11:1080
            connector:
              type: socks5

  - name: pinned
    hops:
      - name: hop-0
        nodes:
          - name: exit-a
            addr: 203.0.113.10:1080
            connector:
              type: socks5

Port 8080 berotasi untuk scraping, port 8081 tetap pada satu exit untuk pekerjaan sesi. Untuk memin exit yang berbeda, ubah satu alamat dan muat ulang. Pola yang sama memberi Anda gateway per negara untuk pelacakan peringkat: satu port per negara target, masing-masing dipin ke exit di negara tersebut.

Memverifikasi rotasi, DNS, dan kebocoran

Jangan pernah berasumsi gateway melakukan apa yang dikatakan konfigurasi. Dua menit verifikasi menghemat satu minggu data yang membingungkan.

Mulailah dengan loop shell terhadap listener HTTP:

for i in 1 2 3 4 5; do
  curl -s --max-time 15 --proxy http://127.0.0.1:8080 https://api.ipify.org?format=json
  echo
done

Lima kali jalankan harus menunjukkan lebih dari satu IP keluar. Jika setiap baris identik, selektor Anda tidak berotasi, atau Anda hanya memiliki satu node yang sehat.

Lalu konfirmasikan hal yang sama dari pustaka klien yang benar-benar Anda gunakan:

import requests

GATEWAY = "http://127.0.0.1:8080"
proxies = {"http": GATEWAY, "https": GATEWAY}

for i in range(5):
    r = requests.get(
        "https://www.cloudflare.com/cdn-cgi/trace",
        proxies=proxies,
        timeout=20,
    )
    trace = dict(line.split("=", 1) for line in r.text.strip().splitlines())
    print(i, trace.get("ip"), trace.get("loc"))

Kolom loc memberi tahu Anda dari negara mana Cloudflare melihat permintaan datang — berguna untuk menangkap gateway yang diam-diam menyelesaikan DNS secara lokal dan mendaratkan lalu lintas di wilayah yang salah.

Untuk listener SOCKS5, bandingkan dua bentuk nama host secara sengaja:

curl -s --proxy socks5h://127.0.0.1:1080 https://api.ipify.org
curl -s --proxy socks5://127.0.0.1:1080 https://api.ipify.org

Keduanya harus mencapai internet; perbedaannya adalah apakah nama host atau alamat yang sudah diselesaikan yang berjalan ke node keluar. Untuk pekerjaan yang sensitif terhadap geo, resolusi jarak jauh adalah yang Anda inginkan, dan itu perlu didukung dari ujung ke ujung — gateway dan upstream keduanya.

Daftar periksa kebocoran singkat:

  • Tidak ada respons yang boleh menunjukkan IP asli yang diberikan ISP Anda
  • Jalankan berulang harus menunjukkan variasi (atau konstanta yang disengaja, untuk port yang dipin)
  • Kolom geo harus cocok dengan kumpulan yang Anda konfigurasikan, bukan lokasi Anda sendiri
  • Tes berbasis browser memerlukan pemeriksaan WebRTC dan DNS terpisah — gateway tidak dapat memperbaiki kebocoran WebRTC
  • Upstream terautentikasi harus gagal secara mencolok, bukan diam-diam kembali ke koneksi langsung

Mengoperasikannya: hardening, pemeriksaan kesehatan, dan kejujuran tentang batasan

Gateway yang berfungsi itu mudah. Yang aman membutuhkan beberapa keputusan tambahan:

  • Bind ke 127.0.0.1 secara default. Proxy tanpa autentikasi di 0.0.0.0 adalah open relay begitu firewall Anda tergelincir.
  • Jika build Anda mendukung autentikasi listener, aktifkan. Jika tidak, capai gateway melalui tunnel SSH alih-alih mengekspos port.
  • Simpan kredensial dalam satu file dengan izin ketat, bukan tersebar di berbagai skrip.
  • Tambahkan rotasi log, dan pikirkan dua kali sebelum mencatat URL lengkap jika lalu lintas menyentuh apa pun yang sensitif.
  • Ingat gateway tidak menambah kapasitas. Batas konkurensi kumpulan upstream Anda tetap menjadi plafon.

Pemeriksaan kesehatan sederhana mengalahkan yang pintar. Skrip ini menandai upstream mati sehingga Anda dapat menghapusnya dari konfigurasi:

#!/usr/bin/env bash
while read -r host port; do
  if curl -s --max-time 8 --proxy "socks5h://${host}:${port}" https://api.ipify.org >/dev/null; then
    echo "ok   ${host}:${port}"
  else
    echo "dead ${host}:${port}"
  fi
done < upstreams.txt

Jalankan sesuai jadwal, filter entri yang mati, dan muat ulang. Satu kebiasaan itu mencegah sebagian besar pagi "mengapa scraper saya tiba-tiba diblokir".

Terakhir, tetap dalam batas: hanya gunakan proxy yang Anda berwenang gunakan, dan hormati ketentuan setiap situs target, direktif robots, dan batas laju. Gateway mempermudah pengiriman lalu lintas — gateway tidak membuat lalu lintas yang tidak diinginkan menjadi dapat diterima.

Bagaimana ini cocok dengan alat yang sudah Anda jalankan

Jika sebuah pustaka sudah berotasi dengan baik, pertahankan. Gateway melengkapi, bukan menggantikan, middleware per permintaan di requests Python, Scrapy, atau Selenium; gateway mencakup alat yang sama sekali tidak memiliki cerita rotasi, dan memberi beban kerja bergaya rank-tracker exit yang dipin per negara. Jika Anda sedang menimbang rotasi sisi klien versus gateway untuk scraping secara khusus, panduan rotating proxies untuk web scraping kami membahas pola middleware, dan panduan Selenium rotating proxies membahas batasan peluncuran browser yang membuat gateway menarik sejak awal.

Versi singkat

  • Gateway proxy rotasi adalah load balancer lokal untuk proxy: satu endpoint, banyak upstream
  • Jalankan listener HTTP dan listener SOCKS5; jalankan port kedua yang dipin ke satu node untuk pekerjaan sticky
  • Pertahankan resolusi DNS di node keluar saat lokasi penting
  • Verifikasi dengan loop terhadap api.ipify.org dan cdn-cgi/trace sebelum mempercayai pengaturan
  • Bind ke localhost, autentikasi jika memungkinkan, dan jadwalkan pemeriksaan kesehatan agar exit mati keluar dari kumpulan