Настройка WireGuard
WireGuard — это новый VPN, работающий внутри ядра Linux и использующий криптографию по последнему слову техники. Он стремится быть быстрее, проще, компактнее и полезнее, чем IPSec, избегая при этом огромной головной боли. Он намерен быть значительно производительнее, чем OpenVPN. WireGuard разработан как VPN общего назначения для работы как на встраиваемых интерфейсах, так и на суперкомпьютерах, подходящий для многих различных обстоятельств. Он работает поверх UDP.
Возможно, вам также стоит прочитать Концептуальный обзор, Быстрый старт и Белую книгу.
Fedora CoreOS имеет полную поддержку WireGuard из коробки. На этой странице показано, как настроить одно соединение между сервером Fedora CoreOS и другим компьютером. Здесь рассматривается базовая конфигурация клиента, но не рассматривается установка WireGuard на вашем клиенте.
Есть два варианта настройки WireGuard в Fedora CoreOS:
-
Импорт конфигурации WireGuard в NetworkManager
-
Использование
wg-quick
Генерация ключей
Вам нужно будет сгенерировать ключи для настройки WireGuard. Вы можете сгенерировать ключи на своей рабочей станции или на работающей системе Fedora CoreOS.
Сначала создадим ключи WireGuard для системы Fedora CoreOS:
umask 077
wg genkey | tee fcos_private_key | wg pubkey > fcos_public_key
Теперь сгенерируем ключи WireGuard для клиента:
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key
При желании вы можете сгенерировать общий ключ (pre-shared key) для повышения безопасности:
wg genpsk > fcos_client_psk
|
Вам следует сгенерировать общий ключ для каждой пары узлов. |
Настройка WireGuard в Fedora CoreOS
Теперь вы можете изменить свою конфигурацию Butane, чтобы создать конфигурационный файл wg0:
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:
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 будет игнорировать директивы |
|
Если вам нужно внести дальнейшие изменения для обновления конфигурации WireGuard, удалите подключение и повторно импортируйте его из обновлённого конфигурационного файла. Повторный импорт обновлённой конфигурации WireGuard
|
Использование wg-quick
Если вы хотите использовать wg-quick вместо поддержки в NetworkManager, вы можете добавить следующее в свою конфигурацию Butane:
systemd:
units:
- name: wg-quick@wg0.service
enabled: true
|
Если вам нужно внести дальнейшие изменения в конфигурацию WireGuard, перезагрузите службу с помощью:
|
Проверка конфигурации в системе Fedora CoreOS
Загрузите Fedora CoreOS и войдите в систему. Когда вы выполните sudo wg show, вы должны увидеть это:
[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 на вашем клиентском компьютере со следующей конфигурацией:
[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, задайте режим доступа к конфигурационному файлу и затем импортируйте конфигурацию на вашем клиенте:
[core@client ~]$ sudo chmod 0600 /etc/wireguard/wg0.conf
[core@client ~]$ sudo nmcli con import type wireguard file /etc/wireguard/wg0.conf
Затем проверьте вашу конфигурацию:
[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
Теперь вы можете пропинговать IP-адрес WireGuard сервера Fedora CoreOS:
[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 на вашем клиенте, вы должны увидеть недавнее рукопожатие и разделы передачи с отправленными и полученными данными:
[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
Маршрутизация всего трафика через WireGuard
Если вы планируете перенаправлять весь трафик вашего клиента через экземпляр Fedora CoreOS, вам нужно будет включить IP-форвардинг и задать некоторые директивы PostUp и PostDown:
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:
[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
Want to help? Learn how to contribute to Fedora Docs ›