Konfigurasi FCOS untuk menggunakan WireGuard

Pendahuluan

WireGuard adalah VPN inovatif yang berjalan di dalam Kernel Linux dan menggunakan kriptografi terkini. Tujuannya adalah untuk menjadi lebih cepat, lebih sederhana, lebih ringan, dan lebih berguna daripada IPSec, sambil menghindari masalah yang rumit. WireGuard bertujuan untuk menjadi jauh lebih performan daripada OpenVPN. WireGuard dirancang sebagai VPN serbaguna yang dapat berjalan di antarmuka tertanam maupun superkomputer, cocok untuk berbagai situasi. WireGuard berjalan di atas protokol UDP.

FCOS mendukung WireGuard secara penuh sejak awal. Panduan ini akan menunjukkan cara mengatur koneksi tunggal antara server FCOS dan satu komputer klien. Panduan ini mencakup konfigurasi dasar klien, tetapi tidak mencakup proses instalasi WireGuard pada klien Anda.

Generate Kunci

Anda perlu menghasilkan beberapa kunci untuk mengonfigurasi WireGuard. Untuk panduan ini, kunci-kunci tersebut harus dihasilkan terlebih dahulu di workstation Anda. Pertama, mari kita buat kunci WireGuard FCOS:

Generate kunci WireGuard FCOS
$ umask 077
$ wg genkey | tee privatekey | wg pubkey > publickey

Kunci-kunci ini akan disebut sebagai fcos_public_key dan fcos_private_key mulai dari sekarang dalam panduan ini.

Sekarang mari kita generate kunci klien:

Buat kunci WireGuard untuk Klien Satu
$ umask 077
$ wg genkey | tee privatekey | wg pubkey > publickey

Kunci-kunci ini akan disebut sebagai client_one_public_key dan client_one_private_key mulai dari sini dalam panduan ini.

Sekarang buat PresharedKey:

Buat kunci pra-bagi (preshared key) untuk setiap pasangan peer
$ wg genpsk > fcos_client_one_psk

PresharedKey akan disebut sebagai fcos_client_one_psk mulai dari sini dalam panduan ini.

Perintah wg genpsk menghasilkan PresharedKey yang hanya dapat digunakan sekali per pasangan peer. Setiap peer yang Anda tambahkan ke server FCOS perlu menghasilkan PresharedKey yang unik.

Konfigurasikan WireGuard pada FCOS

Anda sekarang dapat mengonfigurasi pengaturan Ignition Anda untuk membuat berkas konfigurasi wg0:

Contoh Konfigurasi WireGuard pada FCOS
variant: fcos
version: 1.6.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.0/24,fdc9:3c6b:21c7:e6bd::/64
systemd:
  units:
    - name: wg-quick@wg0.service
      enabled: true

Boot FCOS dan masuk. Saat Anda menjalankan sudo wg show, Anda seharusnya melihat ini:

Periksa konfigurasi WireGuard pada FCOS
[core@wireguard-demo ~]$ 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

[root@wireguard-demo ~]# ip a s 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> di atas adalah alamat IP atau FQDN dari komputer Klien.

Konfigurasikan WireGuard pada klien

Anda sekarang perlu 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_one_private_key>
ListenPort = 51821

[Peer]
PublicKey = <fcos_public_key>
PresharedKey = <fcos_client_one_psk>
Endpoint = <FCOS IP address>:51820
AllowedIPs = 192.168.71.0/24,fdc9:3c6b:21c7:e6bd::/64
<FCOS IP address> adalah alamat IP atau FQDN dari server FCOS.

Tulis konfigurasi di atas ke /etc/wireguard/wg0.conf dan jalankan perintah chmod 0600 /etc/wireguard/wg0.conf pada klien Anda. Jalankan perintah sudo systemctl start wg-quick@wg0.service, lalu periksa konfigurasi Anda:

Periksa konfigurasi WireGuard pada klien
[root@wireguard-client ~]# 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
[root@wireguard-client ~]# ip a s 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

Uji koneksi WireGuard

Anda sekarang dapat melakukan ping ke alamat IP WireGuard server FCOS:

Ping ke server FCOS melalui WireGuard dari klien
[root@wireguard-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

[root@wireguard-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
[root@wireguard-client ~]# 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

Rutekan semua lalu lintas melalui WireGuard

Jika Anda berencana untuk meneruskan semua lalu lintas klien Anda melalui instance FCOS, Anda perlu mengaktifkan IP Forwarding dan mengatur beberapa direktif PostUp dan PostDown:

Contoh konfigurasi WireGuard pada FCOS dengan pengalihan IP
variant: fcos
version: 1.6.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
FCOS menggunakan nama antarmuka yang dapat diprediksi oleh default. Harap pastikan untuk menggunakan nama antarmuka yang benar untuk perangkat keras Anda dalam perintah PostUp dan PostDown di atas!

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

Konfigurasi untuk mengarahkan semua lalu lintas di klien melalui WireGuard:
[Interface]
Address = 192.168.71.1/24,fdc9:3c6b:21c7:e6bd::2/64
PrivateKey = <client_one_private_key>
ListenPort = 51821

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