ການກຳນົດຄ່າ WireGuard

ຈາກ wireguard.com:

WireGuard ແມ່ນ VPN ຮູບແບບໃໝ່ທີ່ເຮັດວຽກຢູ່ພາຍໃນ Linux Kernel ແລະ ນຳໃຊ້ການເຂົ້າລະຫັດລັບທີ່ທັນສະໄໝ. ມັນມີຈຸດປະສົງເພື່ອໃຫ້ໄວຂຶ້ນ, ງ່າຍຂຶ້ນ, ກະທັດຮັດກວ່າ ແລະ ມີປະໂຫຍດກວ່າ IPSec ໃນຂະນະທີ່ຫຼີກລ່ຽງຄວາມຫຍຸ້ງຍາກຫຼາຍຢ່າງ. ມັນຕັ້ງໃຈທີ່ຈະໃຫ້ມີປະສິດທິພາບສູງກວ່າ OpenVPN ຢ່າງຫຼວງຫຼາຍ. WireGuard ຖືກອອກແບບມາໃຫ້ເປັນ VPN ເພື່ອຈຸດປະສົງທົ່ວໄປ ສຳລັບການເຮັດວຽກໃນອິນເຕີເຟສທີ່ຝັງຕົວ ແລະ ຊຸບເປີຄອມພິວເຕີຄືກັນ ເຊິ່ງເໝາະສົມກັບຫຼາຍສະຖານະການທີ່ແຕກຕ່າງກັນ. ມັນເຮັດວຽກຜ່ານ UDP.

Fedora CoreOS ຮອງຮັບ WireGuard ຢ່າງເຕັມຮູບແບບມາພ້ອມກັບຕົວລະບົບ. ໜ້ານີ້ສະແດງວິທີການຕັ້ງຄ່າການເຊື່ອມຕໍ່ລະຫວ່າງເຊີເວີ Fedora CoreOS ແລະ ຄອມພິວເຕີເຄື່ອງອື່ນ. ມັນຈະກ່າວເຖິງການກຳນົດຄ່າພື້ນຖານຂອງໄຄລເອັນ, ແຕ່ບໍ່ໄດ້ລວມເຖິງການຕິດຕັ້ງ WireGuard ໃນໄຄລເອັນຂອງທ່ານ.

ມີສອງທາງເລືອກໃນການຕັ້ງຄ່າ WireGuard ໃນ Fedora CoreOS:

  • ການນຳເຂົ້າການກຳນົດຄ່າ WireGuard ໃນ NetworkManager

  • ການນຳໃຊ້ wg-quick

ການສ້າງຄີ (Keys)

ທ່ານຈຳເປັນຕ້ອງສ້າງຄີເພື່ອຕັ້ງຄ່າ WireGuard. ທ່ານສາມາດສ້າງຄີໃນເຄື່ອງເຮັດວຽກຂອງທ່ານ ຫຼື ໃນລະບົບ Fedora CoreOS ທີ່ກຳລັງເຮັດວຽກຢູ່.

ທຳອິດ, ໃຫ້ພວກເຮົາສ້າງຄີ WireGuard ສຳລັບລະບົບ Fedora CoreOS:

ສ້າງຄີ WireGuard ສຳລັບລະບົບ Fedora CoreOS
umask 077
wg genkey | tee fcos_private_key | wg pubkey > fcos_public_key

ບາດນີ້ ໃຫ້ພວກເຮົາສ້າງຄີ WireGuard ສຳລັບໄຄລເອັນ:

ສ້າງຄີ WireGuard ສຳລັບໄຄລເອັນ
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key

ທ່ານສາມາດເລືອກສ້າງ pre-shared key ເພື່ອເພີ່ມຄວາມປອດໄພ:

ສ້າງ preshared key ສຳລັບຄູ່ພີຣ໌ (peer) ນີ້
wg genpsk > fcos_client_psk

ທ່ານຄວນສ້າງ pre-shared key ສຳລັບແຕ່ລະຄູ່ພີຣ໌.

ການກຳນົດຄ່າ WireGuard ໃນ Fedora CoreOS

ບາດນີ້ທ່ານສາມາດແກ້ໄຂການກຳນົດຄ່າ Butane ຂອງທ່ານເພື່ອສ້າງໄຟລ໌ກຳນົດຄ່າ wg0:

