易于wg-Quick
- 入门
- Docker
- Terraform
- 先决条件
- 安装
- 用法
- 特殊用法
- 样本输出
- 使用生成的配置
- 微调
- 执照
- 致谢
入门
这些说明将使您在本地计算机上启动并运行该项目的副本。该机器(称为集线器)将充当VPN浓缩器。所有其他同行都连接到集线器(如“道路战士”配置中)。
Docker
基于Alpine Linux,Wineguard Tools和Libqrencode的Docker容器图像可从ghcr.io获得。
curl -4 ifconfig.co/ip > extnetip.txt
docker run --rm -it -v \"$PWD:/pwd\" ghcr.io/burghardt/easy-wg-quick
请注意, extnetip.txt必须通过上面的curl命令与服务器IP填充,或者如果您使用主机上的生成配置(而不是容器)。
Terraform
可以从TF-GCP-easy- easy-wg-quick -WG-Quick的Terraform代码。
先决条件
在本地机器,路由器,VPS或容器上安装操作系统的Vireguard。这将是您的枢纽。
作为依赖/bin/sh , wg , wg-quick , awk , grep和ip命令,应在集线器上可用。如果没有ip ,则需要用户将脚本中的EXT_NET_IF和EXT_NET_IP变量设置为外部网络接口名称和IP地址(或edit wghub.conf )。可选的qrencode可用于生成用于移动应用程序的QR码。
Debian,Ubuntu
sudo apt install wireguard-tools mawk grep iproute2 qrencode
Fedora,Rhel,Centos
sudo dnf install wireguard-tools gawk grep iproute qrencode
freebsd
sudo pkg install net/wireguard-tools graphics/libqrencode
macos
brew install wireguard-tools qrencode
安装线虫工具(和模块)
此脚本仅需要安装工具,但是还需要使用VireGuard模块(或用户空间实现)。详细的各种操作系统的安装指南可在Wileguard.com/install上找到。
同行还需要安装线虫。支持Android和iOS。 UCI配置片段支持OpenWRT客户端。
安装
只需下载脚本并使其与chmod可执行。
wget https://raw.gith*ubuserco*nt*ent.com/burghardt/easy-wg-quick/master/easy-wg-quick
chmod +x easy-wg-quick
请注意,您也可以使用一个简短的URL。
wget https://*git.i*o/*fjb5R -O easy-wg-quick
chmod +x easy-wg-quick
或克隆存储库。
git clone https://gi**thub.*com/burghardt/easy-wg-quick.git
用法
脚本不需要任何参数。只需运行它,它将为轮毂和一个对等式创建可用的线虫配置。任何顺序调用都会在同一集线器中创建另一种对等配置。
./easy-wg-quick # 1st run creates hub configuration and one client
./easy-wg-quick # any other runs creates additional clients
将参数传递给脚本会创建使用名称而不是序列编号的配置文件,以帮助记住哪个配置是哪个设备。以下命令将创建wgclient_client_name.conf文件。
./easy-wg-quick client_name
特殊用法
-h / —螺旋
显示所有支持参数的帮助。
-i / – int
将初始配置写入文本文件而不创建客户端或集线器配置。如果要更改自动检测或默认配置值,此选项将很有用。重复使用客户端名称的脚本以创建最终配置。
-c / – 清除
要重新开始,手动删除所有*.bak , *.conf , *.key和*.psk文件。如果您还需要删除初始配置选项,还可以删除所有*.txt文件。该脚本没有删除任何内容。
-D / – 安装wg-Quick
此选项将根据当前操作系统(支持Linux,FreeBSD,OpenBSD和Darwin)从官方Wireguard GitHub镜像中下载并安装WG-Quick脚本。
如果作为root运行,它将在/usr/local/sbin中安装wg-quick 。如果作为普通用户运行,它将使用$HOME/.local/bin 。
-U / – 升级
这将下载该脚本的最新版本,并将原始文件替换为下载的版本。
样本输出
No seqno.txt... creating one!
No wghub.key... creating one!
No wghub.conf... creating one!
WireGuard hub address is 10.13.1.140:51820 on wlp9s0.
Note: customize [Interface] section of wghub.conf if required!
Note: passing argument to script creates client configuration with supplied
name to help remembering which config was for which device. If you
didn\'t pass any argument you can still rename created file manually
with command:
mv -vi wgclient_10.conf wgclient_name.conf
No wgclient_10.conf... creating one!
█████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████
████ ▄▄▄▄▄ █▀██ ▀▄▀▄█▄ ▀▄ █▀▀▄█▄▄▀ ▄▀██▀▀▀▀█▄ █▀▀▄█ ▄▀▀ █▄▀█ ▄▄▄▄▄ ████
████ █ █ █▀▄▀ ▀█▀▄▄▄ ▄ ▀█ ▄██▄█ ▀▀▄ ███▀▀▄▄ ▀ ▄▄▀███▄▀▀ ▀▄█ █ █ ████
████ █▄▄▄█ █▀▀▀██▀▄██ ▀▄███▀▀▀▀▄▄ ▄▄▄ ▄ ▀██ ▄█▀▀ █▀██▄▀█▄█ █▄▄▄█ ████
████▄▄▄▄▄▄▄█▄█▄▀ ▀▄▀▄▀ ▀▄▀▄█ █▄█ █ █▄█ █ █ ▀ ▀▄█ ▀▄▀ ▀▄▀ ▀▄█▄█▄▄▄▄▄▄▄████
████▄▄ █▄ ▄ ██ ▄▄▄█ ▀█▀▄ ▀▄█▄▄█▄▄ ▄ █ █▀▄▀▄▀█▄▀▄▀▀▄▄ █▄ ▀▄▀ ▀ █████
█████▀ ▄▀▀▄▀▀▄█▀ █▀ ▀▀▄▀█▄█▄ ▄▀▀▄▄▄█ ▄▀▀█ ▄ ▀▀▄ ▄▄▄ ▀ █▀▀▀██▀▄█ ▄███████
████ ▄███ ▄▀█▄▀█▄▀ ███▀▀▀▀▀▀▄ ▄ ▀ ██▀ ▄███ ▄ ▀ ▀ ▄▄▀▄█▀▄▀▀ █▀ ▄▄▀ ████
█████▀ ▀▀▄ ▄▀▄▀▄██▄█ ▀ ▀▄▀█ █ █▀▀▄ ▀█▀▄▀█▀▀▄▄█▀ ██▀█▄▄▀█▄ ▀ ▀██▀▄▀████
████▀▄▄▀▀ ▄▄▄▄▄█ ▀█ ▀▀ ▀█ █▀█ ▀▀▄ ▀█▀██▀█ ▄▀▀▀▀▄▀ █▀▄▄▄ █ ▀▀▀ ▄▄ █████
████▀▄▄██ ▄▀▀▀▀█▄▄▄ ▀▄█ ▀▀ ▄▄▄ █▀▄ █▄▄ ▄███▀▄▀██ ▀▀██ ▄ ▀▄ ▄██▀▄████
████▄ ███▄ ▀▄█ ▄▀▄▀▀▀▀▄▀▀▄▄▀ ▄ ▄▄▄▀▄▄█▄▄ ▀█▄▄▀▀▀▄▄▄▀ ▀▄██▀ ▄▄ ████
████ █▄▀▀ ▄██▀▄ █▄▀▄ ▀ █▀ ▄ ▄██▀█ ▄ ██▀▄▄▀ █ ▄▄█ ▀▀ ▄▀█ ▄ ██ ▀▀▄▄████
████ ▄ ▀▄▄▄█▄█▀█▄ ▀▀▀ ▀▀▄▄█ ▀▄▀██ ▀▄█ █ █▄ █▀▀▀ ▀██ ▀▀ ▀▄▀ ██▀████
█████▄ ▀▄▀▄█▄ ▄▄▀█ ▄█ █▄▄▀ ▄▄▀█ ▄█▄▄▄ ▀▀▀▀ ▄▄ █ ▀▄█▄ ▄▄▀▀ █ ▀▄▀▄▄████
████ █▀█▀▄▄▀▀▄ ███ ▀█▀▀▄█▄ ▄ ▄███▀▄▄▀▀ ▀▀▀▀ ▄ █▄▀▄▄▄▀▄▀ ██ █▀ █ ▀████
█████▄▄█ ▄▄▄ █ ▄ ▀█▀ ▄█▀█▄ █▀▄▄ ▄▄▄ ▄ █▄█▄ ██▀▄█▀██▀ ▄ ▄▄▄ ▀▀▄█████
████▀█▀▄ █▄█ █▄█▄▀▀█ █▄▄ ▀███▀███ █▄█ ▄▄▄▀▀█ ▄██▀▀ ▀▀▄▄▄▄▄ █▄█ ██▄▀████
████ ▀ ▄▄ ▀█ ▄█ █▀ ▄█▄█▄▄▀████ ▄ ▄ ▄▄▄███▄▀██▄▄▄▄▄▀▄▄██ ▄ ▄▄▄█ ▄████
████ ▀ ▄▄ ▄ ▄▄ ▄▀▄█▄▀▀ █▄█▀ ▀█▀▀█ █▀██▀▀███▄▀▀▀█▄█▀ ▄█▄ ▄█▄█▀▄ ▀████
████▄▀▄▄▀▄▄█▀▄▄ █▄▄█▀ ▄▀▀█▄ ▄█▀██ ███ █▄▄█▀█▄▀▀▄ ▀▄▀▄ ▀██ ▀▀ ▀▀▄████
████ ▄▀▄▀▄▀ ▄▀▄ ▄ ▀█▄█ ▀▀▄█▄▀█▀▀▄██▀ ▄▀▀▄ ▄█▄██▀ ▄█▄▄▄ ▀ ██▄▀██▀▄████
████▀█ ▄█▄▄▄▄██▄ ▄▄▄█ ▄▀▄▄█▄█▄▀▀▀ █▀ █▀▀▄▀█▀█▀█▀▄█▄ ▀█▄█▀ ▀▄█▄█ ▄▀ ▄████
████▄▀▀█▄▄▄▀▀█▄ ▀█ ▄▀▄ ▀▀█▄▀▄▄▄ ▄▀ ▀▀▀▄▀█ █▀█ ▄▀ ▀█▄ ▀▀█▀▄▄█ █▄█▄██▀████
████▀█▀▄ ▀▄▄ █▄ ▀█▄ ▀ ▄▄▀█▀█▀▄██▀▄ ▄█▀█▀██▀ ▀▄█ ▀██▀▄█▄█▀ █ █▀ █████
█████ █ ▄▄▄ █▀ ▀██ ▀▄ ▄ █████▀█ ▄▀ ▄▄▄█ ▄▄█▄▄ ▄ ▄▄▄█▀▄▄▄▄▄▄▀ ▄█▄▄ █████
████▄█▄ ▄▀▄ ▄▀█▀██▄▀▄█▄█▀ ▄ █▀██ ▀▄ ▄▄▀▀▀▀█▀█ █▄ ▀▀ █ █▀ ▀ ▄██▀▄████
████▄▄ █ █▄▄▄▄ █ ▄▄▀█▄▀█ ▀▄▀ ▄▄ ▀ ▄█ █▄▀▀▄█▀▄ ▀███▀▀ ▄██ █▄▄█▀█▄▄▄▀████
████▀█▄ █▄▄█ █▀ ▄ ▀██ ▀ ▀▄▄▄▄██▄█▄▄▄█▄▄▄▀▀▄▀▄█▀ ▄█ ▄▀▄ ▀█ ▄█ ▄▄▀▄▄████
█████▄▄█▄█▄█▀▄█ ▀ █▄ ▀▀▀▀▀█▄█▄▄ ▄█ ▄▄▄ ▀▄▀██▄▄▀█▄▀▀ █▄█ ▄█ ▄▄▄ █ █▀████
████ ▄▄▄▄▄ █▄██▀▀█▀██▀▀▄█ ▄▀ ▄█▄█▀ █▄█ █▀▀▄█▄ █▄█▄▀█▀ █ █▄█ ▀▀▀▄████
████ █ █ █ █ ▀▄█ ▀███▄██▄▄ ▄ █ ▄▄ ▄▄█ ▄▀▀█▀▄▄▀▀█▄▄▄▀▀▀█ █ ▄▄▄▀ █████
████ █▄▄▄█ █ ▀▄ █▄▀█▀ ▄███▄ █ ▄ ▀█▄ ▄▀ ▀▄▀▀▄ █▀ ▄ ▀▄█▀▄█▀▄▄███▄▀▀ █████
████▄▄▄▄▄▄▄█▄▄██▄▄█▄█▄█▄▄▄▄█▄▄▄██▄█████▄▄█▄▄▄█▄▄████████▄▄▄█▄████████████
█████████████████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████████████████
Scan QR code with your phone or use \"wgclient_10.conf\" file.
Updating wghub.conf... done!
Important: Deploy updated wghub.conf configuration to WireGuard with wg-quick:
sudo wg-quick down ./wghub.conf # if already configured
sudo wg-quick up ./wghub.conf
sudo wg show # to check status
使用生成的配置
在集线器配置Wireguard上。
sudo wg-quick up ./wghub.conf
在对等扫描QR码或复制wgclient_10.conf上。再次显示QR码
qrencode -t ansiutf8 < wgclient_10.conf
或使用保存的QR代码
cat wgclient_10.qrcode.txt
要将整个网络与在OpenWRT路由器上运行的单个WireGuard客户端连接,请将生成的UCI客户端配置片段附加到您的路由器/etc/config/network文件。
cat wgclient_10.uci.txt
最后,在集线器上检查一切是否与sudo wg show一起使用。
interface: wghub
public key: kbaG3HxSDz3xhqiTNXlo1fZkFa+V6oTl+w0cSAQKxwQ=
private key: (hidden)
listening port: 51820
peer: th8qYu0R0mgio2wPu1kz6/5OOgi6l8iy7OobK590LHw=
preshared key: (hidden)
endpoint: 10.60.1.150:37218
allowed ips: 10.127.0.10/32
latest handshake: 50 minutes, 22 seconds ago
transfer: 32.64 MiB received, 95.24 MiB sent
微调
禁用外部接口自动检测
默认情况下, easy-wg-quick使用接口与VPN集线器的外部网络接口进行默认路由。如果自动检测失败或在集线器之外完成配置(IE在空气盖上的笔记本电脑上),则用户可以在extnetif.txt文件中设置接口名称:
echo vtnet0 > extnetif.txt
禁用外部IP地址自动检索
默认情况下, easy-wg-quick使用接口的IP地址,该接口的IP地址在VPN集线器的外部IP地址上对其进行了默认路由。如果在防火墙或NAT/NAT/PAT/MASQUARADING后面进行枢纽,这可能不是事实。用户可以在extnetip.txt文件中设置首选IP地址:
echo 192.168.1.2 > extnetip.txt
如果使用NAT/PAT/MASQUARADING,则可以尝试使用IfConfig.co之类的服务进行自动检测:
curl -4 ifconfig.co/ip > extnetip.txt
对于IPv6地址,可以使用Curl的-6开关。需要围绕IPv6地址的括号:
sed -i \'s/\\(.*\\)/[\\1]/\' extnetip.txt
禁用随机端口分配
默认情况下, easy-wg-quick使用范围1025-65535的随机端口号。当使用静态端口号进行防火墙配置或其他原因时,用户可以在portno.txt文件中设置首选端口号(在本示例中为80)。
echo 80 > portno.txt
禁用随机生成的内部网络地址
默认情况下, easy-wg-quick使用IPv4和IPv6随机生成的内部网络地址。可以使用以下命令设置自定义网络地址。
echo \"10.1.1.\" > intnetaddress.txt # for IPv4
echo \"fd90:d175:8e43:705d::\" > intnet6address.txt # for IPv6
IPv4的默认蒙版为 /24,IPv6的默认掩码为 /64。
设置网络掩码
要更改默认蒙版,请在名为intnetmask.txt (ipv4)和intnet6mask.txt (ipv6)的文件中设置新的掩码。
echo 172.16.0. > intnetaddress.txt
echo /16 > intnetmask.txt
echo fd9d:9648:0841:0c6e:3d28:94d9:: > intnet6address.txt
echo /112 > intnet6mask.txt
设置接口的最大传输单元(MTU)大小
要更改默认接口的最大传输单元(MTU)大小为1280字节,请在名为intnetmtu.txt的文件中写下一个新值。 MINGUARD MTU应在1280和1420字节之间。
echo 1380 > intnetmtu.txt
设置自定义DNS
设置IPv4解析器地址
默认情况下, easy-wg-quick使用1.1.1.1作为内部DNS。您可以使用下面的命令将自定义IPv4 DNS提供给客户端。
echo 8.8.8.8 > intnetdns.txt
设置IPv6解析器地址
默认情况下, easy-wg-quick使用2606:4700:4700 :: 1111,因为它是内部DNS。您可以使用以下命令为客户提供自定义IPv6 DNS。
echo 2001:4860:4860::8888 > intnet6dns.txt
设置自定义客户端的AllowedIPs
默认情况下,客户端的AllowedIPs变量设置为0.0.0.0/0, ::/0 ,通过VPN连接指导整个客户端的流量。如果要创建VPN拆分隧道配置,请在intnetallowedips.txt文件中存储所需的IP地址范围:
echo \'172.16.1.0/24, 172.16.2.0/24\' > intnetallowedips.txt
选择防火墙类型
防火墙类型是从操作系统猜测的。用于Linux iptables和ip6tables 。对于FreeBSD和MACOS,基本pf NAT规则已实施。
还有其他防火墙实现可供选择。下表比较了替代实现的功能。
| 防火墙类型 | IPv4 MASQ | IPv6 MASQ | IPv6 NDP | TCP MSS夹 |
|---|---|---|---|---|
| iptables | ✓ | ✓ | ✓ | ✓ |
| nft | ✓ | ✓ | ✓ | ✓ |
| UFW | ✓ | ✓ | ✓ | ✓ |
| Firewalld | ✓ | ✓ | _ | ✓ |
| pf | ✓ | – | _ | _ |
| 自定义 /无 | – | – | – | – |
文件fwtype.txt包含防火墙类型的名称。覆盖自动检测或禁用任何规则运行以下命令之一:
echo iptables > fwtype.txt # to choose Linux netfilter
echo nft > fwtype.txt # to choose Linux nftables
echo firewalld > fwtype.txt # to choose [firewalld]
echo ufw > fwtype.txt # to choose Uncomplicated Firewall
echo pf > fwtype.txt # to choose OpenBSD PF
echo custom > fwtype.txt # to include predefined commands from file
echo none > fwtype.txt # to skip any setup during wg-quick up/down
如果fwtype.txt包含commands.txt的单词custom内容,则包含在wghub.conf文件中。
commands.txt的格式为:
PostUp = echo \"command 1\"
PostUp = echo \"command 2\"
PostUp = ...
PostDown = echo \"command 1\"
PostDown = secho \"command 2\"
PostDown = ...
选择是否应启用/延期启用/禁用IP转发
从操作系统猜到了sysctl命令语法。支持Linux,FreeBSD(和MACOS)。由于启用IP转发需要集线器将VPN流量转发到Internet,因此默认情况下由邮政/末期设置来管理。
某些应用程序(即Docker)可能要求IP转发永远不会被禁用。在这种情况下,可能需要在sysctltype.txt中none设置,并且可能需要在其他地方管理IP转发设置。
文件sysctltype.txt包含sysctl类型的名称。覆盖自动检测或禁用任何命令,请使用以下命令之一:
echo linux > sysctltype.txt # to choose Linux sysctl command
echo freebsd > sysctltype.txt # to choose FreeBSD sysctl command
echo none > sysctltype.txt # to skip any setup during wg-quick up/down
启用IPv6
如果将在服务器隧道上检测到全局单播IPv6地址,则使用分配的内部IPv6地址创建。这使集线器的客户端可以通过集线器的IPv6 NAT连接到IPv6网络。
如果未检测到全局Unicast IPv6地址,则存在名为forceipv6.txt的文件,可以强行启用IPv6支持。
touch forceipv6.txt
要使用外部IPv6地址(即通过IPv6连接到集线器的Connect Client),只需将EXT_NET_IF和EXT_NET_IP变量设置为外部网络接口名称和IPv6地址(或edit wghub.conf )。
启用NDP代理(而不是默认的IPv6伪装)
默认情况下, easy-wg-quick使用apv6伪装的IPv6向同行提供IPv6连接。这更容易设置,并且仅需要单个IPv6全局单播地址才能工作。另一方面,网络地址翻译(NAT)有问题和局限性。
邻居发现代理(ND Proxy,NDP代理)允许端到端连接,但需要 /64网络分配给集线器。从这个 /64网络中,必须将子网组分开(即 /112)并分配给WireGuard接口。
要启用使用proxy_ndp String的代理NDP创建文件,名为ipv6mode.txt 。
echo proxy_ndp > ipv6mode.txt
当集线器具有2001:19F0:6C01:1C0D/64分配时,可以将其中的一部分分配给WireGuard界面(IE 2001:19F0:6C01:1C0D:40/112)。
echo 2001:19f0:6c01:1c0d:40:: > intnet6address.txt
echo /112 > intnet6mask.txt
请注意,仅在Linux上支持easy-wg-quick中的NDP代理模式。
重定向DNS
可能需要DNS重定向与TLS上的Pi-Hole或CloudFlare DNS等服务集成。这可以通过在wghub.conf中使用端口53 UDP/TCP重定向来实现。
PostUp = iptables -t nat -A PREROUTING -i %i -p udp -m udp --dport 53 -j DNAT --to-destination 1.1.1.1:53
PostUp = iptables -t nat -A PREROUTING -i %i -p tcp -m tcp --dport 53 -j DNAT --to-destination 1.1.1.1:53
PostDown = iptables -t nat -D PREROUTING -i %i -p udp -m udp --dport 53 -j DNAT --to-destination 1.1.1.1:53
PostDown = iptables -t nat -D PREROUTING -i %i -p tcp -m tcp --dport 53 -j DNAT --to-destination 1.1.1.1:53
使用IPv6时,应使用ip6tables独立设置类似规则。
PostUp = ip6tables -t nat -A PREROUTING -i %i -p udp -m udp --dport 53 -j DNAT --to-destination 2606:4700:4700::1111:53
PostUp = ip6tables -t nat -A PREROUTING -i %i -p tcp -m tcp --dport 53 -j DNAT --to-destination 2606:4700:4700::1111:53
PostDown = ip6tables -t nat -D PREROUTING -i %i -p udp -m udp --dport 53 -j DNAT --to-destination 2606:4700:4700::1111:53
PostDown = ip6tables -t nat -D PREROUTING -i %i -p tcp -m tcp --dport 53 -j DNAT --to-destination 2606:4700:4700::1111:53
交通控制
客户可以从wghub.conf中设置流量控制规则中受益。例如,在Linux集线器上设置SFQ调度程序是确保下载公平性的最简单方法,以便每个流程都可以依次发送数据,从而阻止任何单个客户端淹没其余的。此外,SFQ将防止在高带宽消耗期间增加潜伏期和潜伏期尖峰(又称Bufferbloat)。
PostUp = tc qdisc add dev %i root sfq perturb 10
在Linux客户端设置相同的情况下,应提高上传流的公平性。
坚持使用SystemD的配置
SystemD可以使用wg-quick.service为轮毂和客户端加载配置。请注意,还存在用于设置WireGuard接口的本机支持(自版本237以来)。
sudo cp wghub.conf /etc/wireguard/wghub.conf
sudo systemctl enable wg-quick@wghub
sudo systemctl start wg-quick@wghub
systemctl status wg-quick@wghub
执照
该项目是根据GPLV2许可证获得许可的 – 有关详细信息,请参见许可证文件。
致谢
OpenVPN的Easy-RSA是编写此脚本的灵感。
