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:
- Klien — browser,
curl, Scrapy, Selenium, aplikasi desktop - Gateway — listener HTTP atau SOCKS5 lokal di mesin Anda
- Pemilihan — gateway memilih satu upstream dari kumpulan Anda
- Node keluar — proxy upstream membuat permintaan keluar
- 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.1secara default. Proxy tanpa autentikasi di0.0.0.0adalah 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.orgdancdn-cgi/tracesebelum mempercayai pengaturan - Bind ke localhost, autentikasi jika memungkinkan, dan jadwalkan pemeriksaan kesehatan agar exit mati keluar dari kumpulan