ຕົວຢ່າງການກຳນົດຄ່າ Butane ດ້ວຍໄຟລ໌ກຳນົດຄ່າ WireGuard
variant: fcos
version: 1.7.0
storage:
  files:
    - path: /etc/wireguard/wg0.conf
      mode: 0600
      contents:
        inline: |
          [Interface]
          Address = 192.168.71.1/24,fdc9:3c6b:21c7:e6bd::1/64
          PrivateKey = 
          ListenPort = 51820

          [Peer]
          PublicKey = 
          PresharedKey = 
          AllowedIPs = 192.168.71.2/32,fdc9:3c6b:21c7:e6bd::2/128

ການນຳໃຊ້ NetworkManager

ຫາກທ່ານຕ້ອງການໃຊ້ການຮອງຮັບໃນ NetworkManager, ທ່ານສາມາດນຳເຂົ້າການກຳນົດຄ່າ WireGuard ດ້ວຍ oneshot unit:

ຕົວຢ່າງ systemd service unit ເພື່ອນຳເຂົ້າການກຳນົດຄ່າ WireGuard
systemd:
  units:
    - name: import-wireguard-config.service
      enabled: true
      contents: |
        [Unit]
        ConditionPathExists=!/etc/NetworkManager/system-connections/wg0.nmconnection
        Description=Import wireguard configuration to NetworkManager
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=nmcli connection import type wireguard file /etc/wireguard/wg0.conf
        [Install]
        WantedBy=multi-user.target

NetworkManager ຈະບໍ່ສົນໃຈຄຳສັ່ງ PostUp ແລະ PostDown ໃນການກຳນົດຄ່າ WireGuard. ຫາກທ່ານມີການກຳນົດຄ່າໄຟວໍທີ່ຈະນຳໃຊ້, ໃຫ້ແນ່ໃຈວ່ານຳໃຊ້ມັນດ້ວຍ unit ແຍກຕ່າງຫາກ ຫຼື ຈັດການດ້ວຍຕົນເອງ.

ຫາກທ່ານຕ້ອງການປ່ຽນແປງເພີ່ມເຕີມເພື່ອອັບເດດການກຳນົດຄ່າຂອງ WireGuard, ໃຫ້ລຶບການເຊື່ອມຕໍ່ ແລະ ນຳໃຊ້ມັນຄືນໃໝ່ຈາກໄຟລ໌ກຳນົດຄ່າທີ່ອັບເດດແລ້ວ.

ນຳເຂົ້າການກຳນົດຄ່າ WireGuard ທີ່ອັບເດດແລ້ວຄືນໃໝ່
$ sudo nmcli con delete wg0 && sudo nmcli con import type wireguard file /etc/wireguard/wg0.conf
Connection 'wg0' (1e4f869e-f95c-4221-b2b9-99726ffde92b) successfully deleted.
Connection 'wg0' (18cd8e61-1cc2-43a2-9f2e-467b75cd99da) successfully added.

ການນຳໃຊ້ wg-quick

ຫາກທ່ານຕ້ອງການໃຊ້ wg-quick ແທນການຮອງຮັບໃນ NetworkManager, ທ່ານສາມາດເພີ່ມສິ່ງຕໍ່ໄປນີ້ໃສ່ໃນການກຳນົດຄ່າ Butane ຂອງທ່ານ:

systemd:
  units:
    - name: wg-quick@wg0.service
      enabled: true

ຫາກທ່ານຕ້ອງການປ່ຽນແປງເພີ່ມເຕີມຕໍ່ກັບການກຳນົດຄ່າຂອງ WireGuard, ໃຫ້ໂຫຼດເຊີວິດຄືນໃໝ່ດ້ວຍ:

systemctl reload wg-quick@wg0.conf

ການກວດສອບການກຳນົດຄ່າໃນລະບົບ Fedora CoreOS

ບູດ Fedora CoreOS ແລະ ເຂົ້າສູ່ລະບົບ. ເມື່ອທ່ານລັນຄຳສັ່ງ sudo wg show ທ່ານຄວນຈະເຫັນສິ່ງນີ້:

ກວດສອບການກຳນົດຄ່າ WireGuard
[core@server ~]$ sudo wg show
interface: wg0
  public key: <fcos_public_key>
  private key: (hidden)
  listening port: 51820

peer: <client_one_public_key>
  preshared key: (hidden)
  endpoint: <Client IP Address>:51821
  allowed ips: 192.168.71.0/24, fdc9:3c6b:21c7:e6bd::/64

[core@server ~]$ sudo ip addr show wg0
12: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.71.1/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet6 fdc9:3c6b:21c7:e6bd::1/64 scope global
       valid_lft forever preferred_lft forever

