Linux
November 11, 2022

Поднимаем Wireguard VPN соединение в ArchLinux

В предыдущем посте я рассказывал как поднять свой сервер Wireguard, в этой покажу как настроить соединение с нашим сервером в ОС GNU/ArchLinux.

Для начала, необходимо установить следующие пакеты

sudo pacman -S wireguard-tools systemd-resolvconf

Далее копируем ваш конфиг в /etc/wireguard/wg0.conf

sudo cp ваш_конфиг.conf /etc/wireguard/wg0.conf

Пробуем поднять соединение:

sudo wg-quick up wg0

Если всё прошло удачно отобразятся следующие строки, проверить поднялся ли интерфейс wg0 можно командой ip a

Если всё прошло удачно, то теперь можно настроить автоматическое соединение вбиваем в терминале

sudo systemctl enable wg-quick@wg0

После этого, при загрузке системы, соединение будет подниматься автоматически.

Если используете polybar, то можно и на него повесить индикатор соединения, кроме того по клике правой клавиши мышки соединение будет устанавливаться/разрываться.

Открываем конфиг polybar'а (я использую nvim можете заменить на свой)

nvim .config/polybar/config.ini

В конец добавляем:

[module/wireguard]
type = custom/script
exec = /home/$USER/.config/polybar/scripts/wireguard.sh
tail = false
interval = 1
click-left = /home/$USER/.config/polybar/scripts/wireguard.sh --toggle &

Поднимаемся выше по конфигу до строчки modules-right и добавляем в конец wireguard

Создаём .config/polybar/scripts/wireguard.sh со следующим содержимым

#! /bin/bash

connected_interface=$(networkctl | grep -P "\d+ .* wireguard routable" -o | cut -d" " -f2)

connect() {
        sudo wg-quick up wg0
}

disconnect() {
    # Normally we should have a single connected interface but technically
    # there's nothing stopping us from having multiple active intgerfaces so
    # let's do this in a loop:
    for connected_config in $(networkctl | grep -P "\d+ .* wireguard routable" -o | cut -d" " -f2)
    do
        sudo wg-quick down wg0
    done
}

toggle() {
    if [[ $connected_interface ]]
    then
        disconnect
    else
        connect
    fi
}

print() {
    if [[ $connected_interface ]]
    then
        echo "%{F#FFDE7D}%{T1}說%{T-} %{T2}VPN: ON%{T-}"
    else
        echo "%{F#5f5f5f}%{T1}說%{T-} %{T2}VPN: OFF%{T-}"
    fi
}

case "$1" in
    --connect)
        connect
        ;;
    --disconnect)
        disconnect
        ;;
    --toggle)
        toggle
        ;;
    *)
        print
        ;;
esac

Конфиг брал с https://github.com/CrCrate/polybar-wireguard-nm-rofi до конца еще не доделал, но в таком виде он работает без проблем.

Перезапускаем polybar

killall polybar && sh ~/.config/polybar/launch.sh

Теперь в конце панели будет отображаться VPN: ON/OFF по клику как и писал выше соединение устанавливается или разрывается.

Мои конфиги расшарены по адресу https://gitlab.com/alextenkoff/Dotfiles (в ближайшее время надо бы их обновить 😃 )