
缆线防护是一种快速、现代的 VPN 协议。
它是一种点对点 VPN,这意味着它不采用客户端-服务器架构,而是采用对等架构,与 OpenVPN 不同,它不依赖 PKI。 它的设置超级简单,可将多台机器连接在一起。
WireGuard 支持漫游,这意味着你可以在不同网络连接之间切换,而不必重新连接到对等网络。 在服务器上,它很少有用,但当其中一个对等方是笔记本电脑或智能手机等移动客户端时,它就能救命,因为 WireGuard 的使用是完全透明的。
我已经习惯了 OpenVPN,我甚至还维护了脍炙人口的剧本但是,WireGuard 在几乎所有方面都更胜一筹。
技巧
我做了一个线卫安装脚本来自动安装!
在本篇文章中,我将介绍如何在笔记本电脑和手机上使用 WireGuard,将它们的所有流量转发到服务器,同时实现双协议栈连接。
none
- none
- 在服务器上启用 IP 路由
- 在服务器上的 WireGuard 接口和公共接口之间启用 NAT
我们将在教程的最后了解如何添加多个客户端。
准备好了吗?
旋风网络免费加速器
none
仅供参考、计划将 WireGuard 模块集成到 Linux 内核中.
WireGuard 几乎可以在任何地方运行,所有的安装说明都在这里。网站上.
我通常在服务器上使用 Debian 9 或 Ubuntu 18.04。 在 Debian 上,您需要从杌陧
版本库,而在 Ubuntu 上则是通过 PPA。
#@#I recommend the cheap .50 VM from#@#瘜典. 您应该选择离您最近的地点。 他们提供 IPv4、IPv6 和每月 500 GB 的流量。
none
编辑:我使用卓越的MacOS 图形用户界面客户端现在!
旋风网络免费加速器
具体步骤如下:
- 在服务器上添加 WireGuard 接口
- 在客户端添加 WireGuard 接口
- 将服务器添加为客户端的对等设备
- none
- 调整配置,使客户端流量通过服务器传输
旋风网络免费加速器
WireGuard 的配置位于/etc/wireguard
.
我们将把我们的界面称为wg0
因此,配置文件将为/etc/wireguard/wg0.conf
.
none
[界面]地址 = 10.66.66.66.1/24,fd42:42:42:42::1/64
none
监听端口 = 1194
然后,让我们生成私钥。 WireGuard 使用简单的曲线25519用于对等方之间加密的公钥和私钥。
root@wg ~# wg genkeyAMfhWQnwtdht5HWGcW6se4AtBzb9iyTtX4XRKLo3o0A=
将其添加到配置中:
PrivateKey = <服务器私钥>;
我们完了
[界面]地址 = 10.66.66.66.1/24,fd42:42:42:42::1/64监听端口 = 1194PrivateKey = <服务器私钥>;
启动界面有两种方法。
手动方法是wg-quick
:
root@wg ~# wg-quick up wg0[#] ip link add wg0 type wireguard[#] wg setconf wg0 /dev/fd/63[#] IP 地址添加 10.66.66.1/24 dev wg0[#] IP 地址添加 fd42:42:42::1/64 dev wg0[#] ip link set mtu 1420 up dev wg0
您可以使用 .NET Framework 3.0 移除界面:
nonenone
我建议使用 systemd 服务并启用它:
systemctl start wg-quick@wg0none
root@wg ~# systemctl status wg-quick@wg0● [电子邮件保护]- 通过 wg-quick(8) 实现 wg0 的 WireGuard已加载:已加载 (/lib/systemd/system/)[电子邮件保护]间接;供应商预设:已启用)活动: 自 Sun 2019-01-27 11:43:19 UTC 起活动(已退出);1 分钟 1 秒前文件:man:wg-quick(8)man:wg(8)none主 PID:7512(代码=已退出,状态=0/SUCCESS)任务: 0 (限制:505)CG 组: /system.slice/system-wg\x2dquick.slice/[电子邮件保护] noneJan 27 11:43:19 wg wg-quick[7512]: [#] ip link add wg0 type wireguardJan 27 11:43:19 wg-quick[7512]: [#] wg setconf wg0 /dev/fd/63noneJan 27 11:43:19 wg wg-quick[7512]: [#] ip address add fd42:42:42::1/64 dev wg0Jan 27 11:43:19 wg wg-quick[7512]: [#] ip link set mtu 1420 up dev wg0
因此,界面将在启动时自动添加。
您可以通过以下命令查看接口状态和公钥wg show
或wg
:
root@wg ~# wg show接口:wg0公钥: <服务器公钥>;私钥:(隐藏)监听端口: 1194
旋风网络免费加速器
客户端的配置基本相同。
生成一个私人none
none
[界面]PrivateKey = <客户私钥>;none
把这个/etc/wireguard/wg0.conf
启动界面:
stanislas@mbp ~> wg-quick up wg0[#] 线卫--去乌通... INFO: (utun1) 2019/01/27 14:36:58 启动 wireguard-go 版本 0.0.20181222[+] wg0 的接口为 utun1[#] wg setconf utun1 /dev/fd/63[ifconfig utun1 inet 10.66.66.66.2/24 10.66.66.66.2 别名[#] ifconfig utun1 inet6 fd42:42::2/64 别名[#] ifconfig utun1 upnone
我在 macOS 上使用它,所以界面名称是utun1
.
编辑:我使用卓越的MacOS 图形用户界面客户端现在!
旋风网络免费加速器
现在我们的接口已经安装完毕,让我们来配置对等设备。 这样我们就能让服务器和客户端进行通信了。
在客户端添加以下内容
nonePublicKey = <服务器公钥>;端点 = <server public ip>:1194允许 IPs = 10.66.66.1/32,fd42:42:42::1/128
因此,所有发送到允许的 IP
none公钥
并发送至终点
.
在服务器上,使用客户端专用 IP 和不使用端点的情况基本相同:
nonePublicKey = <客户端公钥>;允许的 IPs = 10.66.66.2/32,fd42:42:42::2/128
等等......没有端点? 这不是点对点服务器吗?
none
从WireGuard 网站关于内置漫游:
客户端配置包含一个最初端点,这样它就能在收到加密数据之前知道向哪里发送加密数据。 服务器配置没有其对等(客户端)的任何初始端点。 这是因为服务器会通过检查正确验证数据的来源发现其对等方的端点。 如果服务器本身更改了自己的端点,并向客户端发送数据,客户端也会发现新的服务器端点,并同样更新配置。 客户端和服务器都会将加密数据发送到最近的 IP 端点,并对该 IP 端点的数据进行验证解密。 因此,两端都可以实现完全的 IP 漫游。
希望能说得通。 请记住,WireGuard 不会像 OpenVPN 那样创建隧道,而是会立即对每个数据包进行封装。
现在,重新启动服务器和客户端的 WireGuard 界面。 服务器不知道如何连接客户端,因此客户端应先发送一个数据包。
在客户端重新启动接口时,我们可以看到 WireGuard 添加了一条路由:
stanislas@mbp ~> wg-quick up wg0... [#] route -q -n add -inet 10.66.66.1/32 -interface utun1...
none10.66.1/32 via utun1 dev utun1
我们可以看到新的同行:
stanislas@mbp ~> sudo wg show接口: utun1公钥: <客户端公钥>;私钥:(隐藏)监听端口: 52926 peer: <服务器公钥>;端点: 95.179.208.197:53允许的 IP: 10.66.66.1/32, fd42:42:42::1/128
让我们试试连接它:
stanislas@mbp ~> ping -c 4 10.66.66.1ping 10.66.66.1 (10.66.66.1): 56 数据字节来自 10.66.66.1 的 64 个字节: icmp_seq=0 ttl=64 time=21.291 ms来自 10.66.66.1 的 64 个字节: icmp_seq=1 ttl=64 time=12.305 ms来自 10.66.66.1 的 64 个字节: icmp_seq=2 ttl=64 time=10.954 msnone --- 10.66.66.66.1 ping 统计数据 ---传输 4 个数据包,接收 4 个数据包,数据包丢失率为 0.0往返最小/最大/最大/最小差 = 10.954/14.209/21.291/4.126 毫秒 stanislas@mbp ~> ping6 -c 4 fd42:42:42::1PING6(56=40+8+8 字节) fd42:42:42::2 --> fd42:42:42::1none来自 fd42:42:42::1 的 16 个字节, icmp_seq=1 hlim=64 time=10.541 ms来自 fd42:42:42::1 的 16 个字节,icmp_seq=2 hlim=64 time=10.626 ms来自 fd42:42:42::1 的 16 个字节,icmp_seq=3 hlim=64 time=10.843 ms --- fd42:42:42::1 ping6 statistics ---传输 4 个数据包,接收 4 个数据包,数据包丢失率为 0.0往返最小值/最大值/最大值/STD- DEV = 10.428/10.610/10.843/0.152 毫秒
成功!
在服务器上,你应该看到数据已经传输,还应该看到显示了一个动态端点:
root@wg ~# wg接口:wg0公钥: <服务器公钥>;私钥:(隐藏)监听端口: 53 peer: <客户端公钥>;endpoint: <client's router public IPv4>:52926允许的 IPS: 10.66.66.2/32, fd42:42:42::2/128最新握手时间: 2分 43秒前传输:接收 1.05 KiB,发送 988 B
端点是客户端的公共 IP 地址(如果是 NAT,则是路由器的 IP 地址),由于我们没有设置端口或端点,所以是一个随机端口。
您可以尝试从服务器上 ping 您的客户端,应该可以成功(如果客户端的防火墙没有阻止传入连接)。
现在我们的两个对等设备可以通信了,让我们让客户端的所有流量都通过服务器。
旋风网络免费加速器
旋风网络免费加速器
首先,我们需要在服务器上启用 IPv4 和 IPv6 路由,这样它才能转发数据包。
echo "net.ipv4.ip_forward = 1net.ipv6.conf.all.forwarding = 1" > /etc/sysctl.d/wg.conf sysctl --system
旋风网络免费加速器
我们希望在服务器的公共接口 (役3
对我来说)和wg0
接口。
为此,我们需要两条 iptables 命令:
iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADEnone
好消息是,当界面启动时,WireGuard 可以为我们执行这些操作。 为了保持清洁,我们希望在界面关闭时移除它们,因此需要将以下内容添加到[界面]
服务器上的数据块:
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADEPostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
就这样吧!
旋风网络免费加速器
我们可以利用允许的 IP
选项来覆盖客户端上的默认路由。
只需将该行改为
允许的 IP = 0.0.0.0/0,::/0
重新启动接口。 完成后,所有客户端数据包都将通过服务器!
旋风网络免费加速器
none
第三个对等设备的配置文件将如下所示:
[界面]PrivateKey = <客户 2 私钥>;地址 = 10.66.66.66.3/24,fd42:42:42:42::3/64 nonePublicKey = <服务器公钥>;端点 = <服务器公共 IP>:1194允许的 IP = 0.0.0.0/0,::/0
在服务器上
nonePublicKey = <客户端 2 公钥>;允许的 IPs = 10.66.66.3/32,fd42:42:42::3/128
请注意,由于客户端没有有效的初始端点(= 公共 IP 地址和开放/转发端口),因此不会将其他客户端作为对等端点。
旋风网络免费加速器
旋风网络免费加速器
我通常使用ipv6-test.com或ipleak.net来验证我的流量是否通过 VPN,包括 IPv6。
旋风网络免费加速器
如果需要从私钥获取公钥,可以将私钥导入none
喜欢:
wg genkey | wg pubkey
要在两个文件中获得一对:
wg genkey | tee privatekey | wg pubkey > publickey
或在终端输出中:
private_key=\$(wg genkey)public_key=\$(echo \$private_key | wg pubkey)echo "私钥: \$private_key";echo "public key: \$public_key";
旋风网络免费加速器
在这里,我们使用双栈 VPN,对等方通过 IPv4 连接。
我更喜欢使用 IPv4 端点,因为有时我所在的网络只有 IPv4,但你也可以通过 IPv6 连接服务器。
私有地址也可以是纯 IPv4 或纯 IPv6,但最好是双栈!
旋风网络免费加速器
如果您想在连接时更改客户端的 DNS 解析器,有一个小提示。 这样做有很多原因:
- 使用新路由后,你的本地网络将无法访问。 因此,如果你的 DHCP 服务器推送的 DNS 服务器位于本地网络,你就完蛋了。 (或者使用
none
在客户端) - 您要使用私人/自行托管的 DNS 服务器,如皮孔
- 您想在没有 VPN 的平台上使用特定的 DNS 服务器,例如 Android
noneAdguard DNSnone
要指定 DNS 服务器,请添加域名解析
选项的[界面]
块:
[界面]... dns = 176.103.130.130,176.103.130.131
旋风网络免费加速器
WireGuard 使用 UDP。 众所周知,使用 OpenVPN 绕过封锁端口的方法是在 443 端口上使用 TCP 来模拟 HTTPS,但这种方法速度较慢。
在 OpenVPN 和 WireGuard 上,我通常通过 UDP 连接到 53 端口,因为 DNS 从未被阻止(除非您的网络有 DPI......)。
旋风网络免费加速器
none
关于安卓应用, 您有 3 种方法来创建接口:
- 从文件或存档创建
- 从 QR 码创建
- 从零开始
使用以下工具在电脑上生成 QR 码非常简单qrencode:
none
none
旋风网络免费加速器
文章写了很久,现在让我们看看配置文件的样子。
旋风网络免费加速器
[界面]地址 = 10.66.66.66.1/24,fd42:42:42:42::1/64PostUp = iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADEPostDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE监听端口 = 53PrivateKey = <服务器私钥>; nonePublicKey = <客户端 1 公钥>;允许 IP = 10.66.66.2/32,fd42:42:42::2/128 nonePublicKey = <客户端 2 公钥>;none
旋风网络免费加速器
[界面]nonenonedns = 176.103.130.130,176.103.130.131 nonePublicKey = <服务器公钥>;端点 = <服务器公共 IP>:53允许的 IP = 0.0.0.0/0,::/0
旋风网络免费加速器
[界面]none地址 = 10.66.66.66.3/24,fd42:42:42:42::3/64dns = 176.103.130.130,176.103.130.131 nonePublicKey = <服务器公钥>;端点 = <服务器公共 IP>:53允许的 IP = 0.0.0.0/0,::/0

应用程序中是这样显示的
旋风网络免费加速器
WireGuard 超级棒,而且易于设置。
有了它,我几乎可以从任何地方(53 端口)安全连接(加密),获得 IPv6 连接(双协议栈),同时屏蔽广告(AdGuard)并获得极快的速度!
WireGuard 仍在积极开发中,并获得了大量支持和捐赠。 几个月来,我一直用它来连接服务器(即将发布的博文),从未遇到过任何问题。
好好享受吧!