عميل Wireguard الذي يعرض نفسه كوكيل أو أنفاق لـocks5/http.
wireproxy
هو تطبيق مساحة مستخدم بالكامل يتصل بنظير Wireguard، ويكشف عن وكيل socks5/http أو الأنفاق الموجودة على الجهاز. يمكن أن يكون هذا مفيدًا إذا كنت بحاجة إلى الاتصال بمواقع معينة عبر نظير wireguard، ولكن لا يمكن أن تكلف نفسك عناء إعداد واجهة شبكة جديدة لأي سبب كان.
حاليًا، أقوم بتشغيل wireproxy متصلاً بخادم wireguard في بلد آخر، وقمت بتكوين المتصفح الخاص بي لاستخدام wireproxy لمواقع معينة. إنه مفيد جدًا نظرًا لأن wireproxy معزول تمامًا عن واجهات الشبكة الخاصة بي، ولا أحتاج إلى الجذر لتكوين أي شيء.
يمكن للمستخدمين الذين يريدون شيئًا مشابهًا ولكن لـ Amnezia VPN استخدام هذا الشوكة من wireproxy بواسطة @artem-russkikh.
./wireproxy [-c path to config]
usage: wireproxy [-h|--help] [-c|--config ""] [-s|--silent]
[-d|--daemon] [-i|--info ""] [-v|--version]
[-n|--configtest]
Userspace wireguard client for proxying
Arguments:
-h --help Print help information
-c --config Path of configuration file
Default paths: /etc/wireproxy/wireproxy.conf, $HOME/.config/wireproxy.conf
-s --silent Silent mode
-d --daemon Make wireproxy run in background
-i --info Specify the address and port for exposing health status
-v --version Print version
-n --configtest Configtest mode. Only check the configuration file for
validity.
git clone https://github.com/octeep/wireproxy
cd wireproxy
make
يمكن العثور هنا على تعليمات استخدام wireproxy مع علامات تبويب حاوية Firefox والبدء التلقائي على نظام MacOS.
# The [Interface] and [Peer] configurations follow the same semantics and meaning
# of a wg-quick configuration. To understand what these fields mean, please refer to:
# https://wiki.archlinux.org/title/WireGuard#Persistent_configuration
# https://www.wireguard.com/#simple-network-interface
[Interface]
Address = 10.200.200.2/32 # The subnet should be /32 and /128 for IPv4 and v6 respectively
# MTU = 1420 (optional)
PrivateKey = uCTIK+56CPyCvwJxmU5dBfuyJvPuSXAq1FzHdnIxe1Q=
# PrivateKey = $MY_WIREGUARD_PRIVATE_KEY # Alternatively, reference environment variables
DNS = 10.200.200.1
[Peer]
PublicKey = QP+A67Z2UBrMgvNIdHv8gPel5URWNLS4B3ZQ2hQIZlg=
# PresharedKey = UItQuvLsyh50ucXHfjF0bbR4IIpVBd74lwKc8uIPXXs= (optional)
Endpoint = my.ddns.example.com:51820
# PersistentKeepalive = 25 (optional)
# TCPClientTunnel is a tunnel listening on your machine,
# and it forwards any TCP traffic received to the specified target via wireguard.
# Flow:
# --> localhost:25565 --(wireguard)--> play.cubecraft.net:25565
[TCPClientTunnel]
BindAddress = 127.0.0.1:25565
Target = play.cubecraft.net:25565
# TCPServerTunnel is a tunnel listening on wireguard,
# and it forwards any TCP traffic received to the specified target via local network.
# Flow:
# --(wireguard)--> 172.16.31.2:3422 --> localhost:25545
[TCPServerTunnel]
ListenPort = 3422
Target = localhost:25545
# STDIOTunnel is a tunnel connecting the standard input and output of the wireproxy
# process to the specified TCP target via wireguard.
# This is especially useful to use wireproxy as a ProxyCommand parameter in openssh
# For example:
# ssh -o ProxyCommand='wireproxy -c myconfig.conf' ssh.myserver.net
# Flow:
# Piped command -->(wireguard)--> ssh.myserver.net:22
[STDIOTunnel]
Target = ssh.myserver.net:22
# Socks5 creates a socks5 proxy on your LAN, and all traffic would be routed via wireguard.
[Socks5]
BindAddress = 127.0.0.1:25344
# Socks5 authentication parameters, specifying username and password enables
# proxy authentication.
#Username = ...
# Avoid using spaces in the password field
#Password = ...
# http creates a http proxy on your LAN, and all traffic would be routed via wireguard.
[http]
BindAddress = 127.0.0.1:25345
# HTTP authentication parameters, specifying username and password enables
# proxy authentication.
#Username = ...
# Avoid using spaces in the password field
#Password = ...
وبدلاً من ذلك، إذا كان لديك بالفعل تكوين wireguard، فيمكنك استيراده في ملف تكوين wireproxy مثل هذا:
WGConfig =
# Same semantics as above
[TCPClientTunnel]
...
[TCPServerTunnel]
...
[Socks5]
...
يتم أيضًا دعم وجود أقران متعددين. يجب تحديد AllowedIPs
بحيث يعرف Wireproxy النظير الذي سيتم إعادة توجيهه إليه.
[Interface]
Address = 10.254.254.40/32
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
[Peer]
Endpoint = 192.168.0.204:51820
PublicKey = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY=
AllowedIPs = 10.254.254.100/32
PersistentKeepalive = 25
[Peer]
PublicKey = ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ=
AllowedIPs = 10.254.254.1/32, fdee:1337:c000:d00d::1/128
Endpoint = 172.16.0.185:44044
PersistentKeepalive = 25
[TCPServerTunnel]
ListenPort = 5000
Target = service-one.servicenet:5000
[TCPServerTunnel]
ListenPort = 5001
Target = service-two.servicenet:5001
[TCPServerTunnel]
ListenPort = 5080
Target = service-three.servicenet:80
بإمكان Wireproxy أيضًا السماح للأقران بالاتصال به:
[Interface]
ListenPort = 5400
...
[Peer]
PublicKey = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY=
AllowedIPs = 10.254.254.100/32
# Note there is no Endpoint defined here.
يدعم Wireproxy الكشف عن نقطة النهاية الصحية لأغراض المراقبة. تحدد الوسيطة --info/-i
عنوانًا ومنفذًا (على سبيل المثال، localhost:9080
)، والذي يعرض خادم HTTP الذي يوفر قياس الحالة الصحية للخادم.
يتم حاليًا تنفيذ نقطتي نهاية:
/metrics
: يعرض معلومات البرنامج الخفي wireguard، وهذا يوفر نفس المعلومات التي ستحصل عليها مع wg show
. يعرض هذا مثالاً على الشكل الذي ستبدو عليه الاستجابة.
/readyz
: يستجيب هذا باستخدام json الذي يُظهر آخر مرة تم فيها تلقي كرة من عنوان IP محدد باستخدام CheckAlive
. عند تعيين CheckAlive
، يتم إرسال اختبار ping إلى العناوين الموجودة في CheckAlive
لكل ثانية CheckAliveInterval
(القيمة الافتراضية هي 5) عبر wireguard. إذا لم يتم استلام كرة من أحد العناوين خلال الثواني الأخيرة CheckAliveInterval
(+2 ثانية لبعض الفسحة لحساب زمن الوصول)، فسوف يستجيب بـ 503، وإلا 200.
على سبيل المثال:
[Interface]
PrivateKey = censored
Address = 10.2.0.2/32
DNS = 10.2.0.1
CheckAlive = 1.1.1.1, 3.3.3.3
CheckAliveInterval = 3
[Peer]
PublicKey = censored
AllowedIPs = 0.0.0.0/0
Endpoint = 149.34.244.174:51820
[Socks5]
BindAddress = 127.0.0.1:25344
/readyz
سوف يستجيب مع
< HTTP/1.1 503 Service Unavailable
< Date: Thu, 11 Apr 2024 00:54:59 GMT
< Content-Length: 35
< Content-Type: text/plain; charset=utf-8
<
{"1.1.1.1":1712796899,"3.3.3.3":0}
ومن أجل:
[Interface]
PrivateKey = censored
Address = 10.2.0.2/32
DNS = 10.2.0.1
CheckAlive = 1.1.1.1
/readyz
سوف يستجيب مع
< HTTP/1.1 200 OK
< Date: Thu, 11 Apr 2024 00:56:21 GMT
< Content-Length: 23
< Content-Type: text/plain; charset=utf-8
<
{"1.1.1.1":1712796979}
إذا لم يتم تعيين أي شيء لـ CheckAlive
، فسيكون كائن JSON فارغًا بـ 200 هو الاستجابة.
يعتمد النظير الذي يتم توجيه حزمة ping لـ ICMP إليه على مجموعة AllowedIPs
لكل نظير.