zoukankan      html  css  js  c++  java
  • wireguard

    WireGuard是一种使用最新加密技术的简单,快速且安全的VPN。它的源代码占用空间较小,旨在比其他VPN协议(如OpenVPN和IPSec)更快,更精简。WireGuard仍在开发中,但是即使处于未优化的状态,它也比流行的OpenVPN协议要快。

    WireGuard配置就像设置SSH一样简单。通过服务器和客户端之间的公共密钥交换来建立连接。仅允许在其相应的服务器配置文件中具有其公钥的客户端连接。WireGuard设置了标准的网络接口(例如wg0和wg1),其行为与常见的eth0接口非常相似。这样就可以使用ifconfig和等标准工具来配置和管理WireGuard接口ip。

    本指南将在运行Ubuntu 18.04的Linode和客户端之间配置简单的对等连接。客户端可以是您的本地计算机,也可以是其他Linode。

    警告
    不要将WireGuard用于关键应用。该项目仍在进行安全测试,将来可能会频繁收到重要更新。
    在你开始之前固定链接
    您将需要对Linode或具有sudo特权的用户帐户具有root访问权限。
    设置系统的主机名。
    注意
    该GRUB 2内核需要本指南。现在GRUB 2,默认情况下,所有新Linode的所有发行版都使用内核启动。但是,如果您正在运行较早的发行版,则需要检查以查看正在运行哪个内核。您可以使用《更新内核指南》来检查您的内核版本并使用Cloud Manager对其进行更改。选择GRUB 2从引导设置:选择一个内核中的第4步下拉菜单更新你的Linode内核具有的Linode的云管理。
    安装WireGuard固定链接
    将Wireguard存储库添加到您的源列表中。然后,Apt将自动更新程序包缓存。

    sudo add-apt-repository ppa:wireguard/wireguard
    安装Wireguard。该wireguard软件包将安装所有必需的依赖项。

    sudo apt install wireguard
    然后,DKMS将构建Wireguard内核模块。如果成功,您将看到以下输出:

    wireguard:
    Running module version sanity check.

    • Original module
      • No original module exists within this kernel
    • Installation
      • Installing to /lib/modules/4.15.0-43-generic/updates/dkms/

    depmod...................

    DKMS: install completed.
    Setting up wireguard (0.0.20181218-wg1~bionic) ...
    Processing triggers for libc-bin (2.27-3ubuntu1) ...

    注意
    如果安装完成但未出现输出,则很可能是您的内核配置不正确。要仔细检查,请发出lsmod | grep wireguard命令。其输出不应为空。请参考上一节进行故障排除。
    配置WireGuard服务器固定链接
    为WireGuard服务器生成私钥和公钥对:

    umask 077
    wg genkey | tee privatekey | wg pubkey > publickey
    这会将私钥和公钥都保存到您的主目录中。可以分别使用cat privatekey和查看它们cat publickey。

    创建文件/etc/wireguard/wg0.conf并添加以下指示的内容。您需要在PrivateKey字段中输入服务器的私钥,并在字段中输入其IP地址Address。

    /etc/wireguard/wg0.conf
    1
    2
    3
    4
    5
    6
    7
    [Interface]
    PrivateKey =
    Address = 10.0.0.1/24, fd86:ea04:1115::1/64
    ListenPort = 51820
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    SaveConfig = true
    地址定义WireGuard服务器的专用IPv4和IPv6地址。VPN网络中的每个对等方对于此字段均应具有唯一值。

    ListenPort指定WireGuard将用于传入连接的端口。

    PostUp和PostDown分别定义了在打开或关闭接口之后要运行的步骤。在这种情况下,iptables用于设置Linux IP伪装规则,以允许所有客户端共享服务器的IPv4和IPv6地址。一旦隧道断开,规则将被清除。

    当服务运行时,只要添加新的对等方,SaveConfig就会告诉配置文件自动更新。

    设置防火墙规则固定链接
    允许SSH连接和WireGuard的VPN端口:

    sudo ufw allow 22/tcp
    sudo ufw allow 51820/udp
    sudo ufw enable
    验证设置:

    sudo ufw status verbose
    启动Wireguard服务固定链接
    启动Wireguard:

    wg-quick up wg0
    注意
    wg-quick可以方便地包装许多常用功能wg。您可以使用以下方式关闭wg0界面wg-quick down wg0
    启用Wireguard服务以在启动时自动重新启动:

    sudo systemctl enable wg-quick@wg0
    使用以下两个命令检查VPN隧道是否正在运行:

    sudo wg show
    您应该看到类似的输出:

    user@ubuntu:~$ sudo wg show
    interface: wg0
    public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
    private key: (hidden)
    listening port: 51820

    ifconfig wg0
    您的输出应类似于以下内容:

    user@ubuntu:~$ ifconfig wg0
    wg0: flags=209 mtu 1420
    inet 10.0.0.1 netmask 255.255.255.0 destination 10.0.0.1
    inet6 fd86:ea04:1115::1 prefixlen 64 scopeid 0x0
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 0 bytes 0 (0.0 B)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    Wireguard客户端固定链接
    设置客户端的过程类似于设置服务器。当使用Ubuntu作为客户端的操作系统时,客户端和服务器之间的唯一区别是配置文件的内容。如果您的客户端使用Ubuntu,请按照以上各节和本节中提供的步骤进行操作。有关在其他操作系统上的安装说明,请参阅WireGuard文档。

    如果尚未为客户端生成密钥对,请执行以下操作:

    umask 077
    wg genkey | tee privatekey | wg pubkey > publickey
    在客户端和服务器的配置文件之间的主要区别,wg0.conf是它必须包含自己的 IP地址,并且不包含ListenPort,PostUP,PostDown,和SaveConfig值。

    /etc/wireguard/wg0.conf
    1
    2
    3
    [Interface]
    PrivateKey =
    Address = 10.0.0.2/24, fd86:ea04:1115::5/64
    连接客户端和服务器固定链接
    有两种方法可以将对等信息添加到WireGuard。本指南将演示这两种方法。

    注意
    停止sudo wg-quick down wg0客户端和服务器上的接口。
    方法1固定链接
    第一种方法是wg0.conf使用服务器的公用密钥,公用IP地址和端口直接编辑客户端文件:

    /etc/wireguard/wg0.conf
    1
    2
    3
    4
    [Peer]
    PublicKey =
    Endpoint = :51820
    AllowedIPs = 10.0.0.2/24, fd86:ea04:1115::5/64
    wg在客户端和服务器上启用服务:

    wg-quick up wg0
    systemctl enable wg-quick@wg0
    方法2固定链接
    添加对等信息的第二种方法是使用命令行。由于SaveConfigWireguard服务器的配置文件中指定了该选项,因此该信息将自动添加到配置文件中。

    从服务器运行以下命令。将示例IP地址替换为客户端的IP地址:

    sudo wg set wg0 peer endpoint :51820 allowed-ips 203.0.113.12/24,fd86:ea04:1115::5/64
    验证连接。可以从客户端或服务器运行此命令:

    sudo wg
    无论选择哪种方法将对等信息添加到WireGuard,如果安装成功,命令的输出中都应该有一个Peer部分sudo wg。

    user@localhost:~$ sudo wg
    interface: wg0
    public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
    private key: (hidden)
    listening port: 51820

    peer: iMT0RTu77sDVrX4RbXUgUBjaOqVeLYuQhwDSU+UI3G4=
    endpoint: 10.0.0.2:51820
    allowed ips: 10.0.0.2/24, fd86:ea04:1115::/64

    wg0.conf重新启动服务后,此对等部分将自动添加到。如果要立即将此信息添加到配置文件中,可以运行:

    wg-quick save wg0
    可以使用相同的过程添加其他客户端。

    测试连接固定链接
    返回客户端并ping服务器:

    ping 10.0.0.1
    sudo wg
    运行wg命令的输出的最后两行应类似于:

    latest handshake: 1 minute, 17 seconds ago
    transfer: 98.86 KiB received, 43.08 KiB sent
    

    这表明您现在在服务器和客户端之间建立了专用连接。您也可以从服务器ping客户端,以验证连接是否可以同时进行。

    下一步固定链接
    可以扩展本指南中使用的过程以配置网络拓扑。如前所述,Wireguard是一项不断发展的技术。如果使用WireGuard,则应监视官方文档和待办事项列表以获取重要更新和新功能/即将推出的功能。

    加入我们的社区固定链接
    查找答案,提出问题并帮助他人。

    由Disqus提供动力的评论
    本指南是根据CC BY-ND 4.0许可证发布的。

  • 相关阅读:
    apache-kylin 权威指南—读书笔记
    数据仓库之数据仓库环境——读书笔记
    R 语言—基本绘图
    MapReduce 过程分析
    HDFS 的运行机制
    R 语言贷款月供数据分析
    UML 简介笔记
    为什么要学习 UML?
    scrum 项目的基本模式
    elasticsearch 集群配置
  • 原文地址:https://www.cnblogs.com/whoic/p/13024575.html
Copyright © 2011-2022 走看看