1
1
mirror of https://github.com/angristan/wireguard-install.git synced 2024-10-31 18:52:31 +00:00

Update wireguard-install.sh

Разукрасил вывод сообщений и перевел комментарии
This commit is contained in:
Romanoidz 2022-02-17 01:23:55 +03:00 committed by GitHub
parent 666c4ed7cd
commit 518e2e0ef2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3,29 +3,31 @@
# Secure WireGuard server installer
# https://github.com/angristan/wireguard-install
WARN='\033[1;35m'
BOLD='\033[1;32m'
RED='\033[0;31m'
ORANGE='\033[0;33m'
NC='\033[0m'
function isRoot() {
if [ "${EUID}" -ne 0 ]; then
echo "Вам нужно запустить этот скрипт от имени root-пользователя"
echo -e "${WARN}Вам нужно запустить этот скрипт от имени root-пользователя${NC}"
exit 1
fi
}
function checkVirt() {
if [ "$(systemd-detect-virt)" == "openvz" ]; then
echo "OpenVZ не поддерживается"
echo -e "${WARN}OpenVZ не поддерживается${NC}"
exit 1
fi
if [ "$(systemd-detect-virt)" == "lxc" ]; then
echo "LXC не поддерживается (пока)."
echo "Технически WireGuard может работать в контейнере LXC,"
echo "но модуль ядра должен быть установлен на хосте,"
echo "контейнер должен быть запущен с некоторыми определенными параметрами"
echo "и только инструменты должны быть установлены в контейнер."
echo -e "${WARN}LXC не поддерживается (пока).${NC}"
echo -e "${WARN}Технически WireGuard может работать в контейнере LXC,${NC}"
echo -e "${WARN}но модуль ядра должен быть установлен на хосте,${NC}"
echo -e "${WARN}контейнер должен быть запущен с некоторыми определенными параметрами${NC}"
echo -e "${WARN}и только инструменты должны быть установлены в контейнер.${NC}"
exit 1
fi
}
@ -34,13 +36,13 @@ function checkOS() {
# Проверка операционной системы
if [[ -e /etc/debian_version ]]; then
source /etc/os-release
OS="${ID}" # debian or ubuntu
OS="${ID}" # debian или ubuntu
if [[ ${ID} == "debian" || ${ID} == "raspbian" ]]; then
if [[ ${VERSION_ID} -lt 10 ]]; then
echo "Ваша версия Debian (${VERSION_ID}) не поддерживается. Пожалуйста, используйте Debian 10 Buster или более позднюю версию"
echo -e "${WARN}Ваша версия Debian (${VERSION_ID}) не поддерживается. Пожалуйста, используйте Debian 10 Buster или более позднюю версию${NC}"
exit 1
fi
OS=debian # overwrite if raspbian
OS=debian # перезаписать, если raspbian
fi
elif [[ -e /etc/fedora-release ]]; then
source /etc/os-release
@ -54,7 +56,7 @@ function checkOS() {
elif [[ -e /etc/arch-release ]]; then
OS=arch
else
echo "Похоже, вы не запускаете этот установщик в системе Debian, Ubuntu, Fedora, CentOS, Oracle или Arch Linux"
echo -e "${WARN}Похоже, вы не запускаете этот установщик в системе Debian, Ubuntu, Fedora, CentOS, Oracle или Arch Linux${NC}"
exit 1
fi
}
@ -66,11 +68,11 @@ function initialCheck() {
}
function installQuestions() {
echo "Добро пожаловать в WireGuard installer!"
echo "Репозиторий git доступен по адресу: https://github.com/Romanoidz/wireguard-install"
echo -e "${BOLD}Добро пожаловать в WireGuard installer!${NC}"
echo -e "${BOLD}Репозиторий git доступен по адресу: https://github.com/Romanoidz/wireguard-install ${NC}"
echo ""
echo "Мне нужно задать вам несколько вопросов, прежде чем приступить к настройке."
echo "Вы можете оставить параметры по умолчанию и просто нажать Enter, если они вас устраивают."
echo -e "${BOLD}Мне нужно задать вам несколько вопросов, прежде чем приступить к настройке.${NC}"
echo -e "${BOLD}Вы можете оставить параметры по умолчанию и просто нажать Enter, если они вас устраивают.${NC}"
echo ""
# Detect public IPv4 or IPv6 address and pre-fill for the user
@ -99,13 +101,13 @@ function installQuestions() {
read -rp "Адрес сервера WireGuard IPv6: " -e -i fd42:42:42::1 SERVER_WG_IPV6
done
# Generate random number within private ports range
# Генерировать случайное число в пределах диапазона частных портов
RANDOM_PORT=$(shuf -i49152-65535 -n1)
until [[ ${SERVER_PORT} =~ ^[0-9]+$ ]] && [ "${SERVER_PORT}" -ge 1 ] && [ "${SERVER_PORT}" -le 65535 ]; do
read -rp "Порт сервера WireGuard [1-65535]: " -e -i "${RANDOM_PORT}" SERVER_PORT
done
# Yandex DNS by default
# По умолчанию Яндекс DNS серверы
until [[ ${CLIENT_DNS_1} =~ ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ ]]; do
read -rp "1-й DNS-сервер, используемый для клиентов: " -e -i 77.88.8.8 CLIENT_DNS_1
done
@ -117,16 +119,16 @@ function installQuestions() {
done
echo ""
echo "Необходимые данные получены. Теперь можно настроить ваш сервер WireGuard."
echo "Настроить и создать Клиента можно в конце установки."
read -n1 -r -p "Нажмите любую клавишу, чтобы продолжить..."
echo -e "${BOLD}Необходимые данные получены. Теперь можно настроить ваш сервер WireGuard.${NC}"
echo -e "${BOLD}Настроить и создать Клиента можно в конце установки.${NC}"
read -n1 -r -p -e "${BOLD}Нажмите любую клавишу, чтобы продолжить...${NC}"
}
function installWireGuard() {
# Run setup questions first
# Сначала выполните вопросы по настройке
installQuestions
# Install WireGuard tools and module
# Установите инструменты и модуль для Wireguard
if [[ ${OS} == 'ubuntu' ]] || [[ ${OS} == 'debian' && ${VERSION_ID} -gt 10 ]]; then
apt-get update
apt-get install -y wireguard iptables resolvconf qrencode
@ -161,7 +163,7 @@ function installWireGuard() {
pacman -S --needed --noconfirm wireguard-tools qrencode
fi
# Make sure the directory exists (this does not seem the be the case on fedora)
# Убедитесь, что каталог существует (похоже, это не относится к fedora)
mkdir /etc/wireguard >/dev/null 2>&1
chmod 600 -R /etc/wireguard/
@ -169,7 +171,7 @@ function installWireGuard() {
SERVER_PRIV_KEY=$(wg genkey)
SERVER_PUB_KEY=$(echo "${SERVER_PRIV_KEY}" | wg pubkey)
# Save WireGuard settings
# Сохранение настроек WireGuard
echo "SERVER_PUB_IP=${SERVER_PUB_IP}
SERVER_PUB_NIC=${SERVER_PUB_NIC}
SERVER_WG_NIC=${SERVER_WG_NIC}
@ -181,7 +183,7 @@ SERVER_PUB_KEY=${SERVER_PUB_KEY}
CLIENT_DNS_1=${CLIENT_DNS_1}
CLIENT_DNS_2=${CLIENT_DNS_2}" >/etc/wireguard/params
# Add server interface
# Добавить серверный интерфейс
echo "[Interface]
Address = ${SERVER_WG_IPV4}/24,${SERVER_WG_IPV6}/64
ListenPort = ${SERVER_PORT}
@ -197,7 +199,7 @@ PostDown = firewall-cmd --remove-port ${SERVER_PORT}/udp && firewall-cmd --remov
PostDown = iptables -D FORWARD -i ${SERVER_PUB_NIC} -o ${SERVER_WG_NIC} -j ACCEPT; iptables -D FORWARD -i ${SERVER_WG_NIC} -j ACCEPT; iptables -t nat -D POSTROUTING -o ${SERVER_PUB_NIC} -j MASQUERADE; ip6tables -D FORWARD -i ${SERVER_WG_NIC} -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ${SERVER_PUB_NIC} -j MASQUERADE" >>"/etc/wireguard/${SERVER_WG_NIC}.conf"
fi
# Enable routing on the server
# Включить маршрутизацию на сервере
echo "net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
@ -207,13 +209,13 @@ net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
systemctl enable "wg-quick@${SERVER_WG_NIC}"
newClient
echo "Если вы хотите добавить больше клиентов, вам просто нужно запустить этот скрипт в еще раз!"
echo -e "${BOLD}Если вы хотите добавить больше клиентов, вам просто нужно запустить этот скрипт в еще раз!${NC}"
# Check if WireGuard is running
# Проверьте, работает ли WireGuard
systemctl is-active --quiet "wg-quick@${SERVER_WG_NIC}"
WG_RUNNING=$?
# WireGuard might not work if we updated the kernel. Tell the user to reboot
# WireGuard может не работать, если мы обновим ядро. Попросите пользователя перезагрузиться
if [[ ${WG_RUNNING} -ne 0 ]]; then
echo -e "\n${RED}ПРЕДУПРЕЖДЕНИЕ: WireGuard, похоже, не работает.${NC}"
echo -e "${ORANGE}Вы можете проверить, работает ли WireGuard: systemctl status wg-quick@${SERVER_WG_NIC}${NC}"
@ -225,8 +227,8 @@ function newClient() {
ENDPOINT="${SERVER_PUB_IP}:${SERVER_PORT}"
echo ""
echo "Введите имя клиента."
echo "Имя должно состоять из буквенно-цифровых символов. Оно также может содержать подчеркивание или тире и не может превышать 15 символов."
echo -e "${BOLD}Введите имя клиента.${NC}"
echo -e "${WARN}Имя должно состоять из буквенно-цифровых символов. Оно также может содержать подчеркивание или тире и не может превышать 15 символов.${NC}"
until [[ ${CLIENT_NAME} =~ ^[a-zA-Z0-9_-]+$ && ${CLIENT_EXISTS} == '0' && ${#CLIENT_NAME} -lt 16 ]]; do
read -rp "Имя клиента: " -e CLIENT_NAME
@ -234,7 +236,7 @@ function newClient() {
if [[ ${CLIENT_EXISTS} == '1' ]]; then
echo ""
echo "Клиент с указанным именем уже создан, пожалуйста, выберите другое имя."
echo -e "${ORANGE}Клиент с указанным именем уже создан, пожалуйста, выберите другое имя.${NC}"
echo ""
fi
done
@ -248,7 +250,7 @@ function newClient() {
if [[ ${DOT_EXISTS} == '1' ]]; then
echo ""
echo "Настроенная подсеть поддерживает только 253 клиента."
echo -e "${ORANGE}Настроенная подсеть поддерживает только 253 клиента.${NC}"
exit 1
fi
@ -260,7 +262,7 @@ function newClient() {
if [[ ${IPV4_EXISTS} == '1' ]]; then
echo ""
echo "Клиент с указанным IPv4 уже создан, пожалуйста, выберите другой IPv4."
echo -e "${ORANGE}Клиент с указанным IPv4 уже создан, пожалуйста, выберите другой IPv4.${NC}"
echo ""
fi
done
@ -273,34 +275,34 @@ function newClient() {
if [[ ${IPV6_EXISTS} == '1' ]]; then
echo ""
echo "Клиент с указанным IPv6 уже создан, пожалуйста, выберите другой IPv6."
echo -e "${ORANGE}Клиент с указанным IPv6 уже создан, пожалуйста, выберите другой IPv6.${NC}"
echo ""
fi
done
# Generate key pair for the client
# Создайте пару ключей для клиента
CLIENT_PRIV_KEY=$(wg genkey)
CLIENT_PUB_KEY=$(echo "${CLIENT_PRIV_KEY}" | wg pubkey)
CLIENT_PRE_SHARED_KEY=$(wg genpsk)
# Home directory of the user, where the client configuration will be written
# Домашний каталог пользователя, в котором будет записана конфигурация клиента
if [ -e "/home/${CLIENT_NAME}" ]; then
# if $1 is a user name
# если $1 - это имя пользователя
HOME_DIR="/home/${CLIENT_NAME}"
elif [ "${SUDO_USER}" ]; then
# if not, use SUDO_USER
# если нет, используйте SUDO_USER
if [ "${SUDO_USER}" == "root" ]; then
# If running sudo as root
# При запуске sudo от имени root
HOME_DIR="/root"
else
HOME_DIR="/home/${SUDO_USER}"
fi
else
# if not SUDO_USER, use /root
# если не SUDO_USER, используйте /root
HOME_DIR="/root"
fi
# Create client file and add the server as a peer
# Создайте клиентский файл и добавьте сервер в качестве однорангового узла
echo "[Interface]
PrivateKey = ${CLIENT_PRIV_KEY}
Address = ${CLIENT_WG_IPV4}/32,${CLIENT_WG_IPV6}/128
@ -312,7 +314,7 @@ PresharedKey = ${CLIENT_PRE_SHARED_KEY}
Endpoint = ${ENDPOINT}
AllowedIPs = 0.0.0.0/0,::/0" >>"${HOME_DIR}/${SERVER_WG_NIC}-${SERVER_PUB_IP}-client-${CLIENT_NAME}.conf"
# Add the client as a peer to the server
# Добавьте клиента в качестве однорангового узла к серверу
echo -e "\n### Client ${CLIENT_NAME}
[Peer]
PublicKey = ${CLIENT_PUB_KEY}
@ -321,7 +323,7 @@ AllowedIPs = ${CLIENT_WG_IPV4}/32,${CLIENT_WG_IPV6}/128" >>"/etc/wireguard/${SER
wg syncconf "${SERVER_WG_NIC}" <(wg-quick strip "${SERVER_WG_NIC}")
echo -e "\nВот файл конфигурации вашего клиента в виде QR-кода:"
echo -e "${BOLD}\nВот файл конфигурации вашего клиента в виде QR-кода:${NC}"
qrencode -t ansiutf8 -l L <"${HOME_DIR}/${SERVER_WG_NIC}-${SERVER_PUB_IP}-client-${CLIENT_NAME}.conf"
@ -332,12 +334,12 @@ function revokeClient() {
NUMBER_OF_CLIENTS=$(grep -c -E "^### Client" "/etc/wireguard/${SERVER_WG_NIC}.conf")
if [[ ${NUMBER_OF_CLIENTS} == '0' ]]; then
echo ""
echo "У вас нет существующих клиентов!"
echo -e "${ORANGE}У вас нет существующих клиентов!${NC}"
exit 1
fi
echo ""
echo "Выберите существующего клиента, которого вы хотите отозвать"
echo -e "${BOLD}Выберите существующего клиента, которого вы хотите отозвать${NC}"
grep -E "^### Client" "/etc/wireguard/${SERVER_WG_NIC}.conf" | cut -d ' ' -f 3 | nl -s ') '
until [[ ${CLIENT_NUMBER} -ge 1 && ${CLIENT_NUMBER} -le ${NUMBER_OF_CLIENTS} ]]; do
if [[ ${CLIENT_NUMBER} == '1' ]]; then
@ -347,16 +349,16 @@ function revokeClient() {
fi
done
# match the selected number to a client name
# сопоставьте выбранный номер с именем клиента
CLIENT_NAME=$(grep -E "^### Client" "/etc/wireguard/${SERVER_WG_NIC}.conf" | cut -d ' ' -f 3 | sed -n "${CLIENT_NUMBER}"p)
# remove [Peer] block matching $CLIENT_NAME
# удалить [Peer] блок, соответствующий $CLIENT_NAME
sed -i "/^### Client ${CLIENT_NAME}\$/,/^$/d" "/etc/wireguard/${SERVER_WG_NIC}.conf"
# remove generated client file
# удалить сгенерированный файл клиента
rm -f "${HOME}/${SERVER_WG_NIC}-client-${CLIENT_NAME}.conf"
# restart wireguard to apply changes
# перезапустите wireguard, чтобы применить изменения
wg syncconf "${SERVER_WG_NIC}" <(wg-quick strip "${SERVER_WG_NIC}")
}
@ -393,37 +395,37 @@ function uninstallWg() {
rm -rf /etc/wireguard
rm -f /etc/sysctl.d/wg.conf
# Reload sysctl
# Перезагрузить sysctl
sysctl --system
# Check if WireGuard is running
# Проверьте, работает ли WireGuard
systemctl is-active --quiet "wg-quick@${SERVER_WG_NIC}"
WG_RUNNING=$?
if [[ ${WG_RUNNING} -eq 0 ]]; then
echo "WireGuard не удалась удалить должным образом."
echo -e "${ORANGE}WireGuard не удалась удалить должным образом.${NC}"
exit 1
else
echo "WireGuard успешно удален"
echo -e "${BOLD}WireGuard успешно удален.${NC}"
exit 0
fi
else
echo ""
echo "Удаление прервано!"
echo -e "${ORANGE}Удаление прервано!${NC}"
fi
}
function manageMenu() {
echo "Добро пожаловать в установку WireGuard-сервера!"
echo "Репозиторий git доступен по адресу: https://github.com/Romanoidz/wireguard-install"
echo -e "${BOLD}Добро пожаловать в установку WireGuard-сервера!${NC}"
echo -e "${BOLD}Репозиторий git доступен по адресу: https://github.com/Romanoidz/wireguard-install ${NC}"
echo ""
echo "Похоже WireGuard уже установлен."
echo -e "${BOLD}Похоже WireGuard уже установлен.${NC}"
echo ""
echo "Что хотите сделать?"
echo " 1) Добавить нового пользователя"
echo " 2) Отозвать существующего пользователя"
echo " 3) Удалить WireGuard"
echo " 4) Выйти"
echo -e "${BOLD}Что хотите сделать?${NC}"
echo -e "${BOLD} 1) Добавить нового пользователя${NC}"
echo -e "${BOLD} 2) Отозвать существующего пользователя${NC}"
echo -e "${BOLD} 3) Удалить WireGuard${NC}"
echo -e "${BOLD} 4) Выйти${NC}"
until [[ ${MENU_OPTION} =~ ^[1-4]$ ]]; do
read -rp "Выберите опцию [1-4]: " MENU_OPTION
done
@ -443,10 +445,10 @@ function manageMenu() {
esac
}
# Check for root, virt, OS...
# Проверьте наличие root, virt, ОС...
initialCheck
# Check if WireGuard is already installed and load params
# Проверьте, установлен ли WireGuard, и загрузите параметры
if [[ -e /etc/wireguard/params ]]; then
source /etc/wireguard/params
manageMenu