Последняя активность 1760756431

Автоматична инсталация на OpenVPN сървър в Proxmox LXC контейнер

Версия aeb7fb0c3f9c201fbd019de9a4058668734634d8

openvpn-install.sh Исходник
1#!/bin/bash
2
3# OpenVPN Auto-Install Script за Proxmox LXC контейнер
4# Използване: sudo bash openvpn-install.sh
5
6set -e
7
8# Цветове за изхода
9RED='\033[0;31m'
10GREEN='\033[0;32m'
11YELLOW='\033[1;33m'
12NC='\033[0m' # No Color
13
14echo -e "${GREEN}╔═══════════════════════════════════════════╗${NC}"
15echo -e "${GREEN}║ OpenVPN Auto-Install за Proxmox LXC ║${NC}"
16echo -e "${GREEN}╔═══════════════════════════════════════════╗${NC}"
17echo ""
18
19# Проверка дали скриптът се изпълнява като root
20if [[ $EUID -ne 0 ]]; then
21 echo -e "${RED}Този скрипт трябва да се изпълни като root!${NC}"
22 exit 1
23fi
24
25# Проверка дали сме в LXC контейнер
26if ! grep -q lxc /proc/1/cgroup 2>/dev/null && ! [ -f /.dockerenv ]; then
27 echo -e "${YELLOW}Внимание: Не сте в LXC контейнер. Продължаваме...${NC}"
28fi
29
30# Конфигурационни променливи
31SERVER_NAME="openvpn-server"
32CLIENT_NAME="client1"
33PORT=1194
34PROTOCOL="udp"
35DNS1="8.8.8.8"
36DNS2="8.8.4.4"
37
38# Получаване на IP адреса на сървъра
39SERVER_IP=$(ip -4 addr show | grep inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d'/' -f1 | head -n1)
40
41echo -e "${GREEN}[1/8] Конфигурация${NC}"
42echo "═══════════════════════════════════════"
43read -p "Въведи IP адрес на сървъра [$SERVER_IP]: " input_ip
44SERVER_IP=${input_ip:-$SERVER_IP}
45
46read -p "Въведи порт за OpenVPN [$PORT]: " input_port
47PORT=${input_port:-$PORT}
48
49read -p "Избери протокол (udp/tcp) [$PROTOCOL]: " input_protocol
50PROTOCOL=${input_protocol:-$PROTOCOL}
51
52read -p "Име на първия клиент [$CLIENT_NAME]: " input_client
53CLIENT_NAME=${input_client:-$CLIENT_NAME}
54
55echo ""
56echo -e "${GREEN}[2/8] Актуализация на системата${NC}"
57echo "═══════════════════════════════════════"
58apt-get update -qq
59apt-get upgrade -y -qq
60
61echo ""
62echo -e "${GREEN}[3/8] Инсталиране на OpenVPN и Easy-RSA${NC}"
63echo "═══════════════════════════════════════"
64apt-get install -y openvpn easy-rsa iptables
65
66echo ""
67echo -e "${GREEN}[4/8] Настройка на PKI и генериране на сертификати${NC}"
68echo "═══════════════════════════════════════"
69
70# Създаване на директория за Easy-RSA
71make-cadir ~/openvpn-ca
72cd ~/openvpn-ca
73
74# Конфигуриране на vars файла
75cat > vars <<EOF
76set_var EASYRSA_REQ_COUNTRY "BG"
77set_var EASYRSA_REQ_PROVINCE "Pazardzhik"
78set_var EASYRSA_REQ_CITY "Pazardzhik"
79set_var EASYRSA_REQ_ORG "OpenVPN-Server"
80set_var EASYRSA_REQ_EMAIL "[email protected]"
81set_var EASYRSA_REQ_OU "IT"
82set_var EASYRSA_ALGO "ec"
83set_var EASYRSA_DIGEST "sha512"
84EOF
85
86# Инициализация на PKI
87./easyrsa init-pki
88
89# Създаване на CA без парола
90echo -e "\n" | ./easyrsa build-ca nopass
91
92# Генериране на сървърен ключ и сертификат
93echo -e "\n" | ./easyrsa gen-req $SERVER_NAME nopass
94echo "yes" | ./easyrsa sign-req server $SERVER_NAME
95
96# Генериране на Diffie-Hellman параметри
97./easyrsa gen-dh
98
99# Генериране на tls-auth ключ
100openvpn --genkey secret pki/ta.key
101
102# Генериране на клиентски сертификат
103echo -e "\n" | ./easyrsa gen-req $CLIENT_NAME nopass
104echo "yes" | ./easyrsa sign-req client $CLIENT_NAME
105
106echo ""
107echo -e "${GREEN}[5/8] Копиране на сертификатите${NC}"
108echo "═══════════════════════════════════════"
109
110# Копиране на сертификатите в OpenVPN директорията
111cp pki/ca.crt /etc/openvpn/
112cp pki/issued/$SERVER_NAME.crt /etc/openvpn/
113cp pki/private/$SERVER_NAME.key /etc/openvpn/
114cp pki/dh.pem /etc/openvpn/
115cp pki/ta.key /etc/openvpn/
116
117echo ""
118echo -e "${GREEN}[6/8] Създаване на конфигурация на сървъра${NC}"
119echo "═══════════════════════════════════════"
120
121# Създаване на server.conf
122cat > /etc/openvpn/server.conf <<EOF
123# OpenVPN Server Configuration
124port $PORT
125proto $PROTOCOL
126dev tun
127
128ca ca.crt
129cert $SERVER_NAME.crt
130key $SERVER_NAME.key
131dh dh.pem
132tls-auth ta.key 0
133
134server 10.8.0.0 255.255.255.0
135ifconfig-pool-persist ipp.txt
136
137push "redirect-gateway def1 bypass-dhcp"
138push "dhcp-option DNS $DNS1"
139push "dhcp-option DNS $DNS2"
140
141keepalive 10 120
142cipher AES-256-GCM
143auth SHA256
144user nobody
145group nogroup
146persist-key
147persist-tun
148
149status openvpn-status.log
150log-append /var/log/openvpn.log
151verb 3
152explicit-exit-notify 1
153EOF
154
155echo ""
156echo -e "${GREEN}[7/8] Настройка на мрежата и firewall${NC}"
157echo "═══════════════════════════════════════"
158
159# Активиране на IP forwarding
160echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
161sysctl -p
162
163# Настройка на iptables за NAT
164INTERFACE=$(ip route | grep default | awk '{print $5}')
165iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $INTERFACE -j MASQUERADE
166
167# Запазване на iptables правилата
168apt-get install -y iptables-persistent
169netfilter-persistent save
170
171echo ""
172echo -e "${GREEN}[8/8] Стартиране на OpenVPN${NC}"
173echo "═══════════════════════════════════════"
174
175# Активиране и стартиране на OpenVPN
176systemctl enable openvpn@server
177systemctl start openvpn@server
178
179# Проверка на статуса
180sleep 2
181if systemctl is-active --quiet openvpn@server; then
182 echo -e "${GREEN}✓ OpenVPN сървърът е стартиран успешно!${NC}"
183else
184 echo -e "${RED}✗ Грешка при стартиране на OpenVPN!${NC}"
185 systemctl status openvpn@server
186 exit 1
187fi
188
189echo ""
190echo -e "${GREEN}[ФИНАЛИЗАЦИЯ] Генериране на клиентска конфигурация${NC}"
191echo "═══════════════════════════════════════"
192
193# Създаване на директория за клиентски конфигурации
194mkdir -p ~/client-configs
195
196# Създаване на базова клиентска конфигурация
197cat > ~/client-configs/base.conf <<EOF
198client
199dev tun
200proto $PROTOCOL
201remote $SERVER_IP $PORT
202resolv-retry infinite
203nobind
204user nobody
205group nogroup
206persist-key
207persist-tun
208remote-cert-tls server
209cipher AES-256-GCM
210auth SHA256
211verb 3
212EOF
213
214# Генериране на .ovpn файл с вградени сертификати
215cat > ~/client-configs/$CLIENT_NAME.ovpn <<EOF
216client
217dev tun
218proto $PROTOCOL
219remote $SERVER_IP $PORT
220resolv-retry infinite
221nobind
222user nobody
223group nogroup
224persist-key
225persist-tun
226remote-cert-tls server
227cipher AES-256-GCM
228auth SHA256
229verb 3
230key-direction 1
231
232<ca>
233$(cat ~/openvpn-ca/pki/ca.crt)
234</ca>
235
236<cert>
237$(cat ~/openvpn-ca/pki/issued/$CLIENT_NAME.crt)
238</cert>
239
240<key>
241$(cat ~/openvpn-ca/pki/private/$CLIENT_NAME.key)
242</key>
243
244<tls-auth>
245$(cat ~/openvpn-ca/pki/ta.key)
246</tls-auth>
247EOF
248
249echo ""
250echo -e "${GREEN}╔═══════════════════════════════════════════╗${NC}"
251echo -e "${GREEN}║ ИНСТАЛАЦИЯТА Е ЗАВЪРШЕНА! ║${NC}"
252echo -e "${GREEN}╚═══════════════════════════════════════════╝${NC}"
253echo ""
254echo -e "${YELLOW}Клиентският конфигурационен файл е създаден:${NC}"
255echo -e "${GREEN}~/client-configs/$CLIENT_NAME.ovpn${NC}"
256echo ""
257echo -e "${YELLOW}За да свалиш файла, използвай:${NC}"
258echo -e "scp root@$SERVER_IP:~/client-configs/$CLIENT_NAME.ovpn ."
259echo ""
260echo -e "${YELLOW}Проверка на статуса:${NC}"
261echo "systemctl status openvpn@server"
262echo ""
263echo -e "${YELLOW}Логове:${NC}"
264echo "tail -f /var/log/openvpn.log"
265echo ""
266
267# Създаване на скрипт за добавяне на нови клиенти
268cat > ~/add-client.sh <<'ADDCLIENT'
269#!/bin/bash
270# Скрипт за добавяне на нов VPN клиент
271
272if [ -z "$1" ]; then
273 echo "Използване: ./add-client.sh <име_на_клиент>"
274 exit 1
275fi
276
277CLIENT_NAME=$1
278cd ~/openvpn-ca
279
280# Генериране на клиентски сертификат
281echo -e "\n" | ./easyrsa gen-req $CLIENT_NAME nopass
282echo "yes" | ./easyrsa sign-req client $CLIENT_NAME
283
284# Вземане на конфигурацията
285SERVER_IP=$(grep "^remote" ~/client-configs/base.conf | awk '{print $2}')
286PORT=$(grep "^remote" ~/client-configs/base.conf | awk '{print $3}')
287PROTOCOL=$(grep "^proto" ~/client-configs/base.conf | awk '{print $2}')
288
289# Генериране на .ovpn файл
290cat > ~/client-configs/$CLIENT_NAME.ovpn <<EOF
291client
292dev tun
293proto $PROTOCOL
294remote $SERVER_IP $PORT
295resolv-retry infinite
296nobind
297user nobody
298group nogroup
299persist-key
300persist-tun
301remote-cert-tls server
302cipher AES-256-GCM
303auth SHA256
304verb 3
305key-direction 1
306
307<ca>
308$(cat ~/openvpn-ca/pki/ca.crt)
309</ca>
310
311<cert>
312$(cat ~/openvpn-ca/pki/issued/$CLIENT_NAME.crt)
313</cert>
314
315<key>
316$(cat ~/openvpn-ca/pki/private/$CLIENT_NAME.key)
317</key>
318
319<tls-auth>
320$(cat ~/openvpn-ca/pki/ta.key)
321</tls-auth>
322EOF
323
324echo "Клиентският файл е създаден: ~/client-configs/$CLIENT_NAME.ovpn"
325ADDCLIENT
326
327chmod +x ~/add-client.sh
328
329echo -e "${GREEN}За добавяне на нови клиенти използвай:${NC}"
330echo "~/add-client.sh <име_на_клиент>"
331echo ""