#!/bin/bash # OpenVPN Auto-Install Script за Proxmox LXC контейнер # Използване: sudo bash openvpn-install.sh set -e # Цветове за изхода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}╔═══════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ OpenVPN Auto-Install за Proxmox LXC ║${NC}" echo -e "${GREEN}╔═══════════════════════════════════════════╗${NC}" echo "" # Проверка дали скриптът се изпълнява като root if [[ $EUID -ne 0 ]]; then echo -e "${RED}Този скрипт трябва да се изпълни като root!${NC}" exit 1 fi # Проверка дали сме в LXC контейнер if ! grep -q lxc /proc/1/cgroup 2>/dev/null && ! [ -f /.dockerenv ]; then echo -e "${YELLOW}Внимание: Не сте в LXC контейнер. Продължаваме...${NC}" fi # Конфигурационни променливи SERVER_NAME="openvpn-server" CLIENT_NAME="client1" PORT=1194 PROTOCOL="udp" DNS1="8.8.8.8" DNS2="8.8.4.4" # Получаване на IP адреса на сървъра SERVER_IP=$(ip -4 addr show | grep inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d'/' -f1 | head -n1) echo -e "${GREEN}[1/8] Конфигурация${NC}" echo "═══════════════════════════════════════" read -p "Въведи IP адрес на сървъра [$SERVER_IP]: " input_ip SERVER_IP=${input_ip:-$SERVER_IP} read -p "Въведи порт за OpenVPN [$PORT]: " input_port PORT=${input_port:-$PORT} read -p "Избери протокол (udp/tcp) [$PROTOCOL]: " input_protocol PROTOCOL=${input_protocol:-$PROTOCOL} read -p "Име на първия клиент [$CLIENT_NAME]: " input_client CLIENT_NAME=${input_client:-$CLIENT_NAME} echo "" echo -e "${GREEN}[2/8] Актуализация на системата${NC}" echo "═══════════════════════════════════════" apt-get update -qq apt-get upgrade -y -qq echo "" echo -e "${GREEN}[3/8] Инсталиране на OpenVPN и Easy-RSA${NC}" echo "═══════════════════════════════════════" apt-get install -y openvpn easy-rsa iptables echo "" echo -e "${GREEN}[4/8] Настройка на PKI и генериране на сертификати${NC}" echo "═══════════════════════════════════════" # Създаване на директория за Easy-RSA make-cadir ~/openvpn-ca cd ~/openvpn-ca # Конфигуриране на vars файла cat > vars < /etc/openvpn/server.conf <> /etc/sysctl.conf sysctl -p # Настройка на iptables за NAT INTERFACE=$(ip route | grep default | awk '{print $5}') iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $INTERFACE -j MASQUERADE # Запазване на iptables правилата apt-get install -y iptables-persistent netfilter-persistent save echo "" echo -e "${GREEN}[8/8] Стартиране на OpenVPN${NC}" echo "═══════════════════════════════════════" # Активиране и стартиране на OpenVPN systemctl enable openvpn@server systemctl start openvpn@server # Проверка на статуса sleep 2 if systemctl is-active --quiet openvpn@server; then echo -e "${GREEN}✓ OpenVPN сървърът е стартиран успешно!${NC}" else echo -e "${RED}✗ Грешка при стартиране на OpenVPN!${NC}" systemctl status openvpn@server exit 1 fi echo "" echo -e "${GREEN}[ФИНАЛИЗАЦИЯ] Генериране на клиентска конфигурация${NC}" echo "═══════════════════════════════════════" # Създаване на директория за клиентски конфигурации mkdir -p ~/client-configs # Създаване на базова клиентска конфигурация cat > ~/client-configs/base.conf < ~/client-configs/$CLIENT_NAME.ovpn < $(cat ~/openvpn-ca/pki/ca.crt) $(cat ~/openvpn-ca/pki/issued/$CLIENT_NAME.crt) $(cat ~/openvpn-ca/pki/private/$CLIENT_NAME.key) $(cat ~/openvpn-ca/pki/ta.key) EOF echo "" echo -e "${GREEN}╔═══════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ ИНСТАЛАЦИЯТА Е ЗАВЪРШЕНА! ║${NC}" echo -e "${GREEN}╚═══════════════════════════════════════════╝${NC}" echo "" echo -e "${YELLOW}Клиентският конфигурационен файл е създаден:${NC}" echo -e "${GREEN}~/client-configs/$CLIENT_NAME.ovpn${NC}" echo "" echo -e "${YELLOW}За да свалиш файла, използвай:${NC}" echo -e "scp root@$SERVER_IP:~/client-configs/$CLIENT_NAME.ovpn ." echo "" echo -e "${YELLOW}Проверка на статуса:${NC}" echo "systemctl status openvpn@server" echo "" echo -e "${YELLOW}Логове:${NC}" echo "tail -f /var/log/openvpn.log" echo "" # Създаване на скрипт за добавяне на нови клиенти cat > ~/add-client.sh <<'ADDCLIENT' #!/bin/bash # Скрипт за добавяне на нов VPN клиент if [ -z "$1" ]; then echo "Използване: ./add-client.sh <име_на_клиент>" exit 1 fi CLIENT_NAME=$1 cd ~/openvpn-ca # Генериране на клиентски сертификат echo -e "\n" | ./easyrsa gen-req $CLIENT_NAME nopass echo "yes" | ./easyrsa sign-req client $CLIENT_NAME # Вземане на конфигурацията SERVER_IP=$(grep "^remote" ~/client-configs/base.conf | awk '{print $2}') PORT=$(grep "^remote" ~/client-configs/base.conf | awk '{print $3}') PROTOCOL=$(grep "^proto" ~/client-configs/base.conf | awk '{print $2}') # Генериране на .ovpn файл cat > ~/client-configs/$CLIENT_NAME.ovpn < $(cat ~/openvpn-ca/pki/ca.crt) $(cat ~/openvpn-ca/pki/issued/$CLIENT_NAME.crt) $(cat ~/openvpn-ca/pki/private/$CLIENT_NAME.key) $(cat ~/openvpn-ca/pki/ta.key) EOF echo "Клиентският файл е създаден: ~/client-configs/$CLIENT_NAME.ovpn" ADDCLIENT chmod +x ~/add-client.sh echo -e "${GREEN}За добавяне на нови клиенти използвай:${NC}" echo "~/add-client.sh <име_на_клиент>" echo ""