ไคลเอนต์ wireguard ที่แสดงตัวเองเป็นพร็อกซีหรือทันเนลของถุงเท้า5/http
wireproxy
เป็นแอปพลิเคชันพื้นที่ผู้ใช้โดยสมบูรณ์ที่เชื่อมต่อกับเพียร์ wireguard และเปิดเผยพร็อกซีหรือทันเนลของ Socks5/http บนเครื่อง สิ่งนี้มีประโยชน์หากคุณต้องการเชื่อมต่อกับบางไซต์ผ่านทางเพียร์ป้องกันสาย แต่ไม่ต้องกังวลกับการตั้งค่าอินเทอร์เฟซเครือข่ายใหม่ไม่ว่าด้วยเหตุผลใดก็ตาม
ขณะนี้ ฉันใช้ 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 daemon ซึ่งจะให้ข้อมูลเดียวกันกับที่คุณจะได้รับจาก wg show
นี่จะแสดงตัวอย่างว่าการตอบสนองจะเป็นอย่างไร
/readyz
: สิ่งนี้ตอบสนองด้วย json ซึ่งแสดงครั้งสุดท้ายที่ได้รับ pong จาก IP ที่ระบุด้วย CheckAlive
เมื่อตั้ง CheckAlive
แล้ว ping จะถูกส่งไปยังที่อยู่ใน CheckAlive
ต่อ CheckAliveInterval
วินาที (ค่าเริ่มต้นคือ 5) ผ่านทาง wireguard หากไม่ได้รับ Pong จากหนึ่งในที่อยู่ภายในช่วง 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 จะเป็นการตอบสนอง
เพียร์ที่แพ็กเก็ตปิง ICMP ถูกกำหนดเส้นทางไปจะขึ้นอยู่กับ AllowedIPs
ที่ตั้งค่าไว้สำหรับเพียร์แต่ละตัว