Klien wireguard yang menampilkan dirinya sebagai proksi atau terowongan sock5/http.
wireproxy
adalah aplikasi ruang pengguna sepenuhnya yang terhubung ke rekan wireguard, dan mengekspos proksi atau terowongan sock5/http pada mesin. Ini bisa berguna jika Anda perlu terhubung ke situs tertentu melalui rekan wireguard, namun tidak mau repot menyiapkan antarmuka jaringan baru karena alasan apa pun.
Saat ini, saya menjalankan wireproxy yang terhubung ke server wireguard di negara lain, dan mengkonfigurasi browser saya untuk menggunakan wireproxy untuk situs tertentu. Ini cukup berguna karena wireproxy sepenuhnya terisolasi dari antarmuka jaringan saya, dan saya tidak memerlukan root untuk mengkonfigurasi apa pun.
Pengguna yang menginginkan hal serupa tetapi untuk Amnezia VPN dapat menggunakan fork wireproxy ini oleh @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
Petunjuk untuk menggunakan wireproxy dengan tab container Firefox dan mulai otomatis di MacOS dapat ditemukan di sini.
# 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 = ...
Alternatifnya, jika Anda sudah memiliki konfigurasi wireguard, Anda dapat mengimpornya ke file konfigurasi wireproxy seperti ini:
WGConfig =
# Same semantics as above
[TCPClientTunnel]
...
[TCPServerTunnel]
...
[Socks5]
...
Memiliki banyak rekan juga didukung. AllowedIPs
perlu ditentukan sedemikian rupa sehingga wireproxy mengetahui peer mana yang akan diteruskan.
[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 juga memungkinkan rekan-rekan untuk terhubung dengannya:
[Interface]
ListenPort = 5400
...
[Peer]
PublicKey = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY=
AllowedIPs = 10.254.254.100/32
# Note there is no Endpoint defined here.
Wireproxy mendukung pemaparan titik akhir kesehatan untuk tujuan pemantauan. Argumen --info/-i
menentukan alamat dan port (misalnya localhost:9080
), yang memperlihatkan server HTTP yang menyediakan metrik status kesehatan server.
Saat ini dua titik akhir diterapkan:
/metrics
: Menampilkan informasi daemon wireguard, ini memberikan informasi yang sama dengan yang Anda dapatkan dengan wg show
. Ini menunjukkan contoh respons yang akan diberikan.
/readyz
: Ini merespons dengan json yang menunjukkan kapan terakhir kali pong diterima dari IP yang ditentukan dengan CheckAlive
. Ketika CheckAlive
diatur, ping dikirim ke alamat di CheckAlive
per CheckAliveInterval
detik (default ke 5) melalui wireguard. Jika pong belum diterima dari salah satu alamat dalam detik CheckAliveInterval
terakhir (+2 detik untuk beberapa kelonggaran memperhitungkan latensi), maka pong akan merespons dengan 503, jika tidak, 200.
Misalnya:
[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
akan merespons dengan
< 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}
Dan untuk:
[Interface]
PrivateKey = censored
Address = 10.2.0.2/32
DNS = 10.2.0.1
CheckAlive = 1.1.1.1
/readyz
akan merespons dengan
< 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}
Jika tidak ada yang disetel untuk CheckAlive
, objek JSON kosong dengan 200 akan menjadi responsnya.
Rekan yang menjadi tujuan rute paket ping ICMP bergantung pada AllowedIPs
yang ditetapkan untuk masing-masing rekan.