<Client IP address> ຂ້າງເທິງແມ່ນ IP ຫຼື FQDN ຂອງຄອມພິວເຕີໄຄລເອັນ.

ການກຳນົດຄ່າ WireGuard ໃນໄຄລເອັນ

ບາດນີ້ທ່ານຈະຕ້ອງໄດ້ຕັ້ງຄ່າ WireGuard ໃນຄອມພິວເຕີໄຄລເອັນຂອງທ່ານດ້ວຍການກຳນົດຄ່າຕໍ່ໄປນີ້:

ການກຳນົດຄ່າ WireGuard ຂອງໄຄລເອັນ
[Interface]
Address = 192.168.71.2/24,fdc9:3c6b:21c7:e6bd::2/64
PrivateKey = <client_private_key>
ListenPort = 51821

[Peer]
PublicKey = <fcos_public_key>
PresharedKey = <fcos_client_psk>
Endpoint = <FCOS IP address>:51820
AllowedIPs = 192.168.71.0/24,fdc9:3c6b:21c7:e6bd::/64

<FCOS IP address> ແມ່ນ IP ຫຼື FQDN ຂອງເຊີເວີ FCOS.

ຂຽນການກຳນົດຄ່າຂ້າງເທິງໃສ່ໃນ /etc/wireguard/wg0.conf, ຕັ້ງໂໝດການເຂົ້າເຖິງໃນໄຟລ໌ກຳນົດຄ່າ ແລະ ຈາກນັ້ນນຳເຂົ້າການກຳນົດຄ່າໃນໄຄລເອັນຂອງທ່ານ:

ນຳເຂົ້າການກຳນົດຄ່າ WireGuard ໃນໄຄລເອັນ
[core@client ~]$ sudo chmod 0600 /etc/wireguard/wg0.conf
[core@client ~]$ sudo nmcli con import type wireguard file /etc/wireguard/wg0.conf

ຈາກນັ້ນກວດສອບການກຳນົດຄ່າຂອງທ່ານ:

ກວດສອບການກຳນົດຄ່າ WireGuard ໃນໄຄລເອັນ
[core@client ~]$ sudo wg show
interface: wg0
  public key: <client_one_public_key>
  private key: (hidden)
  listening port: 51821

peer: <fcos_public_key>
  preshared key: (hidden)
  endpoint: <FCOS IP address>:51820
  allowed ips: 192.168.71.0/24, fdc9:3c6b:21c7:e6bd::/64

[core@client ~]$ sudo ip addr show wg0
21: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.71.2/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet6 fdc9:3c6b:21c7:e6bd::2/64 scope global
       valid_lft forever preferred_lft forever

ການທົດສອບການເຊື່ອມຕໍ່ WireGuard

ບາດນີ້ທ່ານສາມາດປິງ (ping) ໄປຫາທີ່ຢູ່ IP WireGuard ຂອງເຊີເວີ Fedora CoreOS:

ປິງ (Ping) ເຊີເວີ Fedora CoreOS ຜ່ານ WireGuard ຈາກໄຄລເອັນ
[core@client ~]$ ping 192.168.71.1
PING 192.168.71.1 (192.168.71.1) 56(84) bytes of data.
64 bytes from 192.168.71.1: icmp_seq=1 ttl=64 time=0.439 ms
64 bytes from 192.168.71.1: icmp_seq=2 ttl=64 time=0.422 ms
64 bytes from 192.168.71.1: icmp_seq=3 ttl=64 time=0.383 ms
^C
--- 192.168.71.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2027ms
rtt min/avg/max/mdev = 0.383/0.414/0.439/0.023 ms

[core@client ~]$ ping6 fdc9:3c6b:21c7:e6bd::1
PING fdc9:3c6b:21c7:e6bd::1(fdc9:3c6b:21c7:e6bd::1) 56 data bytes
64 bytes from fdc9:3c6b:21c7:e6bd::1: icmp_seq=1 ttl=64 time=1.55 ms
64 bytes from fdc9:3c6b:21c7:e6bd::1: icmp_seq=2 ttl=64 time=0.454 ms
64 bytes from fdc9:3c6b:21c7:e6bd::1: icmp_seq=3 ttl=64 time=0.424 ms
64 bytes from fdc9:3c6b:21c7:e6bd::1: icmp_seq=4 ttl=64 time=0.424 ms
^C
--- fdc9:3c6b:21c7:e6bd::1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3054ms
rtt min/avg/max/mdev = 0.424/0.712/1.546/0.481 ms

