Translation(s): English - Français -Русский - Polski


Przegląd OpenVPN

OpenVPN jest pakietem oprogramowania VPN opartym na SSL/TLS. Jest w stanie trasować połączenia NAT i zapory sieciowe. Ta strona wyjaśnia zwięźle jak skonfigurować VPN z OpenVPN zarówno od strony serwerowej jak i klienckiej.

Instalacja

Zainstaluj pakiet openvpn zarówno na serwerze jak i kliencie.

# apt-get install openvpn

Żeby włączyć OpenVPN w GNOME NetworkManager, dodatkowy pakiet network-manager-openvpn-gnome musi zostać zainstalowany:

# apt-get install network-manager-openvpn-gnome

Konfiguracja

OpenVPN może uwierzytelniać użytkowników przez login i hasło, wstępnie udostępniony klucz, certyfikaty itd.

Testowanie VPN

Przetestuj surowe połączenie.

test serwera

Z powłoki serwera wykonaj:

# openvpn --remote CLIENT_IP --dev tun1 --ifconfig 10.9.8.1 10.9.8.2

jeśli twój klient posiada statyczne IP#, w przeciwnym wypadku uruchom:

# openvpn --dev tun1 --ifconfig 10.9.8.1 10.9.8.2

Powinieneś zobaczyć wyjście terminala przypominające

Wed Mar  7 06:03:03 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Wed Mar  7 06:03:03 2012 ******* WARNING *******: all encryption and authentication features disabled -- all data will be tunnelled as cleartext
Wed Mar  7 06:03:03 2012 TUN/TAP device tun1 opened
...

Podczas gdy openvpn jest uruchomiony, sprawdź swoją konfigurację sieci używając sudo ifconfig -a. Wyjście powinno zawierać

tun1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.9.8.1  P-t-P:10.9.8.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2262 (2.2 KiB)  TX bytes:1819 (1.7 KiB)

Zauważ że jeśli zabijesz proces openvpn (np. naciskając Control-c w konsoli), nie zobaczysz powyższego interfejsu sieciowego.

test klienta

# openvpn --remote SERVER_IP --dev tun1 --ifconfig 10.9.8.2 10.9.8.1
...
Wed Mar  7 18:05:30 2012 Peer Connection Initiated with [AF_INET]SERVER_IP:PORT
Wed Mar  7 18:05:30 2012 Initialization Sequence Completed
...

Możesz także przetestować używając polecenia ping.

Statyczny klucz VPN

W katalogu serwera /etc/openvpn, uruchom następującą komendę aby wygenerować statyczny klucz:

# openvpn --genkey --secret static.key

Skopiuj statyczny klucz do katalogu klienta /etc/openvpn używając bezpiecznego kanału takiego jak scp czy sftp.

Na serwerze utwórz nowy plik /etc/openvpn/tun0.conf i dodaj następujący kod:

dev tun0
ifconfig 10.9.8.1 10.9.8.2
secret /etc/openvpn/static.key

10.9.8.x to twoja podsieć VPN, 10.9.8.1 jest adresem IP serwera, 10.9.8.2 jest adresem IP klienta.

Na komputerze klienta skopiuj /etc/openvpn/static.key z serwera i utwórz nowy plik /etc/openvpn/tun0.conf i dodaj następujący kod:

remote your-server.org
dev tun0
ifconfig 10.9.8.2 10.9.8.1
secret /etc/openvpn/static.key

W zaporze sieciowej serwera otwórz port UDP 1194 (domyślny port).

Jeśli używasz na obu urządzeniach ?shorewall, dodaj nową strefę VPN aby reprezentowała tun0 i utwórz domyślną politykę dla niej. To znaczy dodanie czegoś do następujących plików w /etc/shorewall:

Miej na uwadze że w 90% wszystkich problemów z połączeniem napotkanych przez nowych użytkowników OpenVPN są związane z zaporą sieciową.

Uruchom OpenVPN ręcznie po obu stronach poleceniem:

