Сервер OpenVPN на CentOS 5.2

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

Автор: OpenVPN Server On CentOS 5.2
Перевод: Сгибнев Михаил

 Представим ситуацию, когда пользователям вашей организации понадобился доступ извне к корпоративной почте или каким-либо другим данным. Я уверен, что вы можете настроить RPC over HTTPS, но есть и другие способы для достижения цели. Например, OpenVPN, который я нахожу достаточно удобным и надежным.

 В этом простейшем HOWTO я покажу, как настроить это все хозяйство. Опытные пользователи вряд ли найдут здесь что-то интересное для себя.

 В качесте допущения примем, что мы работаем с правами пользователя root и Selinux отключен, что указано в /etc/selinux/config. В противном случае необходимо выполнить команду:

#semanage port -a -t openvpn_port_t -p tcp 1723

 На случай, если OpenVPN не найдется в основном репозитарии, необходимо добавить репозитарий rpmforge (не описано в этой статье).

yum install openvpn
cd /etc/openvpn/
cp -R /usr/share/doc/openvpn-2.0.9/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0/
. ../vars
chmod +rwx *
./clean-all
source ./vars
vi ../vars

 Изменим значения вверху файла, чтобы они соответствовали нашим параметрам

vi vars

 Создаем сертификат CA:

./build-ca

 Создаем файл server.key:

source ./vars
./clean-all
./build-ca
./build-key-server server

 Редактируем файл openvpn.conf:

vi /etc/openvpn/openvpn.conf

 Хотя в файле конфигурации указано использовать tcp, считается, что на медленных линиях udp работает быстрее. (Прим. пер. — udp всегда работает быстрее, так как не требует подтверждения получения пакетов)

port 1723 # (1194 is the default but on some APN networks this is blocked)
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 172.16.0.0 255.255.255.0
push "dhcp-option DNS 192.168.168.1"
push "dhcp-option DNS 168.210.2.2"
#push "dhcp-option WINS 192.168.1.2"
push "route 192.168.168.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group users
persist-key
persist-tun
status openvpn-status.log

 Копируем ключи и запускаем OpenVPN:

cp keys/{ca.crt,ca.key,server.crt,server.key} /etc/openvpn/
./build-dh
cp keys/dh1024.pem /etc/openvpn/
/etc/init.d/openvpn start
chkconfig --list | grep vpn

 Генерируем ключи по одному на каждого клиента:

./build-key

 Рассылаем ключи клиентам:

cd keys/
zip keys.zip ca.crt ca.key .crt .csr .key
yum install -y nail
nail -s “Keys" -a keys.zip me@mydomain.co.za

 Проверяем, запустился ли OpenVPN:

netstat -ntpl | grep 1723

 Настраиваем правила iptables:

# External Interface for VPN
# VPN Interface
VPNIF="tun0"
VPNNET="172.16.0.0/24"
VPNIP="172.16.0.1"
### OpenVPN
$IPTABLES -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP --destination-port 1723 -j
ACCEPT # OpenVPN
$IPTABLES -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP --destination-port 1723 -j
ACCEPT # OpenVPN
# Allow TUN interface connections to OpenVPN server
$IPTABLES -A OUTPUT -o $INTIF -s $EXTIP -d $VPNNET -j ACCEPT
$IPTABLES -A OUTPUT -o $VPNIF -s $EXTIP -d $VPNNET -j ACCEPT
# OpenVPN
$IPTABLES -A FORWARD -i $EXTIF -o $VPNIF -m state --state ESTABLISHED,RELATED -j
ACCEPT
$IPTABLES -A FORWARD -o $INTIF -s $EXTIP -d $VPNNET -j ACCEPT
$IPTABLES -A FORWARD -o $VPNIF -s $EXTIP -d $VPNIP -j ACCEPT
$IPTABLES -A FORWARD -o $EXTIF -s $EXTIP -d $VPNNET -j ACCEPT
$IPTABLES -A FORWARD -o $VPNIF -s $INTNET -d $VPNNET -j ACCEPT

 Устанавливаем OpenVPN GUI на Windows XP

 Поскольку OpenVPN сервер у нас установлен и ключи для клиентов сгенерированы, применим полученные знания на практике и осчастливим кого-нибудь установкой клиентской части.

  • Скачиваем клиентскую часть вот отсюда
  • Устанавливаем ее
  • В каталог C:\Program Files\OpenVPN\config выкладываем наши ключи и смотрим вообще, что там есть:

    ca.crt
    ca.key
    .crt (eg. johnl.crt)
    .csr
    .key
  • Редактируем файл client.ovpn таким образом, чтобы параметры соответствовали нашему серверу:

    # The hostname/IP and port of the server.
    # You can have multiple remote entries
    # to load balance between the servers.
    remote 1723
    ;remote my-server-2 1194
    # SSL/TLS parms.
    # See the server config file for more
    # description. It's best to use
    # a separate .crt/.key file pair
    # for each client. A single ca
    # file can be used for all clients.
    ca ca.crt
    cert .crt
    key .key

 Вот это собственно и все. Не забудьте настроить маршрутизацию!

 Поразившись лаконичности данного HOWTO, привожу еще несколько ссылок:

 У оригинала статьи есть интересный комментарий:
Вместо использования на клиентах 3-ёх раздельных файлов (ca, cert, key) можно использовать единый файл формата PKCS12. Для этого надо генерировать ключ клиента командой:
build-key-pkcs12 client1
Будет создан и обычный комплект файлов, и новый файл .p12 — это и есть этот комбинированный файл. Его можно использовать в конфиге клиента одной командой pkcs12 вместо трёх команд ca, cert, key.
Также при генерации этому файлу можно задать пароль для защиты секретного ключа, в таком случае каждый раз при установке соединения будет запрашиваться пароль для доступа к секретному ключу (Внимание! Так нельзя делать при запуске сервиса, т.к. он не сможет запросить пароль и не сможет установить соединение.). Следует также иметь ввиду, что пользователь имеет право самостоятельно изменить/удалить/установить пароль защиты секретного ключа.




 Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!

3 комментария в Сервер OpenVPN на CentOS 5.2

  1. Краткость этого мануала компенсируется ошибками в нем.

    К примеру

    cp -R /usr/share/doc/openvpn-2.0.9/easy-rsa/ /etc/openvpn/
    наверное стоит заменить на
    cp -R /usr/share/openvpn/easy-rsa/ /etc/openvpn/

    cd /etc/openvpn/easy-rsa/2.0/
    ../vars на ./vars

    Некоторые куски повторяются, хотя и с разными путями:

    Изменим значения вверху файла, чтобы они соответствовали нашим параметрам
    vi ../vars
    Изменим значения вверху файла, чтобы они соответствовали нашим параметрам
    vi vars

    Поправьте это все )

    И подскажите пожалуйста, что именно править в vars’ах?

  2. Mixa:

    To Denis: Как говориться — «Мопед не мой», я просто перевел статейку 🙂 Но изменения Ваши приму.

    UPD. Я глянул на оригинал, он претерпел некоторые изменения. Очевидно, ошибки и ляпы заметили не только Вы. Я предпочел внести в перевод те изменения, что и в оригинальной статье, так как я слабо представляю себе установку OpenVPN на CentOS.

  3. Scales:

    Спасибо за перевод! Скажите, кто-нибудь разобрался, что есть $UNIVERSE в строке

    $IPTABLES -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP —destination-port 1723 -j ACCEPT

    Я так понимаю EXT*** — внешний, INT*** — внутренний!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*