如何在 Ubuntu 22.04 上设置 WireGuard VPN如何在 Ubuntu 22.04 上设置 WireGuard VPN如何在 Ubuntu 22.04 上设置 WireGuard VPN如何在 Ubuntu 22.04 上设置 WireGuard VPN
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 22.04 上设置 WireGuard VPN

本教程适用于这些操作系统版本

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 20.04(Focal Fossa)

在此页

  1. 先决条件
  2. 第 1 步 - 安装 Wireguard 并生成密钥对
  3. 第 2 步 - 选择 IPv4 和 IPv6 地址
    1. 选择 IPv4 范围
    2. 选择 IPv6 范围

    1. 创建 Wireguard 对等密钥对
    2. 创建对等配置文件
    3. 配置对等点以通过隧道路由所有流量
    4. 配置对等 DNS 解析器

    Wireguard 是一种开源跨平台虚拟专用网络 (VPN) 实现,它使用最先进的加密技术。它支持 IPv4 和 IPv6 连接。它比 IPSec 和 OpenVPN 协议更快、更简单且功能更强大。它被设计为运行在嵌入式接口和超级计算机上的通用 VPN,可运行在 Linux、Windows、macOS、iOS、Android 和各种其他平台上。

    Wireguards 加密使用私钥和公钥进行工作,以便对等方在它们之间建立加密隧道。

    本教程将介绍如何在 Ubuntu 22.04 服务器上安装 Wireguard VPN 并使用 Ubuntu 客户端连接到它。

    先决条件

    • A server running Ubuntu 22.04 supports both IPv4 and IPv6 connections.

    • A client running Ubuntu 22.04 to connect to the Wireguard server. For our tutorial, we will be using our local machine as our client but you can use a remote server for it.

    • A non-root user with sudo privileges.

    • The uncomplicated Firewall(UFW) is enabled and running.

    • Everything is updated.

      $ sudo apt update && sudo apt upgrade
      

    第 1 步 - 安装 Wireguard 并生成密钥对

    Ubuntu 22.04 附带最新版本的 Wireguard。安装线卫。

    $ sudo apt install wireguard
    

    下一步是为服务器生成私钥和公钥对。使用 wg genkey 命令为服务器创建私钥。

    $ wg genkey | sudo tee /etc/wireguard/private.key
    

    更改权限以保护私钥。 chmod go= 命令阻止其他用户和组访问该文件。您将在终端上收到编码密钥。请记下密钥,因为稍后将需要它。

    $ sudo chmod go= /etc/wireguard/private.key
    

    接下来,根据私钥生成相应的公钥。使用 wg pubkey 生成公钥。以下命令分为三部分,第一部分输出私钥,wg pubkey 命令使用该私钥生成公钥,然后存储在相应的文件中。

    $ sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
    

    您将再次在终端上收到公钥。记下它。

    第 2 步 - 选择 IPv4 和 IPv6 地址

    我们需要定义私有 IPv4 和 IPv6 地址以与您的 Wireguard 服务器和对等方一起使用。

    选择 IPv4 范围

    要将 Wireguard 与 IPv4 对等方一起使用,服务器需要为其隧道接口提供一系列私有 IPv4 地址。您可以从以下保留的地址块中选择任意范围的 IP 地址:

    • 10.0.0.0 到 10.255.255.255(10/8 前缀)
    • 172.16.0.0 到 172.31.255.255(172.16/12 前缀)
    • 192.168.0.0 到 192.168.255.255(192.168/16 前缀)

    对于我们的教程,我们将使用 10.8.0.0/24 作为第一个保留 IP 范围中的 IP 地址块。此范围最多允许 255 个对等连接。您还可以使用托管公司提供的私有 IP 范围。

    选择 IPv6 范围

    根据 RFC 算法,获得唯一 IPv6 前缀的推荐方法是将一天中的时间与机器 ID 等唯一值相结合。然后将这些值散列并截断以用作保留私有 fd00::/8 IP 块中的唯一地址。

    第一步是使用 date 实用程序收集 64 位时间戳。

    $ date +%s%N
    

    它将生成类似于以下内容的输出,即自 Unix 纪元时间(1970 年 1 月 1 日 00:00 UTC)以来经过的秒数。

    1659342559092041940
    

    记下该值以备后用。接下来,复制服务器的 machine-id 值。该值对于每个系统都是唯一的。

    $ cat /var/lib/dbus/machine-id
    

    您将获得类似的输出。

    d97e195db6584d63aeedfdc35dc83c7f
    

    接下来,将时间戳与 machine-id 结合起来,并使用 SHA-1 算法对字符串进行哈希处理。

    printf <timestamp><machine-id> | sha1sum
    

    替换之前上述命令中的 和 值。您将收到另一个哈希值。

    $ printf 1659342559092041940d97e195db6584d63aeedfdc35dc83c7f | sha1sum
    d789c02d9d8faef806d40ec15b307d4d9c8ec4bc  -
    

    运行以下命令以根据 RFC 算法修剪 printf 输出。

    $ printf d789c02d9d8faef806d40ec15b307d4d9c8ec4bc | cut -c 31-
    

    您应该得到以下输出。

    4d9c8ec4bc
    

    在上面的输出中,字节集是 4d 9c 8e c4 bc。通过以下方式在上面的 5 个字节后附加 fd 前缀来生成 IPv6 地址。

    使用先前使用 /64 子网大小生成的字节,结果前缀如下。

    Unique Local IPv6 Address Prefix
    fd4d:9c8e:c4bc::/64
    

    要为服务器分配 IP,请在最后一个 :: 字符后添加 1。结果地址将是 fd4d:9c8e:c4bc::1/64。对等点通过添加另一个增量来使用 IP 地址,例如 fd4d:9c8e:c4bc::2/64。

    第 3 步 - 配置 Wireguard

    生成配置文件并打开以进行编辑。

    $ sudo nano /etc/wireguard/wg0.conf
    

    将以下代码粘贴到其中。将 server_private_key 替换为步骤 1 中生成的私钥。您可以将侦听端口更改为任何您喜欢的端口。

    [Interface]
    PrivateKey = server_private_key
    Address = 10.8.0.1/24, fd4d:9c8e:c4bc::/64
    ListenPort = 51820
    SaveConfig = true
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    第 4 步 - 配置 Wireguard 网络

    要通过 Wireguard 服务器路由对等流量,您需要配置 IP 转发。打开文件 /etc/sysctl.conf 进行编辑。

    $ sudo nano /etc/sysctl.conf
    

    通过删除前面的井号来取消注释以下行。

    # Uncomment the next line to enable packet forwarding for IPv4
    net.ipv4.ip_forward=1
    
    # Uncomment the next line to enable packet forwarding for IPv6
    #  Enabling this option disables Stateless Address Autoconfiguration
    #  based on Router Advertisements for this host
    net.ipv6.conf.all.forwarding=1
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。使用以下命令验证新值。

    $ sudo sysctl -p
    net.ipv4.ip_forward = 1
    net.ipv6.conf.all.forwarding = 1
    vm.swappiness = 0
    

    现在,您的 Wireguard 服务器会将来自 VPN 以太网设备的所有传入流量转发到服务器上的其他设备,并从那里转发到公共互联网。这允许服务器通过服务器 IP 地址路由来自对等方的所有 Web 流量,并将隐藏客户端 IP 地址。

    下一步是配置防火墙规则以使转发正常工作。

    第 5 步 - 配置 Wireguard 服务器防火墙

    要允许 VPN 流量通过服务器防火墙,您需要启用提供即时动态网络地址转换 (NAT) 的伪装来路由客户端连接。

    找到 Wireguard 服务器的公共网络接口。

    $ ip route list default
    default via 209.23.8.1 dev eth0 proto static
    

    根据上面的命令,eth0 是公共接口。

    打开 Wireguard 配置文件以将防火墙规则添加到您的 Wireguard 服务器。

    $ sudo nano /etc/wireguard/wg0.conf
    

    将以下行粘贴到文件底部 SaveConfig=true 行之后。

    . . .
    PostUp = ufw route allow in on wg0 out on eth0
    PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    PreDown = ufw route delete allow in on wg0 out on eth0
    PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    PostUp 行在 Wireguard 服务器启动 VPN 隧道时运行。第一条规则允许转发 IPv4 和 IPv6 流量。第二条和第三条规则为 IPv4 和 IPv6 流量配置伪装。 PreDown 行在 Wireguard 服务器停止 VPN 隧道时运行。

    配置防火墙的最后一步是允许流量进出 Wireguard UDP 端口。使用简易防火墙 (UFW) 打开 Wireguard 端口。

    检查防火墙的状态。

    $ sudo ufw status
    

    您应该会看到如下内容。

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    

    打开在步骤 1 中配置的 51820 端口。如果您为 Wireguard 使用不同的端口,请打开该端口。

    $ sudo ufw allow 51820/udp
    

    禁用并重新启用 UFW 防火墙以加载在此步骤中修改的所有文件的更改。

    $ sudo ufw disable
    $ sudo ufw enable
    

    再次检查状态以确认。

    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    51820/udp                  ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    51820/udp (v6)             ALLOW       Anywhere (v6)
    

    您的 Wireguard 服务器配置为处理 VPN 流量,包括对等点的转发和伪装。

    第 6 步 - 启动 WireGuard 服务器

    Wireguard 可以配置为使用 wg-quick 脚本作为服务运行。启用 Wireguard 服务。

    $ sudo systemctl enable 
    

    服务名称的 wg0 部分对应于 /etc/wireguard/wg0.conf 文件。这意味着您可以使用不同的配置文件和服务创建任意数量的 VPN 隧道。

    启动 Wireguard 服务。

    $ sudo systemctl start 
    

    检查服务的状态。

    $ sudo systemctl status 
    

    您将获得类似的输出。

    ?  - WireGuard via wg-quick(8) for wg0
         Loaded: loaded (/lib/systemd/system/; enabled; vendor preset: enabled)
         Active: active (exited) since Mon 2022-08-01 11:35:59 UTC; 6s ago
           Docs: man:wg-quick(8)
                 man:wg(8)
                 https://www.wireguard.com/
                 https://www.wireguard.com/quickstart/
                 https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
                 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
        Process: 3935 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
       Main PID: 3935 (code=exited, status=0/SUCCESS)
            CPU: 216ms
    
    Aug 01 11:35:58 wireguard wg-quick[3935]: [#] wg setconf wg0 /dev/fd/63
    Aug 01 11:35:58 wireguard wg-quick[3935]: [#] ip -4 address add 10.8.0.1/24 dev wg0
    Aug 01 11:35:58 wireguard wg-quick[3935]: [#] ip -6 address add fd4d:9c8e:c4bc::/64 dev wg0
    Aug 01 11:35:59 wireguard wg-quick[3935]: [#] ip link set mtu 1420 up dev wg0
    Aug 01 11:35:59 wireguard wg-quick[3935]: [#] ufw route allow in on wg0 out on eth0
    Aug 01 11:35:59 wireguard wg-quick[3978]: Rule added
    Aug 01 11:35:59 wireguard wg-quick[3978]: Rule added (v6)
    Aug 01 11:35:59 wireguard wg-quick[3935]: [#] iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    Aug 01 11:35:59 wireguard wg-quick[3935]: [#] ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    Aug 01 11:35:59 wireguard systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
    

    第 7 步 - 安装和配置 Wireguard Peer

    在基于 Ubuntu 22.04 的对等节点上安装 Wireguard 客户端。

    $ sudo apt update
    $ sudo apt install wireguard
    

    如果您在本地 Ubuntu 桌面上安装,则可能预装了 Wireguard。

    创建 Wireguard 对等密钥对

    以与步骤 1 中相同的方式在对等点上生成密钥对。此外,为私钥授予权限。

    $ wg genkey | sudo tee /etc/wireguard/private.key
    $ sudo chmod go= /etc/wireguard/private.key
    

    创建公钥。

    $ sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
    

    创建对等配置文件

    要创建对等配置文件,您需要以下内容:

    • 在对等端生成的 base64 编码私钥。
    • 在 Wireguard 服务器上定义的 IPv4 和 IPv6 地址范围。
    • 来自 Wireguard 服务器的 base64 编码公钥。
    • Wireguard 服务器的公共 IP 地址和端口号。如果您的服务器和客户端有 IPv6 连接,则需要使用 IPv6 地址。

    创建并打开对等配置文件以进行编辑。

    $ sudo nano /etc/wireguard/wg0.conf
    

    将以下代码粘贴到其中。

    [Interface]
    PrivateKey = peer_private_key
    Address = 10.8.0.2/24
    Address = fd4d:9c8e:c4bc::2/64
    
    [Peer]
    PublicKey = JySX9hMJFyAqZA+mNvJsArKW7yY8I7ROsQKTZZR/RH8=
    AllowedIPs = 10.8.0.0/24, fd4d:9c8e:c4bc::/64
    Endpoint = 209.23.10.202:51820
    PersistentKeepalive = 15
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    第一个密钥是在对等方生成的私钥。第一个地址行使用先前选择的子网中的 IPv4 地址。第二个地址行使用先前选择的子网中的 IPv6 地址。

    第二个密钥是在服务器上生成的公钥。 AllowedIPs 使用之前选择的 IPv4 和 IPv6 范围,指示对等方仅在目标系统具有任一范围内的 IP 地址时通过 VPN 发送流量。如果仅使用 IPv4 连接,则可以省略 IPv6 地址。

    配置 Peer 以通过隧道路由所有流量

    查找系统用作其默认网关的 IP 地址。运行以下 ip route 命令。

    $ ip route list table main default
    

    您将获得类似的输出。

    default via 69.28.84.1 dev eth0 proto static
    

    记下网关 IP 地址和设备名称。查找对等方的公共 IP。

    $ ip -brief address show eth0
    

    您将收到类似的输出。

    eth0             UP             69.28.84.160/23 2607:f170:14:13::910/64 fe80::200:45ff:fe1c:54a0/64
    

    打开对等配置文件进行编辑。

    $ sudo nano /etc/wireguard/wg0.conf
    

    在 [Peer] 部分之前粘贴以下行。

    PostUp = ip rule add table 200 from 69.28.84.160
    PostUp = ip route add table 200 default via 69.28.84.1
    PreDown = ip rule delete table 200 from 69.28.84.160
    PreDown = ip route delete table 200 default via 69.28.84.1
    
    [Peer]
    . . .
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    当 IP 与系统公共 IP 匹配时,PostUp 命令创建一个规则来检查表 200 中的任何路由条目。 PreDown 命令确保由表 200 处理的流量使用 203.0.113.1 网关而不是 Wireguard 接口进行路由。

    配置对等 DNS 解析器

    如果 eth0 与您的以太网设备名称不同,请在服务器上运行以下命令。

    $ resolvectl dns eth0
    

    您将收到类似的输出。

    Link 2 (eth0): 209.208.127.65 209.208.25.18 2001:4860:4860::8888 2001:4860:4860::8844
    

    打开对等配置文件。

    $ sudo nano /etc/wireguard/wg0.conf
    

    在 [Peer] 行之前添加以下代码。

    DNS = 209.208.127.65 2001:4860:4860::8888
    
    [Peer]
    . . .
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    第 8 步 - 将对等公钥添加到 Wireguard 服务器

    检查 Wireguard 对等体上的公钥。

    $ sudo cat /etc/wireguard/public.key
    PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
    

    在您的 Wireguard 服务器上运行以下命令。

    $ sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2
    

    要更新现有对等点的 allowed-ips,请通过更改 IP 地址再次运行上述命令。

    检查服务器上隧道的状态。

    $ sudo wg
    interface: wg0
     public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
     private key: (hidden)
     listening port: 51820
    
    peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
     allowed ips: 10.8.0.2/32, fd24:609a:6c18::2/128
    

    第 9 步 - 将对等点连接到隧道

    安装 resolvconf 包,以防您通过 VPN 路由所有流量。

    $ sudo apt install resolvconf
    

    在对等体上启动隧道。

    $ sudo wg-quick up wg0
    

    您将收到类似的输出。

    [#] ip link add wg0 type wireguard
    [#] wg setconf wg0 /dev/fd/63
    [#] ip -4 address add 10.8.0.2/24 dev wg0
    [#] ip -6 address add fd4d:9c8e:c4bc::2/64 dev wg0
    [#] ip link set mtu 1420 up dev wg0
    [#] resolvconf -a tun.wg0 -m 0 -x
    [#] ip rule add table 200 from 69.28.84.160
    [#] ip route add table 200 default via 69.28.84.1
    

    检查对端隧道的状态。

    $ sudo wg
    interface: wg0
     public key: nbkscqPcItMsFtv3R/ylrcC9knA+3F0Z/UVCkGx/DFw=
     private key: (hidden)
     listening port: 45392
    
    peer: JySX9hMJFyAqZA+mNvJsArKW7yY8I7ROsQKTZZR/RH8=
     endpoint: 209.23.10.202:51820
     allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64
     latest handshake: 23 seconds ago
     transfer: 92 B received, 212 B sent
     persistent keepalive: every 15 seconds
    

    这确认了对等点和 VPN 之间的连接。

    验证对等方是否正在使用 VPN。

    $ ip route get 10.0.8.1
    10.0.8.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
       cache
    

    如果您使用的是 IPv6,请改用以下命令。

    $ ip -6 route get fd24:609a:6c18::1
    fd24:609a:6c18::1 from :: dev wg0 proto kernel src fd24:609a:6c18::2 metric 256 pref medium
    

    使用以下命令断开对等体。

    $ sudo wg-quick down wg0
    [#] ip link delete dev wg0
    [#] resolvconf -d tun.wg0 -f
    

    使用以下命令删除服务器上的对等配置。

    $ sudo wg set wg0 peer nbkscqPcItMsFtv3R/ylrcC9knA+3F0Z/UVCkGx/DFw= remove
    

    结论

    关于在 Ubuntu 22.04 服务器上设置和配置 Wireguard VPN 并将其与客户端连接的教程到此结束。如果您有任何问题,请在下面的评论中发表。

©2015-2025 艾丽卡 support@alaica.com