ເມື່ອທ່ານລັນຄຳສັ່ງ sudo wg show ໃນໄຄລເອັນຂອງທ່ານ ທ່ານຄວນເຫັນການທັກທາຍ (handshake) ຫຼ້າສຸດ ແລະ ສ່ວນການຮັບສົ່ງຂໍ້ມູນ (transfer) ດ້ວຍຂໍ້ມູນທີ່ສົ່ງ ແລະ ຮັບ:

ກວດສອບການທັກທາຍ (handshake) ແລະ ມາດຕະການການຮັບສົ່ງຂໍ້ມູນ
[core@client ~]$ sudo wg show
interface: wg0
  public key: <client_one_public_key>
  private key: (hidden)
  listening port: 51821

peer: <fcos_public_key>
  preshared key: (hidden)
  endpoint: <Client IP address>:51820
  allowed ips: 192.168.71.0/24, fdc9:3c6b:21c7:e6bd::/64
  latest handshake: 9 seconds ago
  transfer: 22.02 KiB received, 22.28 KiB sent

ການກຳນົດເສັ້ນທາງ (Routing) ທຸກທຣາຟຟິກຜ່ານ WireGuard

ຫາກທ່ານວາງແຜນທີ່ຈະສົ່ງຕໍ່ທຣາຟຟິກທັງໝົດຂອງໄຄລເອັນຜ່ານ Fedora CoreOS, ທ່ານຈະຕ້ອງເປີດໃຊ້ IP Forwarding ແລະ ກຳນົດຄຳສັ່ງ PostUp ແລະ PostDown ບາງຢ່າງ:

ຕົວຢ່າງການກຳນົດຄ່າ Fedora CoreOS WireGuard ດ້ວຍ IP forwarding
variant: fcos
version: 1.7.0
storage:
  files:
    - path: /etc/sysctl.d/90-ipv4-ip-forward.conf
      mode: 0644
      contents:
        inline: |
          net.ipv4.ip_forward = 1

    - path: /etc/sysctl.d/90-ipv6-ip-forwarding.conf
      mode: 0644
      contents:
        inline: |
          net.ipv6.conf.all.forwarding = 1

    - path: /etc/wireguard/wg0.conf
      mode: 0600
      contents:
        inline: |
          [Interface]
          Address = 192.168.71.1/24,fdc9:3c6b:21c7:e6bd::1/64
          PrivateKey = 
          ListenPort = 51820

          PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
          PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE

          [Peer]
          PublicKey = 
          PresharedKey = 
          AllowedIPs = 192.168.71.0/24,fdc9:3c6b:21c7:e6bd::/64

systemd:
  units:
    - name: wg-quick@wg0.service
      enabled: true

Fedora CoreOS ນຳໃຊ້ ຊື່ດີໄວສ໌ອິນເຕີເຟສທີ່ຄາດການໄດ້ ໂດຍ ຄ່າເລີ່ມຕົ້ນ. ໃຫ້ແນ່ໃຈວ່ານຳໃຊ້ຊື່ອິນເຕີເຟສທີ່ຖືກຕ້ອງສຳລັບຮາດແວຂອງທ່ານໃນຄຳສັ່ງ PostUp ແລະ PostDown ຂ້າງເທິງ.

ຈາກນັ້ນໃຫ້ຕັ້ງ AllowedIPs = 0.0.0.0/0,::/0 ໃນ /etc/wireguard/wg0.conf ໃນການກຳນົດຄ່າໄຄລເອັນ ເພື່ອກຳນົດເສັ້ນທາງທຣາຟຟິກ IPv4 ແລະ IPv6 ທັງໝົດໃນຄອມພິວເຕີໄຄລເອັນຜ່ານອິນເຕີເຟສ WireGuard:

ການກຳນົດຄ່າສຳລັບການກຳນົດເສັ້ນທາງທຣາຟຟິກທັງໝົດໃນໄຄລເອັນຜ່ານ WireGuard:
[Interface]
Address = 192.168.71.1/24,fdc9:3c6b:21c7:e6bd::2/64
PrivateKey = <client_private_key>
ListenPort = 51821

[Peer]
PublicKey = <fcos_public_key>
PresharedKey = <fcos_client_psk>
Endpoint = <FCOS IP Address>:51820
AllowedIPs = 0.0.0.0/0,::/0