WireGuard – это бесплатная VPN с открытым исходным кодом и современной криптографией.
Wireguard работает в архитектуре сервер-клиент, где сервер WireGuard отвечает за маршрутизацию трафика клиентов в определенные сети.
Установка WireGuard VPN сервера на Rocky Linux 8
Ниже описаны шаги, как установить WireGuard VPN сервер на Rocky Linux 8.
Шаг 1. Установка релиза Epel
Установите релиз EPEL на Rocky Linux 8.
Это поможет нам загрузить пакеты WireGuard, которые недоступны в стандартном репозитории Rocky Linux.
sudo dnf install epel-release elrepo-release -y
Шаг 2. Установка сервера WireGuard VPN на Rocky Linux 8
Установите wireguard vpn и необходимые зависимости, как показано ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ sudo yum install kmod-wireguard wireguard-tools ELRepo.org Community Enterprise Linux Repository - el8 15 kB/s | 272 kB 00:18 Dependencies resolved. ============================================================================================================================================================================= Package Architecture Version Repository Size ============================================================================================================================================================================= Installing: kmod-wireguard x86_64 4:1.0.20210606-1.el8_4.elrepo elrepo 110 k wireguard-tools x86_64 1.0.20210424-1.el8 epel 125 k Transaction Summary ============================================================================================================================================================================= Install 2 Packages Total download size: 235 k Installed size: 641 k Is this ok [y/N]: y |
Шаг 3. Настройка WireGuard VPN на Rocky Linux 8
После загрузки следующим шагом будет настройка VPN-сервера WireGuard на Rocky Linux 8.
Создайте рабочий каталог WireGuard, в котором WireGuard будет хранить файлы конфигурации.
sudo mkdir /etc/wireguard
Шаг 4. Генерация ключей WireGuard
Нам потребуется сгенерировать открытый и закрытый ключи для WireGuard.
Генерация закрытых ключей для WireGuard
Используйте команду wg genkey для генерации закрытых ключей WireGuard.
Чтобы сгенерировать ключ, выполните следующую команду:
umask 077 | wg genkey | sudo tee /etc/wireguard/wireguard.key
Убедитесь, что файл был записан по указанному выше пути:
# cat /etc/wireguard/wireguard.key
6Eh08BtDiAqkTJ0rC6AbXi+UXyg+ZZoDU4n/ariG2Hg=
Генерация открытых ключей для Wireguard
Сгенерируйте открытый ключ на основе закрытого ключа, созданного на предыдущем этапе.
wg pubkey < /etc/wireguard/wireguard.key > /etc/wireguard/wireguard.pub.key
Проверьте содержимое файла открытого ключа.
[root@Rocky ~]# cat /etc/wireguard/wireguard.pub.key
BXfVP+JcQbwZUkhHtVJQIVEOw4oXM1fj1FDkC1f0ais=
Шаг 5. Создание сетевой конфигурации для WireGuard
Создайте сетевую конфигурацию для wireguard, как показано ниже.
Не забудьте использовать закрытый ключ вашего сервера.
1 2 3 4 5 6 7 8 9 |
$ sudo vim /etc/wireguard/wg0.conf [Interface] Address = 10.10.10.1/24 SaveConfig = true ListenPort = 51820 DNS = 8.8.8.8,10.10.10.1 PrivateKey = <SERVER-PRIVATE-KEY> PostUp = firewall-cmd --add-port=51820/udp; firewall-cmd --zone=public --add-masquerade; firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -o eth0 -j ACCEPT; firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE PostDown = firewall-cmd --remove-port=51820/udp; firewall-cmd --zone=public --remove-masquerade; firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -i wg0 -o eth0 -j ACCEPT; firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE |
Шаг 6. Включим переадресацию IP-адресов на Rocky Linux 8
Включите IP-переадресацию на Rocky Linux, чтобы обеспечить маршрутизацию пакетов для VPN-клиентов к необходимым пунктам назначения.
Добавьте строку net.ipv4.ip_forward = 1 в файл /etc/sysctl.conf.
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
Перезагрузите настройки sysctl:
sudo sysctl -p
Шаг 7. Запуск сервера WireGuard VPN
Запустите сервер WireGuard VPN с помощью инструмента wg-quick.
1 2 3 4 5 6 7 8 9 10 11 |
# sudo wg-quick up wg0 [#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.10.10.1/24 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] mount `8.8.8.8 10.10.10.1' /etc/resolv.conf [#] firewall-cmd --add-port=51820/udp; firewall-cmd --zone=public --add-masquerade; firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -o eth0 -j ACCEPT; firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE success success success success |
Проверьте и убедитесь, что интерфейс Wireguard поднят.
1 2 3 4 5 6 7 8 |
# ifconfig wg0 wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1420 inet 10.10.10.1 netmask 255.255.255.0 destination 10.10.10.1 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
Вы также можете управлять службой Wireguard с помощью Systemd.
Чтобы запустить службу:
sudo systemctl start wg-quick@wg0
Чтобы проверить статус службы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# systemctl status wg-quick@wg0 ● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; disabled; vendor preset: disabled) Active: active (exited) since Thu 2021-08-12 18:41:23 EDT; 3s 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: 76862 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 76862 (code=exited, status=0/SUCCESS) Aug 12 18:41:19 Rocky wg-quick[76862]: [#] ip link add wg0 type wireguard Aug 12 18:41:19 Rocky wg-quick[76862]: [#] wg setconf wg0 /dev/fd/63 Aug 12 18:41:19 Rocky wg-quick[76862]: [#] ip -4 address add 10.10.10.1/24 dev wg0 Aug 12 18:41:19 Rocky wg-quick[76862]: [#] ip link set mtu 1420 up dev wg0 Aug 12 18:41:19 Rocky wg-quick[76862]: [#] firewall-cmd --add-port=51820/udp; firewall-cmd --zone=public --add-masquerade; firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -o eth0 -j ACCEPT; firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j Aug 12 18:41:20 Rocky wg-quick[76862]: success Aug 12 18:41:21 Rocky wg-quick[76862]: success Aug 12 18:41:22 Rocky wg-quick[76862]: success Aug 12 18:41:23 Rocky wg-quick[76862]: success Aug 12 18:41:23 Rocky systemd[1]: Started WireGuard via wg-quick(8) for wg0. |
Настройка клиента WireGuard на Rocky Linux 8
После успешной настройки сервера WireGuard нам нужно настроить клиент WireGuard на другой машине Rocky Linux 8.
Установите пакет Wireguard на Rocky Linux
dnf install epel-release elrepo-release -y
dnf install kmod-wireguard wireguard-tools -y
Настройте закрытый и открытый ключи для клиентской машины Rocky Linux:
sudo su -
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey
Настройте интерфейс WireGuard для клиента Rocky Linux
1 2 3 4 5 6 7 8 9 |
$ sudo vi /etc/wireguard/wg0.conf [Interface] PrivateKey = <Client-private-key> Address = 10.10.10.2/24 [Peer] PublicKey = <server-public-key> Endpoint = <server-ip-address>:51820 AllowedIPs = 0.0.0.0/0 |
Убедитесь, что в приведенной выше конфигурации используются правильные данные для PrivateKey, PublicKey и Endpoint.
На VPN-сервере выполните приведенную ниже команду, чтобы разрешить одноранговое соединение с клиентской машиной
sudo wg set wg0 peer <client-public-key> allowed-ips 10.0.0.2
На клиентской машине запустите интерфейс Wireguard с помощью приведенной ниже команды:
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo wg-quick up wg0 [#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.10.10.2/24 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] wg set wg0 fwmark 51820 [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n |