# openvpn --config /etc/openvpn/tun0.conf --verb 6  // verbose output.

Na tym etapie prawdopodobnie należy skonfigurować trasę.

Aby sprawdzić, czy sieć VPN działa, należy pingować 10.9.8.2 z serwera i 10.9.8.1 z klienta.

VPN z włączonym TLS

Na serwerze skopiuj klucz generujący skrypt z przykładów openvpn do /etc/openvpn i dodaj uprawnienia do wykonywania:

# cd /etc/openvpn
# mkdir easy-rsa

W Jessie i powyższych easy-rsa jest osobnym pakietem. Więc musisz zainstalować to, oprócz openvpn.

Na Wheezy:

# cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* easy-rsa/

Na Jessie i powyższych:

# apt-get install easy-rsa
# cp -R /usr/share/easy-rsa/* easy-rsa/

Edytuj dół /etc/openvpn/easy-rsa/vars zgodnie z Twoją organizacją.

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="mail@domain"
export KEY_EMAIL=mail@domain

Wykonaj następujące polecenie:

# cd easy-rsa/
# touch keys/index.txt
# echo 01 > keys/serial
# . ./vars  # set environment variables
# ./clean-all

Zapamiętaj:

Generuj CERTIFICATE AUTHORITY (CA) CERTIFICATE/KEY:

# ./build-ca

To wygeneruje ca.crt i ca.key w katalogu /etc/openvpn/easy-rsa/keys/.

Generuj BUILD AN INTERMEDIATE CERTIFICATE AUTHORITY CERTIFICATE/KEY (opcjonalne):

# ./build-key-server server

To wygeneruje server.crt i server.key w katalogu /etc/openvpn/easy-rsa/keys/, i podpisany certyfikatem głównym.

Generuj BUILD DIFFIE-HELLMAN PARAMETERS (Konieczne do zakończenia połączenia z serwerem SSL/TLS):

./build-dh

Generuj klucz dla każdego klienta:

./build-key clientname

Wygeneruj klucz za pomocą hasła (co chroni klucz i zażąda hasła za każdym razem, gdy łączysz się z serwerem), dla każdego klienta:

./build-key-pass clientname

To wygeneruje klucze w katalogu /etc/openvpn/easy-rsa/keys/

Skopiuj ca.crt, clientname.crt, clientname.key z serwera do katalogu klienta /etc/openvpn/easy-rsa/keys/.

Sprawdź OpenVPN RSA Key i code.mixpanel.com VPN po więcej szczegółów.

Sprawdź połączenie z wiersza polecenia.

Serwer:

openvpn --dev tun1 --ifconfig 10.9.8.1 10.9.8.2 --tls-server --dh /etc/openvpn/easy-rsa/keys/dh2048.pem --ca /etc/openvpn/easy-rsa/keys/ca.crt --cert /etc/openvpn/easy-rsa/keys/server.crt --key /etc/openvpn/easy-rsa/keys/server.key --reneg-sec 60 --verb 5

Klient:

openvpn --remote SERVER_IP --dev tun1 --ifconfig 10.9.8.2 10.9.8.1 --tls-client --ca /etc/openvpn/easy-rsa/keys/ca.crt --cert /etc/openvpn/easy-rsa/keys/clientname.crt --key /etc/openvpn/easy-rsa/keys/clientname.key --reneg-sec 60 --verb 5

Jeśli połączenie się powiedzie, utwórz konfigurację pliku.

Na serwerze utwórz /etc/openvpn/server.conf następująco:

port 1194
proto udp
dev tun

ca      /etc/openvpn/easy-rsa/keys/ca.crt    # generated keys
cert    /etc/openvpn/easy-rsa/keys/server.crt
key     /etc/openvpn/easy-rsa/keys/server.key  # keep secret
dh      /etc/openvpn/easy-rsa/keys/dh2048.pem

