Mengonfigurasi WireGuard

WireGuard adalah VPN baru yang berjalan di dalam Kernel Linux dan menggunakan kriptografi mutakhir. WireGuard bertujuan menjadi lebih cepat, lebih sederhana, lebih ringan, dan lebih berguna daripada IPSec, sekaligus menghindari kerumitan yang besar. WireGuard dimaksudkan untuk memiliki kinerja yang jauh lebih baik daripada OpenVPN. WireGuard dirancang sebagai VPN serbaguna untuk berjalan pada antarmuka tertanam maupun superkomputer, cocok untuk berbagai keadaan. WireGuard berjalan melalui UDP.

Anda mungkin juga ingin membaca Gambaran Konseptual, Panduan Cepat dan Whitepaper.

Fedora CoreOS mendukung sepenuhnya WireGuard secara default. Halaman ini menjelaskan cara mengatur koneksi tunggal antara server Fedora CoreOS dan komputer lain. Panduan ini mencakup konfigurasi dasar klien, tetapi tidak mencakup proses instalasi WireGuard pada klien Anda.

Ada dua opsi untuk menyiapkan WireGuard di Fedora CoreOS:

  • Mengimpor konfigurasi WireGuard di NetworkManager

  • Menggunakan wg-quick

Membuat Kunci

Anda perlu menghasilkan kunci untuk mengonfigurasi WireGuard. Anda dapat menghasilkan kunci tersebut di workstation Anda atau pada sistem Fedora CoreOS yang sedang berjalan.

Pertama, mari buat kunci WireGuard untuk sistem Fedora CoreOS:

Buat kunci WireGuard untuk sistem Fedora CoreOS
umask 077
wg genkey | tee fcos_private_key | wg pubkey > fcos_public_key

Sekarang mari buat kunci WireGuard untuk klien:

Buat kunci WireGuard untuk klien
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key

Anda dapat secara opsional membuat kunci pra-berbagi untuk meningkatkan keamanan:

Buat kunci pra-berbagi untuk pasangan peer ini
wg genpsk > fcos_client_psk

Anda sebaiknya membuat kunci pra-berbagi untuk setiap pasangan peer.

Mengonfigurasi WireGuard di Fedora CoreOS

Sekarang Anda dapat memodifikasi konfigurasi Butane Anda untuk membuat berkas konfigurasi wg0:

Contoh konfigurasi Butane dengan berkas konfigurasi 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

Menggunakan NetworkManager

Jika Anda ingin menggunakan dukungan di NetworkManager, Anda dapat mengimpor konfigurasi WireGuard dengan unit oneshot:

Contoh unit layanan systemd untuk mengimpor konfigurasi 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 akan mengabaikan direktif PostUp dan PostDown dalam konfigurasi WireGuard. Jika Anda memiliki konfigurasi firewall yang perlu diterapkan, pastikan untuk menerapkannya dengan unit terpisah, atau secara manual.

Jika Anda perlu melakukan perubahan lebih lanjut untuk memperbarui konfigurasi WireGuard, hapus koneksi lalu impor ulang dari berkas konfigurasi yang telah diperbarui.

Impor ulang konfigurasi WireGuard yang diperbarui
$ 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.

Menggunakan wg-quick

Jika Anda ingin menggunakan wg-quick alih-alih dukungan di NetworkManager, Anda dapat menambahkan yang berikut ke konfigurasi Butane Anda:

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

Jika Anda perlu melakukan perubahan lebih lanjut pada konfigurasi WireGuard, muat ulang layanan dengan:

systemctl reload wg-quick@wg0.conf

Memverifikasi konfigurasi pada sistem Fedora CoreOS

Boot Fedora CoreOS dan login. Saat Anda menjalankan sudo wg show Anda seharusnya melihat ini:

Periksa konfigurasi 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

<Address IP klien> di atas adalah IP atau FQDN komputer klien.

Mengonfigurasi WireGuard pada klien

Anda sekarang harus mengonfigurasi WireGuard pada komputer klien Anda dengan konfigurasi berikut:

Konfigurasi WireGuard klien
[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> is the IP or FQDN of the FCOS server.

Tulis konfigurasi di atas ke /etc/wireguard/wg0.conf, atur mode akses pada berkas konfigurasi, lalu impor konfigurasi tersebut pada klien Anda:

Impor konfigurasi WireGuard pada klien
[core@client ~]$ sudo chmod 0600 /etc/wireguard/wg0.conf
[core@client ~]$ sudo nmcli con import type wireguard file /etc/wireguard/wg0.conf

Kemudian periksa konfigurasi Anda:

Periksa konfigurasi WireGuard pada klien
[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

Menguji koneksi WireGuard

Sekarang Anda dapat melakukan ping ke alamat IP WireGuard server Fedora CoreOS:

Ping server Fedora CoreOS melalui WireGuard dari klien
[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

Ketika Anda menjalankan perintah sudo wg show di klien Anda, Anda seharusnya melihat sesi handshake terbaru dan bagian transfer dengan data yang dikirim dan diterima:

Verifikasi jabat tangan dan metrik transfer
[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

Merutekan semua lalu lintas melalui WireGuard

Jika Anda berencana meneruskan semua lalu lintas klien Anda melalui instans Fedora CoreOS, Anda perlu mengaktifkan IP Forwarding dan menetapkan beberapa direktif PostUp dan PostDown:

Contoh konfigurasi WireGuard pada Fedora CoreOS dengan pengalihan IP
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 menggunakan nama antarmuka yang dapat diprediksi secara default. Pastikan untuk menggunakan nama antarmuka yang benar untuk perangkat keras Anda pada perintah PostUp dan PostDown di atas.

Kemudian atur AllowedIPs = 0.0.0.0/0,::/0 di /etc/wireguard/wg0.conf dalam konfigurasi klien untuk mengarahkan semua lalu lintas IPv4 dan IPv6 pada komputer klien melalui antarmuka WireGuard:

Konfigurasi untuk merutekan semua lalu lintas pada klien melalui 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