Ключевые слова:openvpn, vpn, tunnel, linux, (найти похожие документы)
From: GeAlex
Date: Mon, 23 Oct 2010 17:02:14 +0000 (UTC)
Subject: Настройка OpenVPN-сервера для доступа в интернет
Оригинал: http://gealex.ru/linux-111.html
Задача: поднять на сервере под управлением Debian lenny VPN сервер на
базе OpenVPN для выхода посредством этого сервера в интернет.
Выгоды от этого много, все не перечислишь, от использования реального
ip в интернете, до обхода ограничений провайдера и сокрытия от него
трафика. Так же кроме шифрования трафик сжимается, что экономит его.
Устанавливаем OpenVPN и все его зависимости:
aptitude install openvpn
Переходим в директорию с утилитами для создания ключей и сертификатов:
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
В файле vars можно изменить данные для подписи ключей под себя,
редактируем последние 5 строчек:
export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Kirov"
export KEY_ORG="Personal service"
export KEY_EMAIL="[email protected]"
Остальные переменные оставляем как есть.
Инициализируем переменные и очищаем от старых сертификатов и ключей
папку keys и создаем серийный и индексные файлы для новых ключей:
./vars
./clean-all
В директории /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/
появляются серийный и индексный файлы.
Создаем ключи, отвечая на предлагаемые вопросы (можно не отвечать, а
жать enter):
./build-ca # Создаем Certificate Authority для сервера
./build-key-server server # Создаем сертификат X.509 для сервера
./build-dh # Создаем ключ Диффи Хельман
В папке ./keys появляется созданные ключи, нужные ключи нужно
скопировать в директорию /etc/openvpn/:
cp ./keys/ca.crt /etc/openvpn
cp ./keys/server.crt /etc/openvpn
cp ./keys/server.key /etc/openvpn
cp ./keys/dh1024.pem /etc/openvpn
Создаем ключи для клиентов:
./build-key-pkcs12 client1
./build-key-pkcs12 client2
из папки ./keys забираем файл client1.p12 и client1.p12 и отдаем
клиентам.
Настраиваем сервер
Создаем фал конфигурации из фала примера:
zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
Настройки которые включены по умолчанию в файле
/etc/openvpn/server.conf:
port 1194
proto udp # более быстрый и меньше генерирует служебный трафик, но
# не гарантирует доставку пакета, кому нужна работа без потерь можно влючить tcp proto tcp
dev tun # используем тип тунеля для интернет, tap для eternet
ca ca.crt # наши сертификаты
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0 # собственно наша виртуальная сеть
ifconfig-pool-persist ipp.txt
keepalive 10 120 # пинг каждые 10 секунд для поддержания канала связи
comp-lzo # сжатие трафика
persist-key
persist-tun
status openvpn-status.log #лог
verb 3 # уровень болтливости записей в логи
# Добавил опции:
local 111.111.111.111 # ip на котором будет слушать порт openvpn сервер
push "redirect-gateway" # при подключении клиента у него устанавливается шлюз по умолчанию на этот сервер
Конфиг сохраняем
Стартуем OpenVPN сервер:
/etc/init.d/openvpn start
Далее, для того что бы клиенты использовали интернет нужно настроить
NAT:
# разрешаем клиентом из сети 10.8.0.0/24 обращатся в интернет.
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
# разрешаем отдавать пакеты из интернета клиентам сети 10.8.0.0/24.
iptables -A FORWARD -d 10.8.0.0/24 -m state -state ESTABLISHED,RELATED -j ACCEPT
# с этого ip пользователи будут ходить в интернет.
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT -to-source 111.111.111.111
После перезагрузки данные правила утратят свое действие, поэтому
добавляем их в файл /etc/rc.local или в правила iptables
Еще осталось включить форвардинг в ядре
в файле /etc/sysctl.conf раскомментируем строчку: net.ipv4.ip_forward=1
Чтобы не перезагружаться сообщаем ядру о включении форвардинга:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
Все, настройка серверной части закончилась.
Настройка клиентов:Windows XP
Качаем и устанавливаем openvpn для windows отсюда
http://openvpn.se/download.html , на момент написания файл -
openvpn-2.0.9-gui-1.0.3-install.exe
Перезагружаем систему :)
В директорию c:\Program Files\OpenVPN\config\ вложим ключ client1.p12
(клиентский ключ который сгенерировали).
Там же создаем текстовый файл с названием client.ovpn и вписываем туда
параметры:
remote 111.111.111.111 1194 # ip и порт нашего сервера
client
dev tun
ping 10
comp-lzo
proto udp # или proto tcp, в зависимости от настроек сервера
tls-client
pkcs12 client1.p12 #имя файла клиентского ключа
verb 3
pull
Далее кликаем правой кнопкой мыши на значке openvpn в трее и выбираем
connect. Если все было настроено правильно, произойдет соединение с
сервером и можно пользоваться интернетом. Программы для интернета
настраивать не нужно, на всякий случай проверим что весь трафик идет
через сервер - заходим на сайт http://internet.yandex.ru/ и смотрим ip,
он должен быть как у нашего сервера.
GNU/Linux
1 способ для Mandriva 2009
Кликаем правой копкой мыши на NetApplet в трее и выбираем
VPN-подключение, далее управление VPN-соединениями. Откроется окошко
настройка VPN, вводим пароль root. Выбираем тип VPN - OpenVPN. После
этого если OpenVPN не установлен будет предложено установить нужные
пакеты, устанавливаем.
Далее - вписываем название создаваемого соединения, переходим далее,
где предлагается выбрать ключи и способы шифрования. Выбираем
"Публичный ключ инфраструктуры X509, во вкладке PKCS # 12 указываем
путь к нашему клиентскому ключу нажав на кнопку открыть (лучьше его
заранее скинуть в /etc/openvpn/, чтобы не валялся где папало), больше
ничего не указываем.
Переходим далее, где предлагается ввести параметры соединения - в поле
шлюз вписываем ip адрес нашего сервера, ip адрес выбираем получать с
сервера, нажимаем на "дополнительно", где вводим в появившемся окне
порт шлюза - 1194, если сервер настроили на tcp, то ставим галочку
"Использовать tcp ротокол" (в нашем случаее, используем протокол udp,
поэтому галочку не ставим), тип виртуального устройства tun,
подтверждаем параметры и переходим далее
Здесь предлагается активировать соединение, соглашаемся.
Все мы в интернете. Проверяем ip http://internet.yandex.ru/
Деактивировать и активировать данное VPN соединение можно через
NetApplet выбирая имя VPN соединения (понадобится вводить пароль root,
как разрешить пользователю еще не придумал), а можно
переконфигурировать через NetApplet сетевую карту или например DSL
cоединение, указав в настройках имя нашего VPN, тогда при активации
соответствующего соединения VPN будет подниматся автоматически (можно
активировать DSL с VPN от пользователя, если указано было при настройке
DSL).
2 способ для любого Linux, в том числе и Mandrivа
Все настройки производим от пользователя root.
Устанавливаем OpenVPN если не установлен, для Mandriva:
urpmi openvpn
В директорию /etc/openvpn/вкладываем файл ключа клиента VPN, созданный
на сервере.
Создаем в этой директории файл client.conf и вписываем туда параметры
как для клиента windows в файле client.ovpn. Сохраняем.
Запускаем OpenVPN
/etc/init.d/openvpn start
Все мы в интернете через OpenVPN.
Отключаем VPN командой
/etc/init.d/openvpn stop
Автору оромное спасибо, перерыл кучу советов, но этот самый дельный, получилось за раз, хотя никогда в жизни не настраивал впн сервер. Еще раз огромный респект :)
У меня такая проблема:
неопытный университетский провайдер что-то намутил с настройками, и в линуксе весь траффик на 80 порту режется(или уходит куда-то не туда), в винде все работает. Мне посоветовали решить проблему с помощью ОпенВПН, но как это может помочь, если ВПН сервер я могу поднять только в нашей(общажной) локалке, и весь траффик, идущий от ПК к серверу на порт 1194, раскидывается на изначальные порты(веб на 80, к примеру) и приходит к провайдеру, где на 80 порту траффик все также будет резаться?Или не будет?
Из примера конфига клиента: "It's best to use a separate .crt/.key file pair for each client".
Т.е. для тех, кто считает, что "It's best...", вместо:
./build-key-pkcs12 clientN
нужно:
./build-key clientN
На работе стоит прокся (сквид + дансгвардиан). Соответственно режется все - в том числе и 1194 порт. Сервер с OpenVPN пингуется, но подключиться никак. Следует указать в качестве listening 80-ый порт? Этого будет достаточно?