server 10.9.8.0 255.255.255.0  # internal tun0 connection IP
ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo         # Compression - must be turned on at both end
persist-key
persist-tun

status log/openvpn-status.log

verb 3  # verbose mode
client-to-client

Sprawdź code.mixpanel.com VPN i rackspace OpenVPN po więcej szczegółów.

Utwórz katalog dzienników:

# cd /etc/openvpn
# mkdir -p log/
# touch log/openvpn-status.log

Uruchom ponownie OpenVPN (pamiętaj, że /etc/init.d/openvpn skrypt uruchamia serwer openvpn dla każdego pliku .conf w /etc/openvpn/, więc jeśli nadal masz plik tun0.conf z powyższego, zmień jego nazwę na coś innego niż * .conf):

# /etc/init.d/openvpn restart

W kliencie tworzysz /etc/openvpn/client.conf jak następująco:

(Uwaga: możesz użyć graficznego interfejsu menedżera sieciowego narzędzia vpn, dostarczając klucz i certyfikaty)

client
dev tun
port 1194
proto udp

remote VPNSERVER_IP 1194             # VPN server IP : PORT
nobind

ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/clientname.crt
key /etc/openvpn/easy-rsa/keys/clientname.key

comp-lzo
persist-key
persist-tun

verb 3

Restartuj OpenVPN:

# /etc/init.d/openvpn restart

Serwer Debian z urządzeniami Android / iOS

OpenVPN może być skonfigurowany do używania z urządzeniami Android / iO.

Na serwerze Debian utworzyć wymagane certyfikaty, jeśli masz nową instalację OpenVPN:

# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
# . ./vars
# ./clean-all
# ./build-ca
# ./build-key-server server
# ./build-key client
# ./build-dh
# cd keys
# mv *.pem *.crt *.csr *.key /etc/openvpn
# cd /usr/share/doc/openvpn/examples/sample-config-files
# gunzip -c server.conf.gz > /etc/openvpn/server.conf

Modyfikuj poniżej wierszy w /etc/openvpn/server.conf:

...
proto tcp
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
user nobody
group nogroup
...

8.8.8.8 to serwer Google DNS. Możesz zmienić na preferowany serwer DNS.

Po zakończeniu uruchom ponownie serwer OpenVPN, aby użyć nowej konfiguracji:

# /etc/init.d/openvpn restart

Utwórz plik profilu klienta /etc/openvpn/client.ovpn i dołącz do niego certyfikaty:

# cd /etc/openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf client.ovpn
# echo "key-direction 1" >> client.ovpn
# echo "<ca>" >> client.ovpn
# cat ca.crt | grep -A 100 "BEGIN CERTIFICATE" | grep -B 100 "END CERTIFICATE" >> client.ovpn
# echo "</ca>" >> client.ovpn
# echo "<cert>" >> client.ovpn
# cat client.crt | grep -A 100 "BEGIN CERTIFICATE" | grep -B 100 "END CERTIFICATE" >> client.ovpn
# echo "</cert>" >> client.ovpn
# echo "<key>" >> client.ovpn
# cat client.key | grep -A 100 "BEGIN PRIVATE KEY" | grep -B 100 "END PRIVATE KEY" >> client.ovpn
# echo "</key>" >> client.ovpn

Modyfikuj poniższe linie w pliku profilu klienta /etc/openvpn/client.ovpn:

...
proto tcp
remote YourServerIp YourServerPort
mute-replay-warnings
# ca ca.crt
# cert client.crt
# key client.key
key-direction 1
...

