Установка OpenVPN на Linux (в OpenVZ контейнер)
Ставим openvpn из yum-а или из RPM http://dag.wieers.com/rpm/packages/openvpn/
chkconfig openvpn on
Если ставится версия 2.0 то лучше поставить поверх из исходников последнюю версию (2.1 или старше) и переписать бинарник /usr/local/sbin/openvpn -> /usr/sbin/openvpn
На хост машине для контейнера надо разрешить tun-устройства и модули ната для iptables:
vzctl stop 900
vzctl set 900 --save --iptables "ip_conntrack iptable_filter iptable_mangle ipt_state iptable_nat ip_nat_ftp ip_conntrack_ftp"
vzctl start 900
Затем подготавливаем папки конфигов:
cd /etc/openvpn/easy-rsa
chmod 777 *
mkdir /etc/openvpn/keys
Для версии 2.2 и старше будет чуть по другому:
cd /etc/openvpn/easy-rsa/2.0
chmod 777 *
mkdir /etc/openvpn/keys
touch /etc/openvpn/keys/index.txt
echo "01" > /etc/openvpn/keys/serial
в vars-файле в /etc/openvpn/easy-rsa/2.0 заменяем строку:
на
Генерируем все сертификаты:
. ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh
openvpn --genkey --secret /etc/openvpn/keys/ta.key
./build-key client1
./build-key client2
В процессе генерации сертификатов можно ничего не вводить. Все оставить по дефолту.
Последняя строчка делается столько раз, сколько надо ключей для клиентов.
Не забыть, что если дата на клиенте меньше чем дата на сервере в момент генерации сертификата – подключение не пройдет.
Включаем роутинг:
и правим соотвествующую строчку в sysctl.conf
Конфиг для сервера /etc/openvpn/server.conf:
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
server 10.10.10.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
client-to-client
duplicate-cn
keepalive 10 60
ping-timer-rem
comp-lzo
user nobody
group nobody
persist-key
persist-tun
verb 4
mute 10
log /var/log/openvpn/openvpn.log
status /var/log/openvpn/openvpn-status.log
push "dhcp-option DNS 208.67.222.222"
Ставим, включаем и делаем роутинг в iptables:
# делаем автостарт файрволу
chkconfig iptables on
# правило для нат-а, VE_IP_ADDRESS заменить на IP, который будет у вас "исходящим" для впн-трафика
iptables -t nat -A POSTROUTING -s 10.10.10.0/255.255.255.0 -o venet0 -j SNAT --to-source VE_IP_ADDRESS
# сохраняем правила
/etc/init.d/iptables save
# еще раз смотрим на сохраненные правила и проверяем
iptables -t nat -L
mkdir /var/log/openvpn
chmod 777 /var/log/openvpn
service openvpn start
Конфиг одного клиента (будет работать для Windows XP, Windows Vista и Windows 7):
proto tcp
remote vpn.domain.com
client
resolv-retry infinite
redirect-gateway def1
ca ca.crt
cert client1.crt
key client1.key
tls-client
tls-auth ta.key 1
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 4
route-metric 1
route-method exe
route-delay 2
Для Windows Vista, Windows 7 запускать клиента надо с админскими правами через батник:
"c:\program files\openvpn\bin\openvpn.exe" c:\vpn\client1.ovpn
pause
ЗЫ. На хостовой ноде может быть не загружен модуль ядра tun. Тогда:
modprobe -l |grep tun

A za4em vezde delat’ chmod 777 * ?
dostato4no chmod 750
Да, возможно и 750 хватит. Но в данном случае это без разницы.
Da inogda nado podgrzit tun ustroistvo
echo ‘modprobe tun’ >> /etc/sysconfig/vz-scripts/CTID.mount
автор,спасибо вам за сатью,но извините меня за грубость,без коментриев к командам,ценность ее ровна нулю
я в линуксе уверенный пользователь,понимаю чтобы что то сделать надо прорыть пол инета,но зачем вы такую дребидень постите?
iptables -t nat -L — где написано что это проверка правил фаервола,где пример вывода из консоли,чтобы человек который делает все по шагам,сделал все верно,а ваша статья написана в этом духе?
где написано что за место VE_IP_ADDRESS нудно писать айпи сервера?
@гость
Спасибо за комментарий. Добавил несколько поясняющих комментариев.