Пользователь
0,0
рейтинг
31 июля 2013 в 13:30

Разработка → Настройка OpenVPN шлюза в интернет на Debian, который на OpenVZ tutorial

Итак господа, приближается первое августа, поэтому задумался я над тем чтобы заиметь себе ip страны, в которой попроще с законодательством в сфере p2p, а именно Нидерландов. После достаточно долгих поисков нашел провайдера, который обещал два ядра от E3-1230, пару гигов памяти, 460 гигов винта и прекрасный нелимитированный(специально связывался с саппортом по этому вопросу — уверяют что канал не режут и после сотни терабайт) гигабитный канал за какихто 40 с копейками баксов. Единственное но — виртуализация OpenVZ — обычно я настраивал OpenVPN на XEN или KVM, поэтому все прошло не так гладко как обычно и поэтому я решил поделиться полученными знаниями.

Дистрибутив ОС — Debian 6
Итак начнем:

Устанавливаем OpenVPN и dnsmasq

aptitude install openvpn udev dnsmasq


Далее копируем скрипты генерации ключей
cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn

Потом нам обычно предлагают поправить файл /etc/openvpn/easy-rsa/2.0/vars, но если шлюз делается «для себя», то этот пункт совершенно необязателен. Если же хочется красоты то в конце вышеуказанного файла правим следующее:
export KEY_COUNTRY="XX"
export KEY_PROVINCE="XX"
export KEY_CITY="City"
export KEY_ORG="MyCompany"
export KEY_EMAIL="habr@habr.ru"


После правки vars генерируем корневой сертификат

cd /etc/openvpn/easy-rsa/2.0/
. /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/clean-all
. /etc/openvpn/easy-rsa/2.0/build-ca


Далее генерируем сертификаты сервера и клиента\клиентов(вместо cli1,cli2 можно придумывать удобные для себя названия)

. /etc/openvpn/easy-rsa/2.0/build-key-server server
. /etc/openvpn/easy-rsa/2.0/build-key cli1
. /etc/openvpn/easy-rsa/2.0/build-key cli2


Потом генерируем параметры Диффи-Хеллмана
. /etc/openvpn/easy-rsa/2.0/build-dh


Раскладываем ключи, на клиентскую сторону нужно отдать файлы ca.crt cli1.crt cli1.key, а в директорию /etc/openvpn положить файлы ca.crt ca.key dh1024.pem server.crt server.key

cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn


Теперь скопируем в директорию /etc/openvpn пример конфига, который поставляется вместе с ПО.
cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/


Чтобы наш впн сервер раздавал интернет своим клиентам в /etc/openvpn/server.conf допишем
push "redirect-gateway def1"
push "dhcp-option DNS 10.8.0.1"


Далее включаем ip-forwarding

в файле /etc/sysctl.conf раскомментируем строку
net.ipv4.ip_forward=1

а в консоли выполним
echo 1 > /proc/sys/net/ipv4/ip_forward

чтобы изменения применились без перезагрузки.

Далее настраиваем iptables.
Если у Вас выделенный сервер, или виртуальный на Xen или KVM, то в консоли пишем
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

Если виртуализация OpenVZ, то обычный NAT работать не будет, и надо использовать SNAT, для этого в консоли пишем
iptables -t nat -A POSTROUTING -o venet0 -j SNAT --to <b>a.b.c.d</b>
iptables -A FORWARD -i venet0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o venet0 -j ACCEPT

Вместо a.b.c.d соответственно внешний ip вашего сервера

Чтобы правила iptables применялись при загрузке ОС, пропишем их в /etc/rc.local, туда же, после применения правил iptables добавим перезагрузку dnsmasq. Пример файла /etc/rc.local после внесения изменений —
для dedicated\Xen\KVM:

#!/bin/sh -e
#
# [...]
#

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

/etc/init.d/dnsmasq restart

exit 0


для OpenVZ:

#!/bin/sh -e
#
# [...]
#

iptables -t nat -A POSTROUTING -o venet0 -j SNAT --to <b>a.b.c.d</b>
iptables -A FORWARD -i venet0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o venet0 -j ACCEPT

/etc/init.d/dnsmasq restart

exit 0


Далее настроим dnsmasq, для этого откроем файл /etc/dnsmasq.conf и раскомментируем\поправим две строки
listen-address=127.0.0.1,10.8.0.1
bind-interfaces


На этом настройка сервера закончена, можно перезапускать сервисы и начинать настраивать клиентов.
service openvpn restart
service dnsmasq restart


В моем случае все клиенты были на Windows 7, поэтому расскажу только про настройки клиентов на винде.

Скачиваем софт — OpenVPN, устанавливаем, в случае с Windows 7 запускаем от имени администратора «Пуск\OpenVPN\OpenVPN Gui»
Далее создаем файл %имя%.ovpn со следующим содержимым

push "redirect-gateway def1"
client 
dev tun 
proto udp 
remote <b>a.b.c.d</b> 1194 
resolv-retry infinite 
nobind 
persist-key 
persist-tun 
ca ca.crt 
cert <b>cli1.crt </b>
key <b>cli1.key</b> 
comp-lzo 
verb 3 

Вместо a.b.c.d — адрес сервера.

Складываем файл %имя%.ovpn и ранее полученные ca.crt cli1.crt cli1.key в C:/Programm files(x86)/OpenVPN/config
Вот и все, в трее правой мышью по значку OpenVPN -> Connect и нас переносит в другую страну.
Алексей Кузьмин @xHellKern
карма
7,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (15)

  • +3
    Одна беда с openvz, использование tun/tap внутри контейнера как правило запрещено.
    И без обращения к хостеру этот вопрос не решается.
    • 0
      это да… но выбранный мною хостер по умолчанию предоставляет tun/tap
      • 0
        Еще если хостер специально не озаботился увеличением параметра --numiptent то более 200 правил iptables создать не получится
  • +1
    Зачем MASQUERADE? У Вас динамический ип?
    • –1
      В данном случае адрес статический, но вариант с MASQUERADE — проверен годами и разными провайдерами в т.ч. и с динамическими адресами
    • –1
      А как без маскарада получить интернет на клиенте, скажем, 10.8.0.55?
      • +1
        Вы не в курсе, чем SNAT отличается от MASQUERADE? У правила с целью SNAT указывается внешний IP, поэтому он должен быть статический. Правило с целью MASQUERADE всякий раз берет IP с интерфейса, с которого уходит пакет, что позволяет использовать его с динамическим внешним IP, но что также создает дополнительный оверхэд. Т.о., если внешний IP — статический, зачем MASQUERADE? Чтобы процессор греть?
        • 0
          Почему бы и не погреть… В моем приеме расписано как настроить трансляцию в общем случае(читай сферический сервер в вакууме)
  • +1
    habrahabr.ru/post/153855/
    Значительно более подробный топик, описывающий ту же процедуру на том же OpenVZ (ибо Хецнер).
    • +1
      Топик хорош, но он не нагуглился, когда я гуглил про то как поднять openvpn на openvz
    • 0
      я понимаю, что прошел почти год, но отмечу что на хетцнере всё же kvm.
  • 0
    Зачем такая мощная VM для простого vpn сервера. У меня самый дешевый виртуальный севрер за 5$ с 128MB RAM и 5GB диска прекрасно держит OpenVPN.
    • 0
      А у меня там сидбокс

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.