Wireproxy: HTTP/SOCKS5 proxy olarak sunulan WireGuard istemcisi
(github.com/pufferffish)- Wireproxy, bir WireGuard peer’ına bağlandıktan sonra yerel makinede SOCKS5/HTTP proxy veya tünel olarak açığa çıkan, tamamen kullanıcı alanında çalışan bir WireGuard istemcisidir
- Yeni bir ağ arayüzü kurmadan yalnızca belirli site trafiğini WireGuard peer’ına göndermek isteyenleri veya WireGuard yapılandırma değişiklikleri için root yetkisi kullanmak istemeyenleri hedefler
- Özellikleri TCP statik yönlendirme, SOCKS5/HTTP proxy ve TLS SNI tabanlı transparent proxy içerir; HTTP proxy şu anda yalnızca CONNECT destekler
- Yapılandırma,
wg-quick’in[Interface]ve[Peer]semantiklerini izler; mevcut WireGuard yapılandırma dosyasıWGConfigile içe aktarılabilir veya birden fazla peerAllowedIPsile yönlendirilebilir - Operasyonel kullanım için
--info/-itabanlı bir health endpoint sunar;/metricsve/readyzile WireGuard durumunu veCheckAlivetabanlı hazır olma durumunu kontrol edebilirsiniz
Wireproxy ne yapar
wireproxy, WireGuard peer’ına bağlanan ve yerel makinede SOCKS5/HTTP proxy veya tünel açığa çıkaran bir kullanıcı alanı uygulamasıdır- Yalnızca belirli sitelere WireGuard peer’ı üzerinden erişmek, ancak yeni bir ağ arayüzü oluşturmak istemediğinizde kullanılabilir
- Ağ arayüzünden tamamen bağımsız çalışır ve yapılandırma için root yetkisi gerektirmez
- Amnezia VPN’e benzer bir kullanım gerektiren kullanıcılar wireproxy-awg fork’unu kullanabilir
Desteklenen ve henüz olmayan özellikler
- Desteklenen özellikler
- İstemci ve sunucu için TCP statik yönlendirme
- SOCKS5/HTTP proxy
- HTTP şu anda yalnızca CONNECT destekler
- Server Name Indication kullanan transparent TLS proxy
- TODO olarak kalan özellikler
- SOCKS5 için UDP desteği
- UDP statik yönlendirme
Çalıştırma ve kurulum
- Temel çalıştırma biçimi
./wireproxy [-c path to config]şeklindedir - Başlıca seçenekler
-c,--config: yapılandırma dosyası yolunu belirtir- Varsayılan yollar
/etc/wireproxy/wireproxy.conf,$HOME/.config/wireproxy.conf
- Varsayılan yollar
-s,--silent: silent mode-d,--daemon: arka planda çalıştırma-i,--info: health status’u açığa çıkarmak için adres ve port belirtir-v,--version: sürümü yazdırır-n,--configtest: yalnızca yapılandırma dosyasının geçerliliğini kontrol eder
- Derleme, depoyu klonladıktan sonra
makeile yapılır - Kurulum örneği olarak
go install github.com/windtf/wireproxy/cmd/wireproxy@v1.1.2veya@latestkullanılır
Yapılandırma modeli
[Interface]ve[Peer]ayarları,wg-quickyapılandırmasıyla aynı semantiği izlerAddress, IPv4 için/32, IPv6 için/128alt ağını kullanmalıdırPrivateKeyortam değişkeni referanslarını da kullanabilir- Mevcut bir WireGuard yapılandırmanız varsa
WGConfig = <path to the wireguard config>ile içe aktarabilirsiniz
Tünel ve proxy ayarları
TCPClientTunnel- Yerel makinede alınan TCP trafiğini WireGuard üzerinden belirtilen hedefe iletir
- Örnek akış
<LAN uygulaması> → localhost:25565 → WireGuard → play.cubecraft.net:25565şeklindedir
TCPServerTunnel- WireGuard ağında alınan TCP trafiğini yerel ağdaki belirtilen hedefe iletir
- Örnek akış
<WireGuard ağ uygulaması> → WireGuard → 172.16.31.2:3422 → localhost:25545şeklindedir
STDIOTunnel- wireproxy sürecinin standart giriş ve çıkışını WireGuard üzerinden TCP hedefine bağlar
openssh’inProxyCommandparametresi olarak kullanmak için uygundur
Socks5- Yerel LAN’da bir SOCKS5 proxy oluşturur ve tüm trafiği WireGuard’a yönlendirir
- Kullanıcı adı ve parola belirtildiğinde proxy kimlik doğrulamasını etkinleştirir
http- Yerel LAN’da bir HTTP proxy oluşturur ve tüm trafiği WireGuard’a yönlendirir
- Kullanıcı adı ve parola belirtildiğinde kimlik doğrulamayı etkinleştirir
CertFileveKeyFilebelirtilirse HTTPS’yi etkinleştirir
SNI- Yerel LAN’da transparent TLS proxy oluşturur ve trafiği WireGuard üzerinden göndermek için SNI’ı yönlendirme hedefi olarak kullanır
Birden fazla peer ve yönlendirme
- Birden fazla WireGuard peer’ı kullanılabilir
- Birden fazla peer kullanırken wireproxy’nin hangi peer’a ileteceğini bilmesi için AllowedIPs belirtilmelidir
- Yapılandırma örneği, farklı
AllowedIPsdeğerlerine sahip birden fazla[Peer]ile birden fazlaTCPServerTunnelkullanımını birlikte gösterir UDPProxyTunnelörneği de dahildirBindAddressile yerel bind adresi belirtilirTargetile hedef adres belirtilirInactivityTimeout0ise timeout olmaz
[Resolve]DNS çözümleme stratejisini ayarlaripv4: A kayıtlarına öncelik veriripv6: AAAA kayıtlarına öncelik verirauto: varsayılandır; WireGuard arayüzünde yalnızca IPv4 adresi varsaipv4ile, aksi haldeipv6ile aynıdır
- Endpoint’i olmayan
[Peer]yapılandırmasıyla peer’ın wireproxy’ye bağlanmasına izin verilebilir
Health endpoint
--info/-i, örneğinlocalhost:9080gibi bir adres ve port alarak health status metric sağlayan bir HTTP sunucusunu açığa çıkarır- Şu anda iki endpoint uygulanmıştır
/metrics: WireGuard daemon bilgilerini açığa çıkarır vewg showile aynı bilgileri sağlar/readyz:CheckAliveiçinde belirtilen IP’den en son pong alınan zamanı JSON olarak döndürür
CheckAliveayarlandığında, belirtilen adrese herCheckAliveIntervalsaniyede bir WireGuard üzerinden ping gönderir- Varsayılan
CheckAliveInterval5 saniyedir - Son
CheckAliveIntervalsaniyesine 2 saniyelik gecikme payı eklenen süre içinde pong alınamazsa 503 döndürür - Koşul sağlanırsa 200 döndürür
- Varsayılan
CheckAliveayarlanmamışsa/readyzboş bir JSON nesnesi ve 200 döndürür- ICMP ping paketinin yönlendirileceği peer, her peer’ın AllowedIPs ayarına göre değişir
1 yorum
Hacker News yorumları
Küçük ama harika bir araç. Firefox’un multi-account containers özelliğiyle yalnızca belirli sekmeleri seçip, WireGuard’ı destekleyen ama uygulama katmanı proxy’si ya da SSH’i olmayan ev yönlendiricime proxy’lemek için kullanıyorum
Bunu ayarlamak için https://addons.mozilla.org/en-GB/firefox/addon/container-pro... gibi ayrı bir eklenti gerektiğini sanıyordum; öyle değilmiş ve artık böyle bir yanılgı da downvote sebebi sayılıyor galiba
WireGuard ile yapmaya çalıştığım iş için https://github.com/dariost/soks daha uygundu. Neredeyse aynı işi yapıyor ama mevcut WireGuard arayüzünü yeniden kullanıyor
Kullanım şekli bu yazıda ayrıntılı anlatılmış: https://www.nicoco.fr/blog/2023/09/10/wireguard/
Kontrol mekanizması olarak yönlendirme tablosunu kullanmak yerine, SOCKS5 proxy kullanıp kullanmamaya karar verme biçimi gibi görünüyor
Geçmişte Raspberry Pi üzerinde Docker konteyneriyle benzerini yapmıştım; ancak herhangi bir işletim sisteminde çalışabilmesi ve ana makinenin yönlendirme tablosunu yanlışlıkla bozmayacağını garanti etmesi nedeniyle kullanıcı alanı çözümü çok daha iyi bir seçenek gibi görünüyor
onetun da var: https://github.com/aramperes/onetun
Tamamen kullanıcı alanı sunucu uygulaması da var mı merak ediyorum. tun/tap aygıtı olmadan yapmak için kullanıcı alanı IP yığını gibi bir şey gerekir sanırım ama emin değilim
Go’da soketleri bağlayan Dialer’ın yerine geçerek, pratikte soketleri WireGuard ile sarmalayabiliyor. Kullanıcı alanında çalıştığı için tun/tap gerekmiyor. Bunu @dpeckett tamamen açık kaynak olarak yayımladı
Aynı temel üzerinde DNS çözümlemesi de içeren bir kullanıcı alanı WireGuard ağ geçidi de yaptı: https://github.com/noisysockets/gateway
https://news.ycombinator.com/user?id=dpeckett
Anladığım kadarıyla Google’ın kullanıcı alanı TCP/IP yığınını kullanıyor
Başka bir IP gerektiğinde kullandığım SSH tünellerinin yerini almak için iyi olur
İlgili bir araç olarak pproxy de var; özelliklerinden biri olarak farklı tünel protokollerini “dönüştürebiliyor” ve yönlendirme özelliği de var. SSH SOCKS5’i HTTP proxy’ye çevirmek için kullanmıştım: https://github.com/moreati/pproxy
“Böyle bir şey Go ile oldukça kolay yapılabilir,” diye düşünmüştüm; nitekim Go ile yazılmıştı
Birçok çok protokollü proxy istemcisi bu özelliği destekliyor. Başlıca açık kaynak örnekler arasında sing-box, clash-meta ve diğer clash tabanlı istemciler, xray var
Kapalı kaynak istemciler arasında Surge Mac/iOS bulunuyor
Pek bilinmeyen çok sayıda trafik yönlendirme olanağı var ve Android uygulamaları da bulunuyor. Eskiden hotspot desteklemeyen bir SIM ve root edilmemiş Android ile hotspot açmak için denemiştim
Ancak internette oradan buradan alınmış çok kod içeriyorlar ve geliştirici topluluğu da çeşitli nedenlerle epey sıra dışı; bu yüzden ne kadar güvenilir olduklarını hep merak ediyorum
Çalışma şeklini derinlemesine incelemedim, ancak hangi alan adlarının VPN üzerinden proxy’leneceğine kural gruplarıyla karar verme fikrini seviyorum
Performansı merak ediyorum. Hatırladığım kadarıyla “vanilla” SOCKS kurulumu çok kolay; yani SSH’i uygun seçeneklerle çalıştırıp uygulamaya kullanmasını söylemek yeterli, ama epey yavaştı
Bu araç normal SOCKS/SSH sunucusunun olmadığı durumlar için gibi görünüyor; ama o tarafta da bir avantajı var mı merak ediyorum
Benim deneyimimde SSH üzerindeki SOCKS’in performansı hep oldukça iyiydi ve OpenSSH’in TUN modu gibi TCP’nin üzerine TCP bindiren bir yöntem değildi
Yine de bu çözüme çok ilgi duyuyorum
Thunderbird’ün tüm e-posta bağlantılarını Tailscale exit node üzerinden proxy’leyecek, ama tüm trafiği exit node’a göndermeyecek bir araç olsa iyi olur diye tam düşünüyordum
tailscaleCLI’ını SOCKS proxy olarak kullanabilirsiniz: https://tailscale.com/kb/1113/aws-lambdaBunu bir konteyner imajına koyup tailscale’in dinlediği SOCKS portunu dışarı açarsanız doğrudan proxy olur
Mullvad VPN’e özel olarak böyle bir şeye ihtiyacınız varsa https://github.com/imiric/mullvad-proxy kullanıp memnun kalmıştım
Benim projem değil; yalnızca güncellemeler için fork’ladım. Güzel yanı, Mullvad CLI aracını gömülü olarak getirmesi sayesinde sunucu değiştirmenin çok kolay olması ve her şeyin ana makineden yalıtılması. Ayrıca “sadece” nginx ve birkaç betikten oluştuğu için SOCKS5 desteği de iyi olur gibi
https://mullvad.net/en/blog/wireguard-configuration-tool-has...