WireGuard ошибки в Centos 8 Stream

Ошибки после обновления на Centos 8 Stream

После обновления Centos 8 Stream, ядро переехало на версию:

# uname -a
Linux srv.local 4.18.0-492.el8.x86_64 #1 SMP Tue May 9 17:56:55 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux</

Так как я ставил из репозитория PowerTools, то модуль у меня собирается через dkms. Выбрал этот способ по причине отсутствия в EPEL kmod-модулей под "свежие" ядра. Так вот перестал собираться модуль dkms-wireguard под новое ядро. В логе наблюдаем следующие ошибки:

/var/lib/dkms/wireguard/1.0.20220627/build/compat/compat.h:412:19: error: redefinition of ‘ktime_get_coarse_boottime_ns’
/var/lib/dkms/wireguard/1.0.20220627/build/queueing.h:85:34: error: ‘struct sk_buff’ has no member named ‘headers_end’; did you mean ‘headers’?

Из-за чего не стартовал WireGuard - сервер, что и понятно, отсутствовал модуль ядра:

Jun 02 09:28:19 srv.local systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Jun 02 09:28:19 srv.local wg-quick[742]: [#] ip link add wg0 type wireguard
Jun 02 09:28:19 srv.local wg-quick[781]: Error: Unknown device type.
Jun 02 09:28:19 srv.local wg-quick[787]: Unable to access interface: Protocol not supported
Jun 02 09:28:19 srv.local wg-quick[742]: [#] ip link delete dev wg0
Jun 02 09:28:19 srv.local wg-quick[806]: Cannot find device "wg0"
Jun 02 09:28:19 srv.local systemd[1]: wg-quick@wg0.service: Main process exited, code=exited, status=1/FAILURE
Jun 02 09:28:19 srv.local systemd[1]: wg-quick@wg0.service: Failed with result 'exit-code'.
Jun 02 09:28:19 srv.local systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.
[root@git ~]# dnf reinstall wireguard-dkms wireguard-tools

После нескольких часов поиска нашел патчи под исходники wireguard-linux-compat

Выкладываю уже пропатченные файлы (патчи в архиве тоже присутствуют). Распаковываем, заменяем содержимое каталога /var/lib/dkms/wireguard/1.0.20220627/ содержимым архива wireguard-1.0.20220627_patched.tar.gz и собираем модуль ядра заново.

#/usr/lib/dkms/dkms_autoinstaller start
dkms: running auto installation service for kernel 4.18.0-492.el8.x86_64Sign command: /lib/modules/4.18.0-492.el8.x86_64/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Building module:
Cleaning build area...
make -j4 KERNELRELEASE=4.18.0-492.el8.x86_64 -C /lib/modules/4.18.0-492.el8.x86_64/build M=/var/lib/dkms/wireguard/1.0.20220627/build.....
Signing module /var/lib/dkms/wireguard/1.0.20220627/build/wireguard.ko
Cleaning build area...
wireguard.ko.xz:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.18.0-492.el8.x86_64/extra/
Adding any weak-modules
depmod....
dkms autoinstall on 4.18.0-492.el8.x86_64/x86_64 succeeded for wireguard
 Done.

Всё, можно запускать сервис на новом ядре


SSH-туннель на локальный порт.

Допустим у нас есть WEB-сервер, без доступа в интернет, для внутренний (приватной) сети. На роутере сети, всё закрыто, открыт только SSH-порт. Как же попасть на WEB-страницу сервера. Для этого нам необходимо организовать туннель по с помощью SSH.
Общий формат:

ssh -L [Local_IP:]Local_Port:Target_IP:Target_Port [Remote_User@]SSH_Server -p SSH_Port

Где,

Local_IP - Локальный адрес компьютера (по умолчанию localhost) c которого производим подключение.
Local_Port – Порт на локальном компьютере, на который будем потом подключаться. 

Target_IP - IP-адрес компьютера в приватной/внутренней сети сети
Target_Port  – Порт назначения, компьютера в локальной сети.

Remote_User – Удаленный пользователь на сервере к которому подключаемся.
SSH_Server - SSH-сервер к которому подключаемся (роутер).
SSH_Port - Если используется не стандартный порт для SSH (по умолчанию 22)

При установлении соединения от имени пользователя  Local_Port не может быть менее 1024.

Для примера: Подключаемся на внешний роутер gate.gateway.ru по ssh на порт 2112, и указываем ему создать туннель между поднятым на локальным хосте, портом 8080 и хостом за роутером в приватной сети 10.3.7.2 и портом 80 на нем.

ssh -L 127.0.0.1:8080:10.3.7.2:80 root@gate.gateway.ru -p2112

После этого можем проверить порт:

$ netstat -pan | grep 8080
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      158910/ssh

Теперь введя в адресной строке броузера http://127.0.0.1:8080/ мы попадем на внутренний WEB-сервер.

Вот еще один пример которым я пользуюсь достаточно часто. Есть один клиент с дибильными админами, которые запрещают прямой доступ на сервер. Для подключения к серверу нужно подключить VPN потом зайти в шлюз удаленных рабочих столов Guacamole и уже оттуда попасть на сервер, на протяжении этого надо 4 раза вводить логин пароль, иначе как на садизм это не похоже. Поэтому шлем их на йух, подключаемся один раз на сервер и выполняем там:

ssh -N -R 2211:localhost:22 root@19.19.19.19 -p2233

19.19.19.19 - адрес моего сервера (SERVER), под моим контролем
2233 - это порт SSH моего сервера.
2211 - этот порт будет поднят на моем сервере, именно подключаясь к нему я буду попадать на скрытый хост (HOST)
localhost - это айпи/host на котором будет поднят порт 2211, если подключаться будем с с самого сервера можно оставить localhost, иначе нужно прописывать адрес сервера полный
22 - соответственно SSH-порт на хосте

Теперь мы заходим на сервер, и вводя команду попадаем по тунелю на хост.:

ssh user@localhost -p2211

Copyright © 2022Powered by Bludit