자신을 양말5/http 프록시 또는 터널로 노출하는 와이어가드 클라이언트입니다.
wireproxy
는 wireguard 피어에 연결하고 시스템의 양말5/http 프록시 또는 터널을 노출하는 완전한 사용자 공간 애플리케이션입니다. 이는 Wireguard 피어를 통해 특정 사이트에 연결해야 하지만 어떤 이유로든 새 네트워크 인터페이스를 설정할 필요가 없는 경우 유용할 수 있습니다.
현재 저는 다른 국가의 Wireguard 서버에 연결된 wireproxy를 실행하고 있으며 특정 사이트에 대해 wireproxy를 사용하도록 브라우저를 구성했습니다. wireproxy는 내 네트워크 인터페이스와 완전히 격리되어 있고 아무것도 구성하는 데 루트가 필요하지 않기 때문에 매우 유용합니다.
유사하지만 Amnezia VPN을 원하는 사용자는 @artem-russkikh가 제공하는 이 wireproxy 포크를 사용할 수 있습니다.
./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
Firefox 컨테이너 탭 및 MacOS에서 자동 시작과 함께 wireproxy를 사용하는 방법에 대한 지침은 여기에서 찾을 수 있습니다.
# 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]
...
여러 피어를 갖는 것도 지원됩니다. Wireproxy가 전달할 피어를 알 수 있도록 AllowedIPs
지정해야 합니다.
[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
인수는 서버의 상태 메트릭을 제공하는 HTTP 서버를 노출하는 주소와 포트(예: localhost:9080
)를 지정합니다.
현재 두 개의 엔드포인트가 구현되어 있습니다.
/metrics
: wireguard 데몬의 정보를 노출합니다. 이는 wg show
에서 얻을 수 있는 것과 동일한 정보를 제공합니다. 이는 응답이 어떻게 나타나는지에 대한 예를 보여줍니다.
/readyz
: CheckAlive
로 지정된 IP에서 탁구가 마지막으로 수신된 시간을 보여주는 json으로 응답합니다. CheckAlive
설정되면 Wireguard를 통해 CheckAliveInterval
초(기본값은 5)마다 CheckAlive
의 주소로 ping이 전송됩니다. 마지막 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
에 대해 아무것도 설정되지 않은 경우 200이 포함된 빈 JSON 개체가 응답이 됩니다.
ICMP 핑 패킷이 라우팅되는 피어는 각 피어에 설정된 AllowedIPs
에 따라 다릅니다.