Última atividade 1760756431

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

urocibg revisou este gist 1760756431. Ir para a revisão

1 file changed, 331 insertions

openvpn-install.sh(arquivo criado)

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