Опыт внедрения OpenVPN
Опыт внедрения OpenVPN
Почему OpenVPN?
На ключевое слово vpn Google откликнулся 17 000 000 ссылок.
Это приятно удивило. Немного сузив поиск наткнулся на сайт
openvpn.sourceforge.net. Вводная статья обещала простоту
инсталяции и конфигурирования,а главное,- возможность создания
тунеля для большинства наиболее распрастранённых операционных
систем, включая Linux,SUN Solaris,*BSD, Mac OS X, w2k, w2k3.
Это то что мне нужно...
Внешний интерфейс Внешний интерфейс
100.100.100.1 101.101.101.1
+--------------+ +-------------+
| SuSE 8.2 | Internet | FreeBSD 5.3 |
| |<->-----------<->| |
| NAT,FireWall | | NAT, ipfw |
| | | |
+-----+--------+ +-------+-----+
^ ^ ^ ^
| | VPN | |
| +---------------------+ |
| 10.1.1.0 |
+-----+---+ +--+------+
|Локальная| |Локальная|
| сеть | | сеть |
+---------+ +---------+
10.0.0.0 192.168.1.0
Рис.1. Схема моей виртуальной частной сети.
Так как работать с VPN планируется "навсегда", пересобрал ядро SuSE
с поддержкой tun/tap драйвера. В современные дистрибутивы FreeBSD
поддержка tun/tap уже встроена в ядро.
Далее установил пакет. Для SuSE:
#cp openvpn-1.6.0.tar.gz /usr/src
#tar -xzvf openvpn-1.6.0.tar.gz.
#./configure
#./make
#./make install
Закапризничавшая во время конфигурированя SuSE потребовала
установить предварительно библиотеку lzo.
Под FreeBSD всё прошло гладко:
#cd /usr/ports/security/openvpn
#./make
#./make install
OpenVPN имеет два режима защиты.Первый базируется на SSL/TLS защите
с использованием сертификатов и ключей. Второй,- на использовании
статических ключей.
Для создания сертификатов пришлось подредактировать в файле
/etc/ssl/openssl.cnf несколько строк:
#
...
dir = /usr/local/etc/openvpn
certificate = $dir/my-ca.crt
private_key = $dir/private/my-ca.key
И для того чтобы не заниматься этой процедурой(созданием ключей и
сертификатов) каждый год (наверняка забуду).
default_days = 3650 #(10 лет) до пенсии хватит...
...
Далее генерирую ключи и сертификаты:
openssl req -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -day 3650
Данная команда создаст пару сертификат/ключ действующими 10 лет.
Затем создаю пару сертифика/частный ключ для каждого офиса:
openssl req -nodes -new -x509 -keyout office1.key -out office1.csr
openssl req -nodes -new -x509 -keyout office2.key -out office2.csr
openssl ca -out office1.crt -in office1.csr
openssl ca -out office2.crt -in office2.csr
Я не особенно силён в защите,но раз требуют создать Диффи Хельман
параметры для office2,создаём:
openvpn dhparam -out dh1024.pem 1024
Не забываю перенести ключи и сертификаты на машину office2.
С ключами всё.Перехожу к конфигурированию vpn.
Собственно конфигурирование сводится к созданию конфигурационных файлов
для офиса1 и офиса2. У меня офис1 выступает в качестве сервера и содержит:
#office1
dev tun
port 5000
ifconfig 10.1.1.1 10.1.1.2
#Здесь маршрутизацию поднимаем
up /etc/openvpn/office1.up
#Здесь маршрутизацию удаляем
down /etc/openvpn/office1.down
tls-server
dh dh1024.pem
ca my-ca.crt
cert office1.crt
key office1.key
verb3
#end office1
А это клиент:
#office2
dev tun
port 5000
remote 100.100.100.1
ifconfig 10.1.1.2 10.1.1.1
#Здесь маршрутизацию поднимаем
up /etc/openvpn/office2.up
#Здесь маршрутизацию удаляем
down /etc/openvpn/office2.down
tls-client
dh dh1024.pem
ca my-ca.crt
cert office2.crt
key office2.key
verb3
#end office2
Чтобы сети могли видеть друг друга файл office1.up содержит:
#up routing
route add -net 192.168.10.0/24 10.1.1.2
Сценарий down должен удалить маршрут
office1.down
#down
route del -net 192.168.10.0/24
office2.up содержит:
#up routing FreeBSD
route add -net 10.0.0.0/24 10.1.1.1 netmask 255.255.255.0
office2.down:
#down FreeBSD
route delete -net 10.0.0.0/24
Запускаем:
openvpn --config office1 на серврере;
openvpn --config office2 на машине-клиенте.
И проверяем.
SuSE:
$ ifconfig
tun0 Link encap:Point-to-Point Protocol
inet addr:10.1.1.1 P-t-P:10.1.1.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1259 Metric:1
RX packets:79017 errors:0 dropped:0 overruns:0 frame:0
TX packets:85421 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:11237151 (10.7 Mb) TX bytes:34079868 (32.5 Mb)
$ ping 10.1.1.2
PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.
64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=271 ms
64 bytes from 10.1.1.2: icmp_seq=2 ttl=64 time=419 ms
64 bytes from 10.1.1.2: icmp_seq=3 ttl=64 time=277 ms
64 bytes from 10.1.1.2: icmp_seq=4 ttl=64 time=184 ms
64 bytes from 10.1.1.2: icmp_seq=5 ttl=64 time=137 ms
--- 10.1.1.2 ping statistics ---
6 packets transmitted, 5 received, 16% packet loss, time 5039ms
rtt min/avg/max/mdev = 137.763/258.168/419.546/96.461 ms
FreeBSD:
$ ifconfig
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1259
inet6 fe80::202:44ff:fe92:7ac6%tun0 prefixlen 64 scopeid 0x5
inet 10.1.1.2 --> 10.1.1.1 netmask 0xffffffff
Opened by PID 429
$ ping 10.1.1.1
PING 10.1.1.1 (10.1.1.1): 56 data bytes
64 bytes from 10.1.1.1: icmp_seq=0 ttl=64 time=159.315 ms
64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=426.403 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=352.940 ms
64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=394.593 ms
64 bytes from 10.1.1.1: icmp_seq=4 ttl=64 time=249.855 ms
64 bytes from 10.1.1.1: icmp_seq=5 ttl=64 time=203.441 ms
^C
--- 10.1.1.1 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max/stddev = 159.315/297.758/426.403/99.439 ms
$
Разработчики OpenVPN любезно предоставили настройку файервола
для Linux,которая подключается в сценарии автозапуска OpenVPN.
#!/bin/sh
dir=/etc/openvpn
$dir/firewall.sh
openvpn --cd $dir --daemon --config office1
Для FreeBSD,как всегда всё гораздо проще:
/usr/local/etc/rc.d/openvpn.sh
#!/bin/sh
dir=/etc/openvpn
case $1 in
start) openvpn --cd $dir --daemon --config office1;;
stop) killall -TERM openvpn;;
*) echo "Use: {start|stop}"
esac
rc.firewall
#
vpn="tun0"
#vpn
${fwcmd} add allow ip from any to any via ${vpn}
#nat
${fwcmd} add divert natd all from any to any via ${oif}
#
Всё.
Огромное спасибо разработчикам OpenVPN!
Статья взята с сайта OpenNet.
www.linuxcenter.ru
Строим сеть грамотно 24-03-2008 Мини-HOWTO: Корневой NFS 24-03-2008 Строим сеть грамотно Мини-HOWTO: Корневой NFSAndreas Kostyrkaandreas@ag.or.at Перевод: Станислав Рогин, ASPLinux АннотацияВ этом документе дается объяснение того, как настроить "бездисковую" рабочуюстанцию на Linux, корневая файловая система которой подключена через NFS.Новую версия этого Мини-Howto можно найти по адресуftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root или на любом егозеркале РЯДО...
LINUX PLIP MINI-HOWTO 24-03-2008 Строим сеть грамотно LINUX PLIP MINI-HOWTOAndrea Controzzicontrozz@cli.di.unipi.it Перевод: Денис Дементьев, ASPLinux АннотацияИспользование информации этого HOWTO позволит вам настроить и использовать протокол параллельного интерфейса (Parallel Line Interface Protocol).СодержаниеВступление: что такое PLIP, и для чего он нужен?Аппаратное обе...
Как бороться со сменой IP адресов клиентами локальной сети? 24-03-2008 Строим сеть грамотно Keywords: arp mac ethernet ifconfig freebsd limit securityFrom: Alexander V. NaumochkinNewsgroups: http://www.unixfaq.ruDate: Mon, 17 May 2004 18:21:07 +0000 (UTC)Subject: Как бороться со сменой IP адресов клиентами локальной сетиОригинал: http://www.unixfaq.ru/index.pl?req=qs&id=169 Как бороться со сменой IP адресов клиентами локальной сети? Оглавление Статический ARPСтатический ARP + NOARPPort SecurityТуннелировани...
Использование бездисковых Linux-станций с загрузкой по сети 24-03-2008 Строим сеть грамотно Использование бездисковых Linux-станций с загрузкой по сетиВпервые опубликованно в журнале "Системный администратор" N11/2004Постановка задачиРабота сотрудника отдела автоматизации – это постоянная борьба спроблемами и решение задач, которые попеременно подкидываютпользователи, разработчики эксплуатируемого программного обеспечения ируководство организации. И если два первых направления работы – этопросто «борьба за живучесть кора... |