Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
| openvpn_server [2012/07/27 11:00] – vytvořeno ubuntu | openvpn_server [2019/02/25 17:20] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| + | ====== OpenVPN server ====== | ||
| + | |{{.: | ||
| + | |||
| + | **[[http:// | ||
| + | |||
| + | ===== Literatura ===== | ||
| + |   * http:// | ||
| + |   * http:// | ||
| + |   * http:// | ||
| + |   * http:// | ||
| + |   * http:// | ||
| + | |||
| + | ===== Krok za krokem ===== | ||
| + | |||
| + | |||
| + | * Instalace programů (server - klienti): | ||
| + | < | ||
| + | apt-get install openvpn openssl | ||
| + | </ | ||
| + | |||
| + |   * Pro generování certifikátů pro uživatele je potřeba vytvořit certifikační autoritu. Certifikační autorita (v tomto případě server) zajišťuje důvěryhodnost připojení uživatelů k serveru. V první řadě vytvoříme adresář pro certifikační autoritu a potřebné podadresáře: | ||
| + | < | ||
| + | cd /etc/ssl/ | ||
| + | mkdir demoCA demoCA/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | * Nyní je třeba ještě vytvořit prázdný soubor index.txt a soubor serial s obsahem „01“: | ||
| + | < | ||
| + | touch / | ||
| + | echo 01 > / | ||
| + | </ | ||
| + | |||
| + | * Dále vygenerujeme certifikát certifikační autority a podepíšeme jej sám sebou: | ||
| + | < | ||
| + | cd / | ||
| + | openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 3650 | ||
| + | </ | ||
| + | |||
| + |   * Následně umístíme vygenerovaný klíč a certifikát do správných adresářů. Certifikát přesuneme do / | ||
| + | < | ||
| + | mv cacert.pem certs/ && mv cakey.pem private/ | ||
| + | chmod 400 private/ | ||
| + | </ | ||
| + | |||
| + | |||
| + |   * Správnost cest je třeba ještě jednou zkontrolovat v konfiguračním souboru programu openssl nacházející se v „/ | ||
| + | < | ||
| + | [ CA_default ] | ||
| + | |||
| + | dir             = ./ | ||
| + | certs           = $dir/ | ||
| + | crl_dir  | ||
| + | database  | ||
| + | |||
| + | new_certs_dir  | ||
| + | |||
| + | certificate  | ||
| + | serial  | ||
| + | |||
| + | crl             = $dir/ | ||
| + | private_key  | ||
| + | RANDFILE  | ||
| + | |||
| + | policy  | ||
| + | </ | ||
| + | |||
| + | |||
| + |  :!: Pokud z nějakého důvodu nefungují relativní cesty pomocí " | ||
| + | |||
| + | |||
| + | < | ||
| + | [ CA_default ] | ||
| + | |||
| + | dir		= / | ||
| + | certs		= / | ||
| + | crl_dir = $dir/crl # Where the issued crl are kept | ||
| + | database	= / | ||
| + | # | ||
| + | # several ctificates with same subject. | ||
| + | new_certs_dir	= / | ||
| + | |||
| + | certificate	= / | ||
| + | # | ||
| + | serial		= / | ||
| + | crlnumber	= $dir/ | ||
| + | # must be commented out to leave a V1 CRL | ||
| + | crl		= $dir/ | ||
| + | private_key	= / | ||
| + | RANDFILE	= $dir/ | ||
| + | |||
| + | x509_extensions = usr_cert # The extentions to add to the cert | ||
| + | |||
| + | # Comment out the following two lines for the " | ||
| + | # (and highly broken) format. | ||
| + | name_opt 	= ca_default		# | ||
| + | cert_opt 	= ca_default		# | ||
| + | |||
| + | # Extension copying option: use with caution. | ||
| + | # copy_extensions = copy | ||
| + | |||
| + | # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs | ||
| + | # so this is commented out by default to leave a V1 CRL. | ||
| + | # crlnumber must also be commented out to leave a V1 CRL. | ||
| + | # crl_extensions = crl_ext | ||
| + | |||
| + | default_days = 365 # how long to certify for | ||
| + | default_crl_days= 30 # how long before next CRL | ||
| + | default_md = sha1 # which md to use. | ||
| + | preserve = no # keep passed DN ordering | ||
| + | |||
| + | # A few difference way of specifying how similar the request should look | ||
| + | # For type CA, the listed attributes must be the same, and the optional | ||
| + | # and supplied fields are just that :-) | ||
| + | policy = policy_anything | ||
| + | </ | ||
| + | |||
| + | * Pokud je již všechno správně nastaveno, lze začít generovat certifikáty. Vygenerujeme ho tedy pro server. | ||
| + |  :!: Při vyplňování parametrů je nutné zadat stejné parametry uvedené v sekci [ policy_match ] v konfiguračním souboru „/ | ||
| + |  :!: match = má se rovnat (pro countryName vyplnuji vzdy " | ||
| + | :!: optional = nemusí se vyplnovat | ||
| + | :!: supplied = asi se musi vyplnovat, napriklad IP nebo jmeno (kazdy certifikat uniq?) | ||
| + | |||
| + | |||
| + | < | ||
| + | mkdir server && cd server | ||
| + | openssl req -new -nodes -out request.pem -keyout key.pem -days 1095 | ||
| + | </ | ||
| + | |||
| + |   * Z předchozího příkazu dostaneme dva soubory (žádost „request.pem“ a klíč „key.pem“). Následně potvrdíme certifikační autoritou žádost o vydání certifikátu: | ||
| + | < | ||
| + | openssl ca -in request.pem -out cert.pem | ||
| + | </ | ||
| + | |||
| + | |||
| + | :!: Zde může nastat problém popsaný v bodě 6! | ||
| + | |||
| + | |||
| + | < | ||
| + | # Chyba | ||
| + | openssl ca -in request.pem -out cert.pem | ||
| + | Using configuration from / | ||
| + | Error opening CA certificate ./ | ||
| + | 17226: | ||
| + | 17226: | ||
| + | unable to load certificate | ||
| + | </ | ||
| + | < | ||
| + | # Dobře | ||
| + | openssl ca -in request.pem -out cert.pem | ||
| + | Using configuration from / | ||
| + | Check that the request matches the signature | ||
| + | Signature ok | ||
| + | Certificate Details: | ||
| + | ... | ||
| + | ... výpis detailů ceritifikátu | ||
| + | ... | ||
| + | Certificate is to be certified until Nov 18 11:27:39 2010 GMT (365 days) | ||
| + | Sign the certificate? | ||
| + | 1 out of 1 certificate requests certified, commit? [y/n]y | ||
| + | Write out database with 1 new entries | ||
| + | Data Base Updated | ||
| + | </ | ||
| + | |||
| + | * Zkopírujeme soubory na patřičná místa na serveru | ||
| + | < | ||
| + | mv cert.pem / | ||
| + | mv key.pem / | ||
| + | </ | ||
| + | |||
| + | |||
| + | * Nyní vytvoříme certifikát pro uživatele, a potvrdíme certifikační autoritou: | ||
| + | < | ||
| + | mkdir client && cd client | ||
| + | openssl req -new -nodes -out request.pem -keyout key.pem -days 1095 | ||
| + | openssl ca -in request.pem -out cert.pem | ||
| + | </ | ||
| + | |||
| + | |||
| + |   * Po úspěšném provedení předchozího příkazu dostáváme certifikát potvrzený certifikační autoritou. Tímto způsobem vytvoříme certifikát pro server a klienty. Bezpečnou cestou přeneseme klíč , certifikát a certifikát certifikační autority do počítačů. Dále je třeba vytvořit soubor s Diffie-Hellmann algoritmem (více o DH na: http:// | ||
| + | < | ||
| + | openssl dhparam -out / | ||
| + | </ | ||
| + | |||
| + | |||
| + |   * V serveru vytvoříme konfigurační soubor pro připojení virtuální sítě. Konfigurační soubor vytvoříme v  „/ | ||
| + | < | ||
| + | mode server | ||
| + | tls-server | ||
| + | dev tap0 | ||
| + | port 1194 | ||
| + | |||
| + | ifconfig 10.0.1.1 255.255.255.0 | ||
| + | ifconfig-pool 10.0.1.100 10.0.1.200 255.255.255.0 | ||
| + | duplicate-cn | ||
| + | proto udp | ||
| + | |||
| + | ca / | ||
| + | cert / | ||
| + | key / | ||
| + | dh / | ||
| + | |||
| + | log-append / | ||
| + | status / | ||
| + | |||
| + | user root | ||
| + | group root | ||
| + | comp-lzo | ||
| + | verb 3 | ||
| + | |||
| + | keepalive 1 220 | ||
| + | </ | ||
| + | |||
| + | |||
| + |   * V počítači klienta vytvoříme konfigurační soubor pro připojení virtuální sítě. Editujeme soubor „/ | ||
| + | < | ||
| + | remote 1.2.3.4 ### IP adresa serveru | ||
| + | tls-client | ||
| + | dev tap | ||
| + | pull | ||
| + | |||
| + | mute 10 | ||
| + | ca / | ||
| + | cert / | ||
| + | key / | ||
| + | |||
| + | comp-lzo | ||
| + | verb 3 | ||
| + | </ | ||
| + | |||
| + | |||
| + |   * Nyní máme konfiguraci hotovou a lze ji vyzkoušet. Nejdříve spustíme vpn server „/ | ||
| + | < | ||
| + | cd / | ||
| + | openvpn --config ./ | ||
| + | </ | ||
| + | |||
| + | |||
| + | :!: Dostaneme vypis podobny tomuto: | ||
| + | < | ||
| + | OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on May 21 2007 | ||
| + | WARNING: No server certificate verification method has been enabled.  | ||
| + | WARNING: file ' | ||
| + | LZO compression initialized | ||
| + | Control Channel MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 EL:0 ] | ||
| + | Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 ET:32 EL:0 AF:3/1 ] | ||
| + | Local Options hash (VER=V4): ' | ||
| + | Expected Remote Options hash (VER=V4): ' | ||
| + | UDPv4 link local (bound): [undef]: | ||
| + | UDPv4 link remote: 1.2.3.4: | ||
| + | TLS: Initial packet from 1.2.3.4: | ||
| + | VERIFY OK: depth=1, / | ||
| + | VERIFY OK: depth=0, / | ||
| + | Data Channel Encrypt: Cipher ' | ||
| + | Data Channel Encrypt: Using 160 bit message hash ' | ||
| + | Data Channel Decrypt: Cipher ' | ||
| + | Data Channel Decrypt: Using 160 bit message hash ' | ||
| + | Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, | ||
| + | [duckd] Peer Connection Initiated with 1.2.3.4: | ||
| + | SENT CONTROL [duckd]: ' | ||
| + | PUSH: Received control message: ' | ||
| + | OPTIONS IMPORT: timers and/or timeouts modified | ||
| + | OPTIONS IMPORT: --ifconfig/ | ||
| + | TUN/TAP device tap0 opened | ||
| + | ifconfig tap0 10.0.1.100 netmask 255.255.255.0 mtu 1500 broadcast 10.0.1.255 | ||
| + | Initialization Sequence Completed | ||
| + | </ | ||
| + | |||
| + | |||
| + | * Na serveru a clientu se lze přesvědčit že jsou vytvořeny zařízení. Příkaz: ifconfig, zařízení tap0. A měl by fungovat ping. | ||
| + | |||
| + | |||
| + | ===== Skript ===== | ||
| + | |||
| + | * Soubory na serveru: | ||
| + | * vpn_server.conf ### Upravíme parametry připojení v konfiguračním souboru pro server | ||
| + | * bash server_install.sh ### Pokud máme tyto dva soubory ve stejném adresáři, instalujeme openvpn na server. Výsledkem má být běžící openvpn server v terminálu. | ||
| + |       * server_generuj_certifikat.sh ### Generuj přístup jednomu klientovi a zabal do balíku / | ||
| + | |||
| + | |||
| + | * Soubory na klientovi: | ||
| + |       * vpn_client.conf ### Upravíme klientovo konfigurák\  | ||
| + |       * client_X.tar ### balík získáme ze serveru (bezpečnou cestou)\  | ||
| + |       * bash client_install.sh ### pokud máme tyto tři soubory ve stejném adresáři, instalujeme openvpn na klienta\  | ||
| + | |||
| + | ==== Server ==== | ||
| + | * vpn_server.conf | ||
| + | < | ||
| + | mode server | ||
| + | port 1194 | ||
| + | proto tcp-server | ||
| + | tls-server | ||
| + | dev tap0 | ||
| + | |||
| + | ifconfig 10.0.1.1 255.255.255.0 | ||
| + | ifconfig-pool 10.0.1.100 10.0.1.200 255.255.255.0 | ||
| + | duplicate-cn | ||
| + | |||
| + | ca / | ||
| + | cert / | ||
| + | key / | ||
| + | dh / | ||
| + | |||
| + | log-append / | ||
| + | status / | ||
| + | |||
| + | user root | ||
| + | group root | ||
| + | comp-lzo | ||
| + | verb 3 | ||
| + | |||
| + | keepalive 1 220 | ||
| + | </ | ||
| + | |||
| + | |||
| + | * server_install.sh | ||
| + | < | ||
| + | |||
| + | wd=`pwd` | ||
| + | |||
| + | echo -e ' | ||
| + | apt-get install -y openvpn openssl | ||
| + | |||
| + | echo -e ' | ||
| + | mkdir -p / | ||
| + | |||
| + | echo -e ' | ||
| + | touch / | ||
| + | echo 01 > / | ||
| + | |||
| + | echo -e ' | ||
| + | cd / | ||
| + | openssl req -new -x509 -nodes -out cacert.pem -keyout cakey.pem -days 3650 | ||
| + | |||
| + | echo -e ' | ||
| + | chmod 400 cakey.pem | ||
| + | mv cakey.pem private/ | ||
| + | |||
| + | echo -e ' | ||
| + | openssl dhparam -out dh1024.pem 1024 | ||
| + | |||
| + | echo -e ' | ||
| + | cd /etc/ssl | ||
| + | openssl req -new -nodes -out request.pem -keyout key.pem -days 1095 | ||
| + | |||
| + | echo -e ' | ||
| + | openssl ca -in request.pem -out cert.pem | ||
| + | rm request.pem | ||
| + | mv cert.pem demoCA/ | ||
| + | mv key.pem demoCA/ | ||
| + | |||
| + | echo -e ' | ||
| + | mkdir / | ||
| + | cp / | ||
| + | |||
| + | echo -e ' | ||
| + | cd $wd | ||
| + | cp vpn_server.conf / | ||
| + | |||
| + | echo -e ' | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | |||
| + | * server_generuj_certifikat.sh | ||
| + | < | ||
| + | |||
| + | cd / | ||
| + | |||
| + | function generuj_certifikat | ||
| + | { | ||
| + | openssl req -new -nodes -out request.pem -keyout key.pem -days 1095 | ||
| + | openssl ca -in request.pem -out cert.pem | ||
| + | rm request.pem | ||
| + | tar -cvf client_$number.tar key.pem cert.pem cacert.pem | ||
| + | rm key.pem cert.pem | ||
| + | } | ||
| + | |||
| + | for (( number=1 ; $number-1000 ; number=$number+1 )) | ||
| + | do | ||
| + | if [ -f client_$number.tar ] | ||
| + | then | ||
| + | echo the file exists | ||
| + | else | ||
| + | generuj_certifikat | ||
| + | exit | ||
| + | fi | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | * Pokud chcete odebrat openvpn ze serveru včetně veškerých vytvořených soborů a adresářů | ||
| + | < | ||
| + | apt-get purge openvpn && rm -r / | ||
| + | </ | ||
| + | |||
| + | ==== Klient ==== | ||
| + | * vpn_client.conf | ||
| + | < | ||
| + | remote 192.168.1.10 ### IP adresa serveru | ||
| + | dev tap | ||
| + | proto tcp-client | ||
| + | port 1194 | ||
| + | tls-client | ||
| + | pull | ||
| + | |||
| + | mute 10 | ||
| + | ca cacert.pem | ||
| + | cert cert.pem | ||
| + | key key.pem | ||
| + | |||
| + | comp-lzo | ||
| + | verb 3 | ||
| + | </ | ||
| + | |||
| + | * client_install.sh | ||
| + | < | ||
| + | |||
| + | echo "1) Instalace programů na klienta" | ||
| + | apt-get install -y openvpn openssl | ||
| + | |||
| + | echo " | ||
| + | mv vpn_client.conf / | ||
| + | |||
| + | echo " | ||
| + | tar -xvf client_*.tar; | ||
| + | |||
| + | echo " | ||
| + | openvpn --config / | ||
| + | </ | ||
| + | |||
| + | ===== Konec ===== | ||
| + | {{.: | ||
| + |   * **Vytvořil: | ||
| + | * **Pomáhali a radili:** Krtko, fenquick, trako, lkopecky | ||