OpenVPN
По умолчанию, когда клиент OpenVPN активен, только сетевой трафик к и от сайта OpenVPN-сервера идет через VPN. Например, обычный просмотр веб-страниц будет осуществляться через прямое подключение в обход VPN.
В некоторых случаях такое поведение может быть нежелательным -- у вас может возникнуть необходимость чтобы VPN-клиент туннелировал весь сетевой трафик через VPN, включая просмотр веб-страниц Интернета. Хотя этот тип VPN конфигурации приведет к потере производительности на клиенте, он дает администратору VPN более полный контроль над политиками безопасности когда клиент одновременно подключен и к Интернету и к VPN.
Настройка клиента
- apt-get install openvpn
- настроить конфигурацию
- настроить имя конфигурации NAME в /etc/default/openvpn
Конфигурация
nano /etc/openvpn/client.conf
port 1195 proto udp dev tap remote xxx.xxx.xxx.xxx tls-client ca ca.crt #эти файлы получить у админа vpn-сервера cert clients.crt #эти файлы получить у админа vpn-сервера key clients.key #эти файлы получить у админа vpn-сервера ifconfig 10.3.0.54 255.255.255.0 # присвоенный ip для вашего сертификата route 10.3.0.54 255.255.255.255 10.3.0.1 # это думаю понятно route 192.168.25.0 255.255.255.0 10.3.0.1 # добавляем внутренние сети со стороны сервера (если нужны конечно) tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 pull cipher DES-CBC comp-lzo
Настройка сервера
- aptitude install openvpn
- cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn
- nano /etc/openvpn/easy-rsa/2.0/vars
Зададим размер ключа (чем больше, тем лучше и тем медленнее будет работать, ну и не рекомендую ставить 4096 например, поту что build-dh потом будет выполняться несколько часов):
export KEY_SIZE=1024
Зададим время, через которое понадобится обновить ключи:
export KEY_EXPIRE=365
Зададим параметры генерации SSL сертификата:
export KEY_COUNTRY="RU" export KEY_PROVINCE="SPB" export KEY_CITY="SaintPetersburg" export KEY_ORG="Home" export KEY_EMAIL="postmaster@example.com"
Загрузим все переменные:
# cd /etc/openvpn/easy-rsa/2.0/ # . ./vars
Эта команда удаляет все сертификаты, которые были сгенерированы ранее (ну вдруг это не первая попытка):
# . ./clean-all
Создаём центр сертификации. Это очень важный файл и крайне рекомендуется сохранить получившиеся файлы ещё где-нибудь. С помощью центра сертификации производится подписывание генерируемых сертификатов и подключится с сертификатом от другого центра не получится, даже если у него будут одинаковые параметры генерации.
# . ./build-ca Generating a 1024 bit RSA private key ........++ .............................................................................................................................................................................................++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [SPB]: Locality Name (eg, city) [SaintPetersburg]: Organization Name (eg, company) [Home]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [output-meta]:openvpn.local Name []:Nikita Menkovich Email Address [postmaster@example.com]:
Создаём сертификат сервера, с его помощью будет производится проверка, что сервер это тот именно сервер.
# . ./build-key-server server Generating a 1024 bit RSA private key .........................................++ .....++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [SPB]: Locality Name (eg, city) [SaintPetersburg]: Organization Name (eg, company) [Home]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [server]:server.openvpn.local Name []:server.openvpn.local Email Address [postmaster@example.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'SPB' localityName :PRINTABLE:'SaintPetersburg' organizationName :PRINTABLE:'Home' commonName :PRINTABLE:'server.openvpn.local' name :PRINTABLE:'server.openvpn.local' emailAddress :IA5STRING:'postmaster@example.com' Certificate is to be certified until Aug 19 10:34:03 2013 GMT (365 days) Sign the certificate? [y/n]:y
Далее необходимо сгенерировать параметры Диффи-Хеллмана, это займёт очень много времени если у вас не 1024, а 4096 бит (у меня заняло около двух часов), сходите попейте чаю, можете даже на обед сходить:
# . ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time .........+..........................................................................................+.............................................+.......................+....................+.....+..+.................++*++*++*
Сделаем конфигурационный файл:
# zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf # vim /etc/openvpn/server.conf
Раскомментируем эти строчки, a.b.c.d заменим на IP адрес, который висит на интерфейсе:
;local a.b.c.d ;push "redirect-gateway def1 bypass-dhcp" ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220"
DNS серверы можете указать свои. Опция redirect-gateway def1 указывает на то, что весь трафик после подключения должен идти через VPN.
Должен получится такой файл:
# egrep -v '^;|^#|^$' /etc/openvpn/server.conf local a.b.c.d port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log verb 3
Перезапустим openvpn подключение server (файл же мы назвали server.conf, так что можно легко делать несколько подключений).
# invoke-rc.d openvpn restart server
Теперь настроим перенаправление запросов из нашего тунеля в сеть:
# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf # sysctl -p # iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT # iptables -A FORWARD -j REJECT # iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Разрешим доступ по udp к порту 1194:
# iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
Сохраняем их и настраиваем автозапуск:
# iptables-save > /etc/iptables.up.rules # cat /etc/network/if-up.d/iptables #!/bin/sh iptables-restore < /etc/iptables.up.rules # chmod u+x /etc/network/if-up.d/iptables