Gdzie ?YourServerIp i ?YourServerPort powinny zostać zmienione na serwer. Trzy wiersze (#ca, #cert, #key) są oznaczone jako wymagane certyfikaty zostały dołączone do pliku profilu zamiast poszczególnych plików.

Wyślij e-maila lub załaduj do Google Drive plik konfiguracyjny klienta /etc/openvpn/client.ovpn aby go pobrać na iPhone.

Dla urządzeń iOS zainstaluj klienta OpenVPN Connect. Następnie prześlij plik konfiguracyjny klienta /etc/openvpn/client.ovpn do urządzenia pocztą e-mail lub na Dysku Google. Otwórz plik konfiguracyjny w aplikacji Poczta lub aplikacje Dysk Google.

Dla urządzeń Android zainstaluj klienta OpenVPN Connect. Następnie skopiuj plik konfiguracyjny klienta /etc/openvpn/client.ovpn do pamięci urządzenia. Otwórz plik konfiguracyjny w aplikacjach OpenVPN.

Przekazywanie ruchu przez VPN

W serwerze włącz przekierowanie IP w czasie pracy:

echo 1 > /proc/sys/net/ipv4/ip_forward

Edytuj /etc/sysctl.conf , aby zmiany stały się trwałe:

net.ipv4.ip_forward = 1

Wykonaj następujące polecenie na serwerze do testów:

iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.9.8.0/24 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.9.8.0/24 -o eth0 -j MASQUERADE

Możesz także użyć skryptu rc.firewall-iptables z TLDP Masquerade jako alternatywę.

W kliencie:

# ip route add VPNSERVER_IP via LOCALGATEWAY_IP dev eth0  proto static
# ip route change default via 10.9.8.5 dev tun0  proto static   //client tun0 10.9.8.5

Jeśli zazwyczaj używasz klienta graficznego, może nie być konieczne wykonanie tej komendy.

Jeśli wszystko działa poprawnie, zapisz reguły iptables:

# iptables-save > /etc/iptables.up.rules

Żeby przywrócić:

# iptables-restore < /etc/iptables.up.rules

Dodaj to do skryptu startowego. Odwiedź stronę Debian wiki iptables po szczegóły.

Uruchamianie automatyczne

Domyślnie wszystkie skonfigurowane sieci VPN są uruchamiane podczas rozruchu systemu. Edytuj /etc/default/openvpn, aby uruchomić określone sieci VPN lub wyłączyć to zachowanie. Użytkownicy systemu mogą potrzebować Uruchom ponownie systemcat-daemon-reload, aby włączyć nowe sieci VPN.

openvpn Haki ifupdown są również dostępne do uruchamiania/zatrzymywania tuneli używających /etc/network/interfaces np.:

auto dsl
iface dsl inet ppp
    provider dsl-provider
    openvpn work_vpn

Zobacz /usr/share/doc/openvpn/README.Debian.gz po więcej informacji.

Aplikacja VPN przechodząca przez proxy http

W tej części opisano, jak konfigurować VPN, aby przejść przez proxy http, które umożliwiają tylko dostęp do portu 443 (i 80). Użyj tego protokołu http_proxy OpenVPN.

  1. Przede wszystkim sprawdź, czy port 443 nie jest już używany przez inną usługę na Twoim serwerze.
  2. Konfiguruj OpenVPN po stronie serwera, dodając port 443 i proto tcp-server do pliku konfiguracyjnego.

  3. Konfiguruj OpenVPN po stronie klienta, dodając do pliku konfiguracyjnego "port 443", "proto tcp-client" i "http-proxy 1.1.1.1 8080".

Gdzie 1.1.1.1 i 8080 to IP i port Twojego proxy.

  1. Teraz należy uruchomić OpenVPN na serwerze, a następnie na komputerze klienckim.
  2. W tej chwili należy skonfigurować trasy do korzystania z tunelu VPN:
    • Usuń domyślną trasę przez proxy: route default default eth0

    • Dodaj domyślną trasę przez VPN: route add default gw 10.9.8.1 dev tun0

    • Powinieneś zachować trasę do serwera proxy: "route add 1.1.1.1 eth0"

Zaktualizuj plik /etc/resolv.conf zgodnie z Twoimi potrzebami.

TODO

  1. Wyjaśnij, jak włączyć interfejs zarządzania (http://openvpn.net/index.php/open-source/documentation/miscellaneous/79-management-interface.html)


Zobacz także