Un client wireguard qui s'expose en tant que proxy ou tunnels chaussettes5/http.
wireproxy
est une application entièrement en espace utilisateur qui se connecte à un homologue wireguard et expose un proxy chaussettes5/http ou des tunnels sur la machine. Cela peut être utile si vous devez vous connecter à certains sites via un homologue wireguard, mais que vous ne pouvez pas vous soucier de configurer une nouvelle interface réseau pour quelque raison que ce soit.
Actuellement, j'utilise Wireproxy connecté à un serveur Wireguard dans un autre pays et j'ai configuré mon navigateur pour utiliser Wireproxy pour certains sites. C'est très utile puisque wireproxy est complètement isolé de mes interfaces réseau et je n'ai pas besoin de root pour configurer quoi que ce soit.
Les utilisateurs qui souhaitent quelque chose de similaire mais pour Amnezia VPN peuvent utiliser ce fork de wireproxy de @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
Les instructions d'utilisation de wireproxy avec les onglets du conteneur Firefox et le démarrage automatique sur MacOS peuvent être trouvées ici.
# 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 = ...
Alternativement, si vous disposez déjà d'une configuration Wireguard, vous pouvez l'importer dans le fichier de configuration Wireproxy comme ceci :
WGConfig =
# Same semantics as above
[TCPClientTunnel]
...
[TCPServerTunnel]
...
[Socks5]
...
Avoir plusieurs pairs est également pris en charge. AllowedIPs
devraient être spécifiées de telle sorte que le proxy filaire sache vers quel homologue transmettre.
[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 peut également permettre à des homologues de s'y connecter :
[Interface]
ListenPort = 5400
...
[Peer]
PublicKey = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY=
AllowedIPs = 10.254.254.100/32
# Note there is no Endpoint defined here.
Wireproxy prend en charge l'exposition d'un point de terminaison d'intégrité à des fins de surveillance. L'argument --info/-i
spécifie une adresse et un port (par exemple localhost:9080
), qui expose un serveur HTTP qui fournit une métrique d'état de santé du serveur.
Actuellement, deux points de terminaison sont implémentés :
/metrics
: expose les informations du démon wireguard, cela fournit les mêmes informations que vous obtiendriez avec wg show
. Ceci montre un exemple de ce à quoi ressemblerait la réponse.
/readyz
: Cela répond avec un json qui indique la dernière fois qu'un pong est reçu d'une IP spécifiée avec CheckAlive
. Lorsque CheckAlive
est défini, un ping est envoyé aux adresses dans CheckAlive
par CheckAliveInterval
secondes (par défaut à 5) via Wireguard. Si un pong n'a pas été reçu de l'une des adresses au cours des dernières secondes CheckAliveInterval
(+2 secondes pour une certaine marge de manœuvre pour tenir compte de la latence), alors il répondra par un 503, sinon un 200.
Par exemple:
[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
répondrait avec
< 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}
Et pour :
[Interface]
PrivateKey = censored
Address = 10.2.0.2/32
DNS = 10.2.0.1
CheckAlive = 1.1.1.1
/readyz
répondrait avec
< 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}
Si rien n'est défini pour CheckAlive
, un objet JSON vide avec 200 sera la réponse.
L'homologue vers lequel le paquet ping ICMP est acheminé dépend des AllowedIPs
définis pour chaque homologue.