Шифруемся VPN'ом

Опубликовано

Возникают в жизни иногда такие моменты когда нужно зашифровать интернет-трафик, которым обмениваются два хоста находящиеся в разных точках планеты. Для таких целей очень хорошо подходит решение под названием OpenVPN.Отбросив в сторону обсуждение мотивов, которые могут сподвигнуть человека на такое решение, бо их может быть великое множество, рассмотрим реализацию на конкретном примере. А вернее на двух конкретных

примерах.В обоих примерах считаем что локально у нас какой-нибудь Windows XP, а удаленная машина, с которой нужно обмениваться шифрованным трафиком это VDS на базе OpenVZ.Пример первый. Мы хотим выходить в интернет через удаленный конец туннеля.Ставим openvpn

# apt-get install openvpn

или для красной шапки

# yum install openvpn

Пишем в поддержку хостера, предоставляющего Вам VDS просьбу включить для него tun/tap интерфейсы и поддержку NAT, обычно не отказвают.Пока ждем - стругаем конфиги для клиентской и серверной части и устанавливаем клиентскую часть на наш локальный компьютер.Конфиг сервера будет примерно такой, с объяснением основных опций:

port 1194 # портproto udp # протоколdev tun # туннельный интерфейсca /etc/openvpn/easy-rsa/keys/ca.crtcert /etc/openvpn/easy-rsa/keys/server.crtkey /etc/openvpn/easy-rsa/keys/server.keydh /etc/openvpn/easy-rsa/keys/dh1024.pem# Предыдущие четыре строчки это наше шифрование# о нем нижеserver 10.8.0.0 255.255.255.0 # наша сеткаifconfig-pool-persist ipp.txt # пул адресовpush "route 10.8.0.1" # маршрутpush "redirect-gateway def1" # делать defaulgate'омpush "dhcp-option DNS 10.8.0.1" # DNS-серверpush "dhcp-option WINS 10.8.0.1" # WINS-сервер# все что push передается клиенту в качестве# параметров настройки сетkeepalive 10 120 # поддерживать связьcomp-lzo # пожать трафикuser nobody # пользовательgroup nogroup # группаpersist-key # persist-tunstatus openvpn-status.loglog /var/log/openvpn.log # логverb 6 # детализация лога

Конфиг для клиента такой:

clientdev tundev-node test # определяет как называется# сетевое подключение, можно не указыватьproto udpremote 2.14.6.6 1194 # адрес и порт на сервереresolv-retry infinitenobindroute-method exeroute-delay 2persist-keypersist-tunmute-replay-warningsca "c:\\vpn\\ca.crt"cert "c:\\vpn\\client1.crt"key "c:\\vpn\\client1.key"ns-cert-type servercipher BF-CBCverb 6mute 20comp-lzo

Теперь о ключах. В комплекте с OpenVPN идет набор скриптов для создания центра сертификации и генерирования ключей для сервера и клиентов, называется easy-rsa. Создаем необходимые ключи и сертификаты с его помощью.

# cd /etc/openvpn/easy-rsa# ./vars# ./clean-all# ./build-ca# ./build-key-server server# ./build-key client1# ./build-dh

Копируем ca.crt, client1.crt и client1.key на локальный компьютер в директорию c:\vpn, ждем от поддержки хостера сообщения что tun/tap и NAT для VDS активированы.Запускаем openvpn на сервере

# /etc/init.d/openvpn start

На локальном компьютере тыкаем на свежесозданный конфиг правой кнопкой и выбираем в меню Start OpenVPN with this configПодключились - хорошо, не подключились - аализируем логи и ищем ошибки.Последний штрих. Для того чтобы ходить в интернет через тунель нужно настроить NAT на VDS следующим образом.

# /sbin/iptables -t nat -A POSTROUTING -o venet0 -j MASQUERADE# /sbin/iptables -A FORWARD -i venet0 -o tun0 -m state \--state RELATED,ESTABLISHED -j ACCEPT# /sbin/iptables -A FORWARD -i tun0 -o venet0 -j ACCEPT

Все готово, можно бороздить просторы World Wide Web.Пример второй. У Вас на локальном компьютере на абстрактном порту, например 9090 слушает некий сервис и Вы хотите чтобы к нему можно было обращаться извне. Настройка OpenVPN будет аналогичной, а вот NAT нужно сделать по-другому.

iptables -t nat -A PREROUTING -p tcp -d 2.14.6.6 --dport 9090 \-j DNAT --to-destination 10.8.0.2:9090iptables -t nat -A POSTROUTING -o tap0 -j SNAT --to-source 10.8.0.2

Вот примерно так, ну и конечно объединить вариант тоже никто не мешает.Решения проверены на практике, работают. Если что-то не работает - ищите ошибки.Интересное в найденном:

  • Встретил намедни ресурс, блог салона моды (да-да, блоги ведут не только интернет-гики). А ведь, действительно, есть, что почитать, от инструкций как правильно погладить рубашку до советов как оправдываться, если вещь купленная в подарок не подошла тому, кому предназначалась. Добавляю в закладки, пригодится при создании имиджа.
  • Прикольная фишка, которую подсказал коллега. Типа погугли за меня. Естественно тоже в закладки и активно юзать против тех кто не желает пользоваться поиском.
  • Лилея мечту построить собственный дерявянный коттедж за городом периодически почитываю информацию по теме. Вот сегодня еще один ресурс достойный внимания - загородные дома из дерева. Есть каталог проектов, парочку для себя даже приглядел.